stardust_xr_molecules/
datamap.rs1use serde::{de::DeserializeOwned, Serialize};
2use stardust_xr_fusion::{
3	core::schemas::flex::flexbuffers::{self, DeserializationError},
4	input::InputMethod,
5	node::NodeError,
6};
7
8pub struct Datamap<D: Serialize + DeserializeOwned>(D);
9impl<D: Serialize + DeserializeOwned> Datamap<D> {
10	pub fn create(data: D) -> Self {
11		Datamap(data)
12	}
13	pub fn from_data(data: &[u8]) -> Result<Self, DeserializationError> {
14		flexbuffers::from_slice(data).map(|f| Datamap(f))
15	}
16	pub fn update_input_method(&mut self, input_method: &InputMethod) -> Result<(), NodeError> {
17		input_method.set_datamap(&self.serialize())
18	}
19
20	pub fn data(&mut self) -> &mut D {
21		&mut self.0
22	}
23
24	pub fn serialize(&mut self) -> Vec<u8> {
25		flexbuffers::to_vec(&mut self.data()).unwrap()
26	}
27}