use simd_json::{derived::ValueTryIntoString, owned};
use crate::{
entities::identity::identity_operation::IdentityOperationData,
replica::entity::operation::operation_data::get,
};
struct SetMetadata {
metadata: Vec<(String, String)>,
}
pub(crate) fn set_metadata(
mut value: owned::Object,
) -> Result<IdentityOperationData, super::decode::Error> {
let base: SetMetadata = SetMetadata {
metadata: get! {@map[preserve-order] value,
"metadata", try_into_string, super::decode::Error},
};
Ok(IdentityOperationData::SetMetadata {
metadata: base.metadata,
})
}
pub(crate) fn set_metadata_value(
metadata: &Vec<(String, String)>,
) -> simd_json::borrowed::Object<'_> {
let mut object = simd_json::borrowed::Object::new();
let mut newer_metadata = simd_json::borrowed::Object::new();
for (key, value) in metadata {
unsafe {
newer_metadata.insert_nocheck(key.into(), value.as_str().into());
}
}
unsafe {
object.insert_nocheck("new_metadata".into(), newer_metadata.into());
}
object
}