oca_bundle_semantics/state/
entries.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use serde::{ser::SerializeMap, Deserialize, Serialize};
use std::collections::HashMap;

impl Serialize for EntriesElement {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: serde::Serializer,
    {
        use std::collections::BTreeMap;

        match self {
            Self::Sai(sai) => serializer.serialize_str(sai),
            Self::Object(entries) => {
                let sorted_entries: BTreeMap<_, _> = entries.iter().collect();
                let mut map = serializer.serialize_map(Some(entries.len()))?;
                for (k, v) in sorted_entries {
                    map.serialize_entry(k, v)?;
                }
                map.end()
            }
        }
    }
}

#[derive(Deserialize, Debug, Clone)]
#[serde(untagged)]
pub enum EntriesElement {
    Sai(String),
    Object(HashMap<String, String>),
}