【问题标题】:How can I serialise Rust object to Rust literals using serde?如何使用 serde 将 Rust 对象序列化为 Rust 文字?
【发布时间】:2020-08-04 06:46:33
【问题描述】:

我想在代码生成中使用 serde,将一些复杂的嵌套对象迭代嵌入到生成的代码中。

我不希望 serde 产生除以下形式之外的任何东西:

const FOO: Foo = Foo {
    bar: 0,
    baz: Baz {
        quux: 1
    }
};

(也许我提供了const FOO: Foo =。)

Ron 似乎是要使用的板条箱,但它似乎不会为文字值生成 Rust 语法。

我误解了它的目的吗?

【问题讨论】:

  • 文档中的第一句话:“RON 是一种简单的配置格式,看起来类似于 Rust 语法。”我想这很清楚它实际上不是 Rust 语法。

标签: rust serde


【解决方案1】:

要按您的要求做,您需要write a custom Serde serializer。把所有的细节都弄对是一件很困难的事。大多数文字(例如字符串、字符和数字)可以使用 proc_macro2::LiteralDisplay 实现序列化为有效的 Rust 文字,这将负责转义特殊字符,如果需要的话,用 .0 为浮点数添加后缀和类似的细节.但是,看起来为结构实现序列化程序将取决于您。

Rust 中最常见的代码生成方法是writing a proc macro,并使用quote crate 发出源代码。我对您的用例了解不多,无法判断这是否对您的问题有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多