如何使用serde将Rust对象序列化为Rust字面量?

3
我希望在代码生成中使用serde,将一些复杂嵌套的对象文字嵌入生成的代码中。
我并不指望serde产生除形式为以下内容之外的任何内容:
const FOO: Foo = Foo {
    bar: 0,
    baz: Baz {
        quux: 1
    }
};

(也许我提供 const FOO: Foo = 的常数。)
看起来应该使用Ron,但它似乎不会产生Rust语法的字面值。
我误解了它的目的吗?

RON是一种简单的配置格式,它看起来很像Rust语法,但这并不意味着它实际上就是Rust语法。 - Sven Marnach
1个回答

1
为了实现你所要求的,你需要编写一个自定义的Serde序列化器。这将需要一些工作来确保所有细节都正确。大多数字面量(例如字符串、字符和数字)可以使用proc_macro2::LiteralDisplay实现序列化为有效的Rust字面量,它将处理特殊字符的转义、浮点数后缀添加.0等类似的细节。然而,看起来实现结构体的序列化器就需要你自己来完成。
在Rust中,代码生成的最常见方法是编写过程宏并使用quote crate来发出源代码。我不了解你的用例是否适合这种方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接