use super::{Attribute, AttributeName};
use serde::de;
use serde_json::Value;
use std::collections::HashMap;
pub(super) fn deserialize_record_attrs<'de, D>(
attrs: Value,
) -> Result<HashMap<AttributeName, Attribute>, D::Error>
where
D: serde::Deserializer<'de>,
{
let attrs_json = serde_json::from_value::<HashMap<String, Value>>(attrs).map_err(|e| {
de::Error::custom(format!(
"error while deserializing cedar record attribute: {e}"
))
})?;
let mut attrs = HashMap::<AttributeName, Attribute>::new();
for (key, val) in attrs_json {
let val = serde_json::from_value::<Attribute>(val).map_err(|e| {
de::Error::custom(format!(
"error while deserializing cedar record attribute: {e}"
))
})?;
attrs.insert(key, val);
}
Ok(attrs)
}