| 138 | } |
| 139 | |
| 140 | pub fn serialize(&self) -> Vec<u8> { |
| 141 | let mut serialized = Vec::with_capacity(1_000_000); |
| 142 | serialized.extend_from_slice(&serialize_node_type(&self.node_type)); |
| 143 | serialized.push(self.is_root as u8); |
| 144 | serialized.extend_from_slice(&(self.parent_offset.unwrap_or(0) as u64).to_le_bytes()); |
| 145 | serialize_length(&mut serialized, self.keys.len() as u32); |
| 146 | serialize_length(&mut serialized, self.values.len() as u32); |
| 147 | serialize_length(&mut serialized, self.children.len() as u32); |
| 148 | |
| 149 | for key in &self.keys { |
| 150 | let serialized_key = key.serialize(); |
| 151 | serialized.extend_from_slice(&serialize_length( |
| 152 | &mut Vec::new(), |
| 153 | serialized_key.len() as u32, |
| 154 | )); |
| 155 | serialized.extend_from_slice(&serialized_key); |
| 156 | } |
| 157 | |
| 158 | for value in &self.values { |
| 159 | match value { |
| 160 | Some(value) => { |
| 161 | let serialized_value = value.serialize(); |
| 162 | serialized.extend_from_slice(&serialize_length( |
| 163 | &mut Vec::new(), |
| 164 | serialized_value.len() as u32, |
| 165 | )); |
| 166 | serialized.extend_from_slice(&serialized_value); |
| 167 | } |
| 168 | None => serialized.extend_from_slice(&0u32.to_le_bytes()), |
| 169 | } |
| 170 | } |
| 171 | |
| 172 | for child in &self.children { |
| 173 | serialized.extend_from_slice(&child.to_le_bytes()); |
| 174 | } |
| 175 | |
| 176 | serialized |
| 177 | } |
| 178 | |
| 179 | pub fn deserialize(data: &[u8]) -> Self { |
| 180 | let mut offset = 0; |