В примере в документации к ящику serde_ json (синтаксический анализ JSON в структуре Rust) обработка ошибок опущена:
use serde::{Deserialize, Serialize};
use serde_json::Result;
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u8,
phones: Vec<String>,
}
fn typed_example() -> Result<()> {
// Some JSON input data as a &str. Maybe this comes from the user.
let data = r#"
{
"name": "John Doe",
"age": 43,
"phones": [
"+44 1234567",
"+44 2345678"
]
}"#;
// Parse the string of data into a Person object. This is exactly the
// same function as the one that produced serde_json::Value above, but
// now we are asking it for a Person as output.
let p: Person = serde_json::from_str(data)?;
// Do things just like with any other Rust data structure.
println!("Please call {} at the number {}", p.name, p.phones[0]);
Ok(())
}
То, что делает from_string (), контролируется типом цель назначения.
На практике мы должны обработать ошибку. Итак, естественное, что нужно сделать:
match p: Person = serde_json::from_str(data) {
...
}
, но это не разрешено в структуре соответствия.
match serde_json::from_str(data) {
...
}
всегда возвращает пустой тип "()".
В моей ситуации могут использоваться вложенные структуры соответствия, поэтому я не хотел бы использовать очевидное решение о присвоении переменной в первую очередь.
Итак, как мне управлять желаемым целевым типом выражения в структуре соответствия ?