Можно ли получить синтаксический анализатор для произвольного типа, который анализирует соответствующий формат отладки? - PullRequest
0 голосов
/ 27 ноября 2018

В Haskell в качестве языковой функции возможно получить синтаксический анализатор из строки в произвольный тип данных: это называется Read класс .Возможно ли это сделать в 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?

1 Ответ

0 голосов
/ 27 ноября 2018

Нет, такой функции нет.Debug предназначен для потребления человеком / программистом, а не для машин.

Нет гарантии, что вывод Debug будет даже в разбираемом формате или что он содержит полные данные типа.

Я рекомендую вместо этого использовать Serde в сочетании с существующим определенным форматом сериализации на ваш выбор.

Если вы хотите, вы можете определить свои собственные derive атрибуты, которые реализуют Debug и FromStr, вызвав Serde.

...