MCPcopy Create free account
hub / github.com/carsonpo/haystackdb / deserialize

Method deserialize

src/structures/mmap_tree/node.rs:179–235  ·  view source on GitHub ↗
(data: &[u8])

Source from the content-addressed store, hash-verified

177 }
178
179 pub fn deserialize(data: &[u8]) -> Self {
180 let mut offset = 0;
181
182 let node_type = deserialize_node_type(&data[offset..offset + 1]);
183 offset += 1;
184 let is_root = data[offset] == 1;
185 offset += 1;
186 let parent_offset =
187 u64::from_le_bytes(data[offset..offset + 8].try_into().unwrap()) as usize;
188 offset += 8;
189 let keys_len = read_length(&data[offset..offset + 4]);
190 offset += 4;
191 let values_len = read_length(&data[offset..offset + 4]);
192 offset += 4;
193 let num_children = read_length(&data[offset..offset + 4]);
194 offset += 4;
195
196 let mut keys = Vec::with_capacity(keys_len);
197 for _ in 0..keys_len {
198 let key_size = read_length(&data[offset..offset + 4]) as usize;
199 offset += 4;
200 let key = K::deserialize(&data[offset..offset + key_size]);
201 offset += key_size;
202 keys.push(key);
203 }
204
205 let mut values = Vec::with_capacity(values_len);
206 for _ in 0..values_len {
207 let value_size = read_length(&data[offset..offset + 4]) as usize;
208 offset += 4;
209 let value = if value_size > 0 {
210 Some(V::deserialize(&data[offset..offset + value_size]))
211 } else {
212 None
213 };
214 offset += value_size;
215 values.push(value);
216 }
217
218 let mut children = Vec::with_capacity(num_children);
219 for _ in 0..num_children {
220 let child_offset = usize::from_le_bytes(data[offset..offset + 8].try_into().unwrap());
221 offset += 8;
222 children.push(child_offset);
223 }
224
225 Node {
226 keys,
227 values,
228 children,
229 max_keys: MAX_KEYS,
230 node_type,
231 offset: 0,
232 is_root,
233 parent_offset: Some(parent_offset),
234 }
235 }
236

Callers

nothing calls this directly

Calls 3

deserialize_node_typeFunction · 0.85
read_lengthFunction · 0.85
pushMethod · 0.80

Tested by

no test coverage detected