Skip to main content

Module singleton_map_optional

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.