diff --git a/src/pcd.rs b/src/pcd.rs index d1bcd2c..8a1a868 100644 --- a/src/pcd.rs +++ b/src/pcd.rs @@ -282,6 +282,36 @@ impl Pcd { pub fn insert(&mut self, key: String, value: Vec) -> Option> { self.0.insert(key, value) } + + // Helper methods for deserialization using the trait + pub fn get_as_json(&self, key: &str) -> Result { + if let Some(data) = self.get(key) { + serde_json::Value::deserialize_from_pcd(data) + } else { + Err(Error::msg("Key not found")) + } + } + + pub fn get_as_file_blob(&self, key: &str) -> Result { + if let Some(data) = self.get(key) { + FileBlob::deserialize_from_pcd(data) + } else { + Err(Error::msg("Key not found")) + } + } + + pub fn get_as(&self, key: &str) -> Result { + if let Some(data) = self.get(key) { + T::deserialize_from_pcd(data) + } else { + Err(Error::msg("Key not found")) + } + } + + pub fn insert_serializable(&mut self, key: String, value: &T) -> Result>> { + let compressed = value.serialize_to_pcd()?; + Ok(self.insert(key, compressed)) + } } #[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize, Tsify)]