是否可以为解析相应Debug格式的任意类型派生解析器?

Mai*_*tor 2 parsing rust

在Haskell中,作为语言特性,可以从字符串派生解析器到任意数据类型:这就是所谓的Read.Rust可以这么做吗?也就是说,给定一个任意的,enum例如:

#[derive(Debug)]
enum Foo {
    A { x: u32, s: String },
    B { v: Vec<u8> },
}
Run Code Online (Sandbox Code Playgroud)

并且,鉴于Rust包含Debug特征作为序列化任意数据类型的语言特性,是否也可以自动生成其相应的Parse特征?

换句话说,是否有一个默认的防锈功能,可以让我得到一个parse(&str) -> Foo这样的,对于任何字符串函数s要么parse(&s) == None还是format!("{:?}", parse(&s).unwrap()) == s

She*_*ter 5

不,没有这样的功能.Debug用于人类/程序员消费,而不是用于机器.

无法保证Debug输出甚至是可解析的格式,也不保证它包含类型的完整数据.

我建议使用Serde,与您选择的现有定义的序列化格式配对.

如果您愿意,您可以定义自己的 derive实现属性DebugFromStr调用Serde.