🧊

serde::Deserializeで、default=trueしたい

Rustの話。

serdeでJSONから変換したいstructがあって、そこにbool型のフィールドを定義したいとする。

falseなら

#[derive(Debug, Deserialize)]
struct S {
    #[serde(default)]
    is_xxx: bool,
}

というようにすれば、Default::default()で勝手にfalseになる。

Field attributes · Serde https://serde.rs/field-attrs.html#default

trueはひと手間

#[derive(Debug, Deserialize)]
struct S {
    #[serde(default = "default_true")]
    is_xxx: bool,
}

fn default_true() -> bool {
    true
}

というように、文字列で関数を指定する必要がある。

そのうち

リテラルを直接書いたりとかできるようになったらいいなあ。

Support default literals · Issue #368 · serde-rs/serde https://github.com/serde-rs/serde/issues/368