Должен ли я анализировать ввод текста в "динамическую структуру", чтобы сделать логику на нем? - PullRequest
0 голосов
/ 06 июля 2019

Я хочу разобрать некоторый текст, на котором я хочу сделать логику (считать, сортировать, фильтровать и тому подобное).Должен ли я анализировать ввод текста в "динамическую структуру"?Из того, что я обнаружил при поиске в Интернете, это не совсем просто решить в 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);
}

Это правильный способ думать об этой проблеме?Должен ли я думать об этом как-то иначе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...