maxminddb_writer/
data.rs

1use crate::serializer::{Error, Serializer};
2
3// TODO: make sure it's possible to check if dataref points to selected datastore
4#[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}