From b5ac0584edc64d7f5cad5b08c41c3173d37b1395 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Tue, 24 Jun 2025 17:11:35 +0200 Subject: [PATCH] Add get_as methods for Pcd --- src/pcd.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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)]