use cloud_objects::cloud_object::GenericStringObjectFormat; use serde::Serialize; use serde::de::DeserializeOwned; use super::generic_string_model::{Serializer, StringModel}; use crate::cloud_object::JsonObjectType; use crate::server::sync_queue::SerializedModel; /// A `JsonModel` is a string model that can be serialized to and deserialized from JSON. pub trait JsonModel: StringModel + Serialize + DeserializeOwned + 'static { /// Returns the JsonObjectType for this model. fn json_object_type() -> JsonObjectType; } #[allow(dead_code)] #[derive(Clone, Debug, PartialEq, Default)] pub struct JsonSerializer; impl Serializer for JsonSerializer { fn model_format() -> GenericStringObjectFormat { M::model_format() } fn serialize(model: &M) -> SerializedModel { SerializedModel::new(serde_json::to_string(model).expect("model should serialize")) } fn deserialize_owned(serialized: &str) -> anyhow::Result where Self: Sized, { Ok(serde_json::from_str(serialized)?) } }