"не могу найти значение __collect" при добавлении flatten к варианту структуры enum

У меня есть следующий код:

extern crate serde;
#[macro_use]
extern crate serde_derive;

#[derive(Debug, Default, Serialize, Deserialize)]
pub struct Base {
    bold: Option<bool>,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Component {
    String {
        #[serde(flatten)] base: Base,
        text: String,
    },
}

Это дает мне ошибку компилятора:

error[E0425]: cannot find value `__collect` in this scope
  --> src/main.rs:10:28
   |
10 | #[derive(Debug, Serialize, Deserialize)]
   |                            ^^^^^^^^^^^ did you mean `__content`?

error[E0277]: the trait bound `<__S as serde::Serializer>::SerializeStruct: serde::ser::SerializeMap` is not satisfied
  --> src/main.rs:10:17
   |
10 | #[derive(Debug, Serialize, Deserialize)]
   |                 ^^^^^^^^^ the trait `serde::ser::SerializeMap` is not implemented for `<__S as serde::Serializer>::SerializeStruct`
   |
   = help: consider adding a `where <__S as serde::Serializer>::SerializeStruct: serde::ser::SerializeMap` bound
   = note: required because of the requirements on the impl of `serde::Serializer` for `serde::private::ser::FlatMapSerializer<'_, <__S as serde::Serializer>::SerializeStruct>`
   = note: required by `serde::Serialize::serialize`

Если я изменю свой код на это, он прекрасно скомпилируется:

extern crate serde;
#[macro_use]
extern crate serde_derive;

#[derive(Debug, Default, Serialize, Deserialize)]
pub struct Base {
    bold: Option<bool>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Striii {
    #[serde(flatten)]
    base: Base,
    text: String,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Component {
    String(Striii),
}

Я не понимаю ошибку компилятора или почему она не должна работать. Есть ли в Serde поддержка атрибутов полей в вариантах структуры enum?

1 ответ

Решение

Это известная проблема с Serde для сериализации и десериализации. Там нет перечисленных обходных путей.

Другие вопросы по тегам