Module singleton_map_optional
Expand description
Serialize optional enums as single-entry maps.
This module provides serialize and deserialize functions for use with
serde’s #[serde(with = "...")] attribute to serialize Option<T> fields
where the inner type should use singleton map representation.
§Examples
use noyalib::with::singleton_map_optional;
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, PartialEq)]
enum Status {
Active,
Pending { reason: String },
}
#[derive(Debug, Serialize, Deserialize, PartialEq)]
struct Task {
name: String,
#[serde(
with = "singleton_map_optional",
skip_serializing_if = "Option::is_none",
default
)]
status: Option<Status>,
}
let task = Task {
name: "example".to_string(),
status: Some(Status::Pending {
reason: "waiting".to_string(),
}),
};
let yaml = noyalib::to_string(&task).unwrap();
let parsed: Task = noyalib::from_str(&yaml).unwrap();
assert_eq!(parsed, task);Functions§
- deserialize
- Deserialize an optional value from a singleton map.
- serialize
- Serialize an optional value as a singleton map.