Rust 将方法的值添加到serde序列化输出

Rust 将方法的值添加到serde序列化输出,rust,Rust,当结构派生时,是否有方法将方法的值添加到serde的序列化输出中?我在找一个类似“虚拟场”的东西 我知道我可以定义自己的序列化程序/访问者,或者使用serde_json::builder来获取值,我只是想先检查一下是否有任何方法可以使用serde_宏magic来实现这一点 明确地说,我想要这样的东西: #[derive(Serialize, Deserialize, Debug)] struct Foo { bar: String, #[serde(call="Foo::baz"

当结构派生时,是否有方法将方法的值添加到
serde
的序列化输出中?我在找一个类似“虚拟场”的东西

我知道我可以定义自己的
序列化程序
/
访问者
,或者使用
serde_json::builder
来获取
,我只是想先检查一下是否有任何方法可以使用
serde_宏
magic来实现这一点

明确地说,我想要这样的东西:

#[derive(Serialize, Deserialize, Debug)]
struct Foo {
    bar: String,
    #[serde(call="Foo::baz")]
    baz: i32 // but this is not a real field
}

impl Foo {
    fn baz(&self) -> i32 { self.bar.len() as i32 }
}

这是我现在使用的。它仍然很冗长,我不知道这是否是处理这个问题的最佳方式,但我想我会在这里添加它以供记录:

#[derive(Deserialize, Debug)]
struct Foo {
    bar: String
}

impl Foo {
    fn baz(&self) -> i32 { self.bar.len() as i32 }
}

impl ::serde::Serialize for Foo {
    fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error> 
        where S: ::serde::Serializer {

        #[derive(Serialize)]
        struct Extended<'a> {
            bar: &'a String,
            baz: i32
        }

        let ext = Extended {
            bar: &self.bar,
            baz: self.baz()
        };

        Ok(try!(ext.serialize(serializer)))
    }
}
#[派生(反序列化、调试)]
结构Foo{
酒吧:字符串
}
impl-Foo{
fn baz(&self)->i32{self.bar.len()as i32}
}
impl::serde::为Foo序列化{
fn序列化(&self,序列化程序:&mut S)->结果
其中S:::serde::Serializer{
#[导出(序列化)]

结构Extended@Shepmaster,谢谢你的建议!我刚刚添加了一个使用包装器的简单示例--这就是你的意思吗?这肯定比定义生成器或序列化程序更容易/更简单,但实际上并不理想。。。