1use crate::serializer::{Error, Serializer};
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq)]
5pub struct DataRef {
6 pub(crate) index: usize,
7}
8
9impl DataRef {
10 pub fn data_section_offset(&self, node_count: usize) -> usize {
11 node_count + 16 + self.index
12 }
13}
14
15#[derive(Debug, Default)]
16pub(crate) struct Datastore {
17 store: Vec<u8>,
18}
19
20impl Datastore {
21 pub fn len(&self) -> usize {
22 self.store.len()
23 }
24
25 pub fn insert<T: serde::Serialize>(&mut self, value: T) -> Result<DataRef, Error> {
26 let data_ref = DataRef {
27 index: self.store.len(),
28 };
29 value
30 .serialize(&mut Serializer::new(&mut self.store))
31 .map(|_| data_ref)
32 }
33
34 pub fn serialized_data(&self) -> &[u8] {
35 &self.store
36 }
37}