LINUX.ORG.RU

История изменений

Исправление 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" }
}