在Haskell中,作为一种语言功能,可以将解析器从字符串derive转换为任意数据类型:称为Read
class。在Rust中可以这样做吗?也就是说,给定任意enum
,例如:
#[derive(Debug)]
enum Foo {
A { x: u32, s: String },
B { v: Vec<u8> },
}
,并且考虑到Rust将Debug
特征作为序列化任意数据类型的语言功能,是否还可以自动生成其相应的Parse
特征?
换句话说,是否存在默认的Rust功能,该功能允许我派生parse(&str) -> Foo
函数,以便对s
或parse(&s) == None
的任何字符串format!("{:?}", parse(&s).unwrap()) == s
进行操作?
答案 0 :(得分:6)
不,没有这样的功能。 Debug
供人类/程序员使用,不适用于机器。
不能保证Debug
的输出甚至是可解析的格式,也不保证它包含类型的完整数据。
我建议改为使用Serde,并与您选择的现有定义的序列化格式配对。
如果愿意,可以通过调用Serde定义实现derive
和Debug
的 own FromStr
属性。