serde_yml::with

Module singleton_map_optional

Source
Expand description

Serialize/deserialize an optional enum using a YAML map containing one entry in which the key identifies the variant name.

This module is similar to singleton_map, but it works with optional (Option) fields. If the field is Some, it will be serialized/deserialized using the singleton_map representation. If the field is None, it will be serialized/deserialized as null.

§Example

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, PartialEq, Debug)]
enum MyEnum {
    Variant1,
    Variant2(String),
}

#[derive(Serialize, Deserialize, PartialEq, Debug)]
struct Example {
    #[serde(with = "serde_yml::with::singleton_map_optional")]
    field: Option<MyEnum>,
}

let example = Example {
    field: Some(MyEnum::Variant2("value".to_string())),
};

let yaml = serde_yml::to_string(&example).unwrap();
assert_eq!(yaml, "field:\n  Variant2: value\n");

let deserialized: Example = serde_yml::from_str(&yaml).unwrap();
assert_eq!(example, deserialized);

Functions§

  • Deserializes a value using the singleton_map representation.
  • Serializes an optional value using the singleton_map representation.