rust - "cannot find value __collect"将 flatten 添加到枚举结构变体时

标签 rust serde serde-json

我有以下代码:

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 不支持枚举结构变体中的字段属性吗?

最佳答案

这是 Serde 的一个已知问题 serializationdeserialization 。没有列出的解决方法。

关于rust - "cannot find value __collect"将 flatten 添加到枚举结构变体时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49495870/

相关文章:

json - 如何在具有可变键名的 json 对象上使用 serde json

rust - 使用 "Serde"反序列化时可以映射类型吗?

xml - 如何使用 serde_xml_rs 根据标签名称将 XML 反序列化为不同的结构?

rust - 使用into_serde反序列化字符串使应用程序 panic

json - 从 API 结果解析 JSON

struct - 如何在结构字段上创建可变迭代器

rust - 如何从结果中获取值?

generics - 在通用结构实现中将文字转换为关联类型

rust - 将结构的成员传递给 Rust 中相同结构的方法

json - 如何迭代层次结构中的 JSON 对象?