Skip to main content

source_vmt/
block.rs

1use serde::de::DeserializeOwned;
2use serde::Serialize;
3use crate::vmt::Vmt;
4use crate::interner::intern_key;
5
6impl Vmt {
7    /// Deserializes a specific block into a Serde-compatible struct.
8    pub fn get_block<T: DeserializeOwned>(&self, key: &str) -> Result<Option<T>, source_kv::Error> {
9        if let Some(val) = self.get_raw(key) {
10            let parsed: T = source_kv::from_value(val.clone())?;
11            return Ok(Some(parsed));
12        }
13        Ok(None)
14    }
15
16    /// Serializes a Serde-compatible struct and sets it as a block.
17    /// Overwrites the block if it already exists.
18    pub fn set_block<T: Serialize>(&mut self, key: &str, value: &T) -> Result<&mut Self, source_kv::Error> {
19        let serialized_value = source_kv::to_value(value)?;
20        
21        self.properties.insert(
22            intern_key(key),
23            vec![serialized_value]
24        );
25        
26        Ok(self)
27    }
28}