openbim_ifcx/layers/
memory.rs1use std::collections::HashMap;
2use std::convert::Infallible;
3
4use super::LayerResolver;
5use crate::json::WriteError;
6use crate::model::IfcxFile;
7
8#[derive(Debug, Clone, Default)]
11pub struct MemoryResolver {
12 layers: HashMap<String, Vec<u8>>,
13}
14
15impl MemoryResolver {
16 pub fn new() -> Self {
17 Self::default()
18 }
19
20 pub fn insert(&mut self, uri: impl Into<String>, bytes: impl Into<Vec<u8>>) -> Option<Vec<u8>> {
22 self.layers.insert(uri.into(), bytes.into())
23 }
24
25 pub fn insert_file(&mut self, file: &IfcxFile) -> Result<Option<Vec<u8>>, WriteError> {
29 Ok(self.insert(file.header.id.clone(), file.to_json_string()?))
30 }
31}
32
33impl LayerResolver for MemoryResolver {
34 type Error = Infallible;
35
36 fn load(&mut self, key: &str) -> Result<Option<Vec<u8>>, Self::Error> {
37 Ok(self.layers.get(key).cloned())
38 }
39}