История изменений
Исправление
RazrFalcon,
(текущая версия)
:
Доу. Я спросонья по-другому прочитал. Вот:
extern crate serde_json;
#[macro_use] extern crate serde_derive;
#[derive(Deserialize, Debug)]
struct Foo {
number: i32,
#[serde(default = "default_path")]
name: String,
}
fn default_path() -> String {
"/usr".to_owned()
}
fn main() {
let text = r#"{"number": 12, "name": "/home"}"#;
let v: Foo = serde_json::from_str(text).unwrap();
println!("{:?}", v); // Foo { number: 12, name: "/home" }
let text = r#"{"number": 12}"#;
let v: Foo = serde_json::from_str(text).unwrap();
println!("{:?}", v); // Foo { number: 12, name: "/usr" }
}
Исходная версия
RazrFalcon,
:
Доу. Я спросонья по-другому прочитал. Вот:
extern crate serde_json;
#[macro_use] extern crate serde_derive;
#[derive(Deserialize, Debug)]
struct Foo {
number: i32,
#[serde(default = "default_path")]
name: String,
}
fn default_path() -> String {
"/usr".to_owned()
}
fn main() {
let text = r#"{"number": 12, "name": "/home"}"#;
let v: Foo = serde_json::from_str(text).unwrap();
println!("{:?}", v); // Foo { number: 12, name: "/home" }
let text = r#"{"number": 12}"#;
let v: Foo = serde_json::from_str(text).unwrap();
println!("{:?}", v); // Foo { number: 12, name: "/usr" }
}