

rustでtomlを読み込ませるには構造体が必要だと聞いたのですが、型に関し融通を聞かせるにはどうしたらいいでしょうか。

[code]

    use serde_derive::Deserialize;
    
    #[derive(Deserialize)]
    struct User {
        user: string   <--数字でもできるようにしたい
    }
    fn main() {
        let user:User= toml::from_str(r#"
        user=1234
        "#).unwrap()
        );
    }
    
[/code]


CC BY-SA 4.0
2020-05-11T12:25:27.260
66512
2020-05-11T14:10:21.210
40056
question
rust
tomlを読み込ませる際に型の融通を聞かせるには


TOMLの仕様で整数型と解釈されるので、`"`で囲んでやるべきです。

[code]

    let user: User = toml::from_str(r#"user="1234""#).unwrap();
    
[/code]

もしくはenumを使って次のように書くこともできます。

[code]

    use serde::Deserialize;
    
    #[derive(Deserialize, Debug)]
    #[serde(untagged)]
    enum User {
        ByName { user: String },
        ByNumber { user: i32 },
    }
    
    fn main() {
        let user1: User = toml::from_str(r#"user=1234"#).unwrap();
        let user2: User = toml::from_str(r#"user="foo""#).unwrap();
        println!("{:?}, {:?}", user1, user2)
    }
    
[/code]

[code]

    ByNumber { user: 1234 }, ByName { user: "foo" }
    
[/code]

[Enum representations · Serde](https://serde.rs/enum-representations.html)


CC BY-SA 4.0
2020-05-11T12:48:13.517
66513
2020-05-11T14:10:21.210
2020-05-11T14:10:21.210
13199
13199
66512
answer