prefix_trie/rkyv/
deserialize.rs1use crate::{
4 joint::{JointPrefix, JointPrefixMap, JointPrefixSet},
5 rkyv::{ArchivedJointPrefixMap, ArchivedJointPrefixSet, ArchivedPrefixMap, ArchivedPrefixSet},
6 table::Table,
7 Prefix, PrefixMap, PrefixSet,
8};
9use rkyv::{
10 rancor::{Fallible, Source},
11 Archive, Deserialize,
12};
13
14impl<P, T, D> Deserialize<PrefixMap<P, T>, D> for ArchivedPrefixMap<P, T>
15where
16 P: Prefix,
17 T: Archive,
18 T::Archived: Deserialize<T, D>,
19 D: Fallible + ?Sized,
20 D::Error: Source,
21{
22 fn deserialize(&self, d: &mut D) -> Result<PrefixMap<P, T>, D::Error> {
23 let count = self.data.as_slice().len();
24 let nodes = self
25 .nodes
26 .as_slice()
27 .iter()
28 .map(|n| (n.data_bitmap.to_native(), n.child_bitmap.to_native()));
29 let data = self.data.as_slice().iter().map(|c| c.deserialize(d));
30
31 let table = Table::from_bfs(nodes, data)?;
32 Ok(PrefixMap::from_table_count(table, count))
33 }
34}
35
36impl<P, D> Deserialize<PrefixSet<P>, D> for ArchivedPrefixSet<P>
37where
38 P: Prefix,
39 D: Fallible + ?Sized,
40 D::Error: Source,
41{
42 fn deserialize(&self, d: &mut D) -> Result<PrefixSet<P>, D::Error> {
43 self.0.deserialize(d).map(PrefixSet)
44 }
45}
46
47impl<P, T, D> Deserialize<JointPrefixMap<P, T>, D> for ArchivedJointPrefixMap<P, T>
48where
49 P: JointPrefix,
50 T: Archive,
51 T::Archived: Deserialize<T, D>,
52 D: Fallible + ?Sized,
53 D::Error: Source,
54{
55 fn deserialize(&self, d: &mut D) -> Result<JointPrefixMap<P, T>, D::Error> {
56 let t1 = self.t1.deserialize(d)?;
57 let t2 = self.t2.deserialize(d)?;
58 Ok(JointPrefixMap { t1, t2 })
59 }
60}
61
62impl<P, D> Deserialize<JointPrefixSet<P>, D> for ArchivedJointPrefixSet<P>
63where
64 P: JointPrefix,
65 D: Fallible + ?Sized,
66 D::Error: Source,
67{
68 fn deserialize(&self, d: &mut D) -> Result<JointPrefixSet<P>, D::Error> {
69 let t1 = self.t1.deserialize(d)?;
70 let t2 = self.t2.deserialize(d)?;
71 Ok(JointPrefixSet { t1, t2 })
72 }
73}