是否可以为部分结构派生(RustcEncodable)?

价格

我有一个像这样的结构:

struct S {
    data: i32,
    fun: Box<Fn()>,
}

并希望使用编码器序列化数据部分。为此,我使用rustc_serialize并推导其特征,例如

#[derive(RustcEncodable, RustcDecodable)]
struct S {
    data: i32,
    fun: Box<Fn()>,
}

问题是它fun不能被序列化,因为它是一个函数。很好,因为我只想序列化纯data字段。有没有办法做到这一点?

data在我的实际用例中,字段也是一个结构,该结构也可以具有一个结构,Fn因此我不能简单地将该结构一分为二。

谢泼玛特

最简洁的答案是不”。rustc序列化的条板箱1不提供对traitDecodable的特性的自动实现的控制级别Encodable

为此,您需要自己实现它们:

extern crate rustc_serialize;

use rustc_serialize::{Encodable, Encoder};
use rustc_serialize::json;

struct S {
    data: i32,
    fun: Box<Fn()>,
}

impl Encodable for S {
    fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
        s.emit_struct("S", 1, |s| {
            s.emit_struct_field("data", 0, |s| {
                s.emit_i32(self.data)
            })
        })
    }
}

fn main() {
    let thing = S { data: 42, fun: Box::new(|| println!("I am a function")) };
    let json = json::encode(&thing).expect("Couldn't encode");
    println!("{}", json);
    (thing.fun)();
}

如果您不依赖于rustc-serialize,则可能对提供注释的serde感兴趣#[serde(skip_serializing)]#[serde(skip_deserializing)]


1:从技术上讲,由编译器#[derive(RustcEncodable, RustcDecodable)]提供这就是为什么它有前缀的原因。它也是一个丑陋的疣,希望被删除,但正在等待对编译器插件的稳定支持。Rustc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以为部分结构派生(RustcEncodable)?

来自分类Dev

是否可以为自定义结构重载“数组分配”?

来自分类Dev

是否可以为非结构(尤其是数字)类型定义类型转换运算符?

来自分类Dev

是否可以为自定义结构重载“数组分配”?

来自分类Dev

是否可以为屏幕/活动的每个部分设置不同的亮度级别?

来自分类Dev

是否可以为屏幕/活动的每个部分设置不同的亮度级别?

来自分类Dev

是否可以为handlebars.js / moustache.js模板的不同部分设置样式?

来自分类Dev

是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

来自分类Dev

是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

来自分类Dev

Frege:我可以为递归类型派生“ Show”吗?

来自分类Dev

Frege:我可以为递归类型派生“ Show”吗?

来自分类Dev

是否可以为Func <T1,T2,....>参数的某些部分提供xml注释以实现智能感知?

来自分类Dev

输入类型是否可以为只读?

来自分类Dev

是否可以为iOS编译Potrace?

来自分类Dev

外键是否可以为NULL?

来自分类Dev

类或对象的“ sizeof”是否可以为零?

来自分类Dev

是否可以为多个项目显示UIDocumentInteractionController?

来自分类Dev

是否可以为类重写__setattr__?

来自分类Dev

是否可以为Django配置Gulp Livereload?

来自分类Dev

是否可以为UIEdgeInsets设置动画?

来自分类Dev

是否可以为枚举设置某种接口?

来自分类Dev

是否可以为查询创建汇总列?

来自分类Dev

在Kotlin中是否可以为null?

来自分类Dev

是否可以为Kotlin覆盖ENUM的名称?

来自分类Dev

是否可以为python输出添加颜色?

来自分类Dev

Git:是否可以为pull取别名?

来自分类Dev

是否可以为流程伪造特定路径?

来自分类Dev

是否可以为InDesign导出Inkscape文件?

来自分类Dev

是否可以为ubuntu OS扩展内存?

Related 相关文章

  1. 1

    是否可以为部分结构派生(RustcEncodable)?

  2. 2

    是否可以为自定义结构重载“数组分配”?

  3. 3

    是否可以为非结构(尤其是数字)类型定义类型转换运算符?

  4. 4

    是否可以为自定义结构重载“数组分配”?

  5. 5

    是否可以为屏幕/活动的每个部分设置不同的亮度级别?

  6. 6

    是否可以为屏幕/活动的每个部分设置不同的亮度级别?

  7. 7

    是否可以为handlebars.js / moustache.js模板的不同部分设置样式?

  8. 8

    是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

  9. 9

    是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

  10. 10

    Frege:我可以为递归类型派生“ Show”吗?

  11. 11

    Frege:我可以为递归类型派生“ Show”吗?

  12. 12

    是否可以为Func <T1,T2,....>参数的某些部分提供xml注释以实现智能感知?

  13. 13

    输入类型是否可以为只读?

  14. 14

    是否可以为iOS编译Potrace?

  15. 15

    外键是否可以为NULL?

  16. 16

    类或对象的“ sizeof”是否可以为零?

  17. 17

    是否可以为多个项目显示UIDocumentInteractionController?

  18. 18

    是否可以为类重写__setattr__?

  19. 19

    是否可以为Django配置Gulp Livereload?

  20. 20

    是否可以为UIEdgeInsets设置动画?

  21. 21

    是否可以为枚举设置某种接口?

  22. 22

    是否可以为查询创建汇总列?

  23. 23

    在Kotlin中是否可以为null?

  24. 24

    是否可以为Kotlin覆盖ENUM的名称?

  25. 25

    是否可以为python输出添加颜色?

  26. 26

    Git:是否可以为pull取别名?

  27. 27

    是否可以为流程伪造特定路径?

  28. 28

    是否可以为InDesign导出Inkscape文件?

  29. 29

    是否可以为ubuntu OS扩展内存?

热门标签

归档