@@ -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+
138163impl < 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