Skip to content

Commit ae65e46

Browse files
cjhopmanmeta-codesync[bot]
authored andcommitted
Back out "Revert D91571264"
Summary: Original commit changeset: 9a083f95c9c2 Original Phabricator Diff: D91780401 Reviewed By: christolliday Differential Revision: D91840580 fbshipit-source-id: 23fd4c266dbf9a769aa804a031dce901dc126869
1 parent 5c0f959 commit ae65e46

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

pagable/src/impls/collections.rs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,31 @@ impl<'de, K: Ord + PagableDeserialize<'de>, V: PagableDeserialize<'de>> PagableD
135135
}
136136
}
137137

138+
impl<V: PagableSerialize> PagableSerialize for std::collections::BTreeSet<V> {
139+
fn pagable_serialize(&self, serializer: &mut dyn PagableSerializer) -> crate::Result<()> {
140+
usize::serialize(&self.len(), serializer.serde())?;
141+
for v in self {
142+
v.pagable_serialize(serializer)?;
143+
}
144+
Ok(())
145+
}
146+
}
147+
impl<'de, V: Ord + PagableDeserialize<'de>> PagableDeserialize<'de>
148+
for std::collections::BTreeSet<V>
149+
{
150+
fn pagable_deserialize<D: PagableDeserializer<'de> + ?Sized>(
151+
deserializer: &mut D,
152+
) -> crate::Result<Self> {
153+
let items = usize::deserialize(deserializer.serde())?;
154+
let mut set = std::collections::BTreeSet::new();
155+
for _ in 0..items {
156+
let v = V::pagable_deserialize(deserializer)?;
157+
set.insert(v);
158+
}
159+
Ok(set)
160+
}
161+
}
162+
138163
impl<T: PagableSerialize> PagableSerialize for Vec<T> {
139164
fn pagable_serialize(&self, serializer: &mut dyn PagableSerializer) -> crate::Result<()> {
140165
usize::serialize(&self.len(), serializer.serde())?;
@@ -304,4 +329,24 @@ mod tests {
304329
assert_eq!(map, restored);
305330
Ok(())
306331
}
332+
333+
#[test]
334+
fn test_btreeset_roundtrip() -> crate::Result<()> {
335+
use std::collections::BTreeSet;
336+
337+
let mut set: BTreeSet<String> = BTreeSet::new();
338+
set.insert("one".to_owned());
339+
set.insert("two".to_owned());
340+
set.insert("three".to_owned());
341+
342+
let mut serializer = TestingSerializer::new();
343+
set.pagable_serialize(&mut serializer)?;
344+
let bytes = serializer.finish();
345+
346+
let mut deserializer = TestingDeserializer::new(&bytes);
347+
let restored: BTreeSet<String> = BTreeSet::pagable_deserialize(&mut deserializer)?;
348+
349+
assert_eq!(set, restored);
350+
Ok(())
351+
}
307352
}

0 commit comments

Comments
 (0)