Я хочу разобрать некоторый текст, на котором я хочу сделать логику (считать, сортировать, фильтровать и тому подобное).Должен ли я анализировать ввод текста в "динамическую структуру"?Из того, что я обнаружил при поиске в Интернете, это не совсем просто решить в Rust.
У меня есть такой вход из файла:
#1:PERSON["#2", 180, 85, 28]
#2:EYES["green", false]
#3 ...
Я хочу создать экземпляр Person
структуры, желательно без необходимости сопоставлять все возможные структуры:
struct ParseResult {
class: String,
params: String,
}
struct Person {
eyes: Eyes,
age: i32,
weight: i32,
height: i32,
}
struct Eyes {
color: String,
glasses: bool,
}
fn parse(input: String) -> Result<Person, &'static str> {
// ...parsing magic
let x = ParseResult {
class: "PERSON".to_string(),
params: "\"#2\", 180, 85, 28, \"#3\"".to_string(),
};
// I don't want to do this if I can avoid it:
let new_struct = match x.class {
"PERSON" => { /* instantiate new person */ }
"EYES" => { /* instantiate new eyes */ }
// ...
};
// ...
Ok(new_struct)
}
#[test]
fn parse_input() {
let p = parse("#1:PERSON[\"#2\", 180, 85, 28]\n#2:EYES[\"green\", false]".to_string()).unwrap();
assert_eq!(p.age, 28);
}
Это правильный способ думать об этой проблеме?Должен ли я думать об этом как-то иначе?