use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use jmap_types::{Id, State};
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct StateChange {
pub changed: HashMap<Id, HashMap<String, State>>,
#[serde(flatten, default, skip_serializing_if = "serde_json::Map::is_empty")]
pub extra: serde_json::Map<String, serde_json::Value>,
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::json;
#[test]
fn state_change_preserves_vendor_extras() {
let raw = json!({
"changed": {
"acc1": { "Email": "s42" }
},
"acmeCorpSequence": 17
});
let obj: StateChange = serde_json::from_value(raw).expect("StateChange must deserialize");
assert_eq!(
obj.extra.get("acmeCorpSequence").and_then(|v| v.as_u64()),
Some(17)
);
let v = serde_json::to_value(&obj).expect("StateChange must serialize");
assert_eq!(v["acmeCorpSequence"], json!(17));
}
}