11// Copyright (c) The Diem Core Contributors
22// SPDX-License-Identifier: Apache-2.0
33
4+ // `Error::other` doesn't exist on the MSRV.
5+ #![ allow( clippy:: io_other_error) ]
6+
47use crate :: error:: { Error , Result } ;
58use serde:: { ser, Serialize } ;
69
@@ -70,26 +73,28 @@ where
7073}
7174
7275/// Same as `to_bytes` but write directly into an `std::io::Write` object.
73- pub fn serialize_into < W , T > ( write : & mut W , value : & T ) -> Result < ( ) >
76+ pub fn serialize_into < T > ( mut write : impl std :: io :: Write , value : & T ) -> Result < ( ) >
7477where
75- W : ?Sized + std:: io:: Write ,
7678 T : ?Sized + Serialize ,
7779{
78- let serializer = Serializer :: new ( write, crate :: MAX_CONTAINER_DEPTH ) ;
80+ let serializer = Serializer :: new ( & mut write, crate :: MAX_CONTAINER_DEPTH ) ;
7981 value. serialize ( serializer)
8082}
8183
8284/// Same as `serialize_into` but use `limit` as max container depth instead of MAX_CONTAINER_DEPTH
8385/// Note that `limit` has to be lower than MAX_CONTAINER_DEPTH
84- pub fn serialize_into_with_limit < W , T > ( write : & mut W , value : & T , limit : usize ) -> Result < ( ) >
86+ pub fn serialize_into_with_limit < T > (
87+ mut write : impl std:: io:: Write ,
88+ value : & T ,
89+ limit : usize ,
90+ ) -> Result < ( ) >
8591where
86- W : ?Sized + std:: io:: Write ,
8792 T : ?Sized + Serialize ,
8893{
8994 if limit > crate :: MAX_CONTAINER_DEPTH {
9095 return Err ( Error :: NotSupported ( "limit exceeds the max allowed depth" ) ) ;
9196 }
92- let serializer = Serializer :: new ( write, limit) ;
97+ let serializer = Serializer :: new ( & mut write, limit) ;
9398 value. serialize ( serializer)
9499}
95100
@@ -140,17 +145,17 @@ pub fn is_human_readable() -> bool {
140145}
141146
142147/// Serialization implementation for BCS
143- struct Serializer < ' a , W : ? Sized > {
144- output : & ' a mut W ,
148+ struct Serializer < W > {
149+ output : W ,
145150 max_remaining_depth : usize ,
146151}
147152
148- impl < ' a , W > Serializer < ' a , W >
153+ impl < W > Serializer < W >
149154where
150- W : ? Sized + std:: io:: Write ,
155+ W : std:: io:: Write ,
151156{
152157 /// Creates a new `Serializer` which will emit BCS.
153- fn new ( output : & ' a mut W , max_remaining_depth : usize ) -> Self {
158+ fn new ( output : W , max_remaining_depth : usize ) -> Self {
154159 Self {
155160 output,
156161 max_remaining_depth,
@@ -190,17 +195,17 @@ where
190195 }
191196}
192197
193- impl < ' a , W > ser:: Serializer for Serializer < ' a , W >
198+ impl < ' r , W > ser:: Serializer for Serializer < & ' r mut W >
194199where
195- W : ? Sized + std:: io:: Write ,
200+ W : std:: io:: Write ,
196201{
197202 type Ok = ( ) ;
198203 type Error = Error ;
199204 type SerializeSeq = Self ;
200205 type SerializeTuple = Self ;
201206 type SerializeTupleStruct = Self ;
202207 type SerializeTupleVariant = Self ;
203- type SerializeMap = MapSerializer < ' a , W > ;
208+ type SerializeMap = MapSerializer < & ' r mut W > ;
204209 type SerializeStruct = Self ;
205210 type SerializeStructVariant = Self ;
206211
@@ -403,9 +408,9 @@ where
403408 }
404409}
405410
406- impl < ' a , W > ser:: SerializeSeq for Serializer < ' a , W >
411+ impl < W > ser:: SerializeSeq for Serializer < & mut W >
407412where
408- W : ? Sized + std:: io:: Write ,
413+ W : std:: io:: Write ,
409414{
410415 type Ok = ( ) ;
411416 type Error = Error ;
@@ -414,17 +419,17 @@ where
414419 where
415420 T : ?Sized + Serialize ,
416421 {
417- value. serialize ( Serializer :: new ( self . output , self . max_remaining_depth ) )
422+ value. serialize ( Serializer :: new ( & mut * self . output , self . max_remaining_depth ) )
418423 }
419424
420425 fn end ( self ) -> Result < ( ) > {
421426 Ok ( ( ) )
422427 }
423428}
424429
425- impl < ' a , W > ser:: SerializeTuple for Serializer < ' a , W >
430+ impl < W > ser:: SerializeTuple for Serializer < & mut W >
426431where
427- W : ? Sized + std:: io:: Write ,
432+ W : std:: io:: Write ,
428433{
429434 type Ok = ( ) ;
430435 type Error = Error ;
@@ -433,17 +438,17 @@ where
433438 where
434439 T : ?Sized + Serialize ,
435440 {
436- value. serialize ( Serializer :: new ( self . output , self . max_remaining_depth ) )
441+ value. serialize ( Serializer :: new ( & mut * self . output , self . max_remaining_depth ) )
437442 }
438443
439444 fn end ( self ) -> Result < ( ) > {
440445 Ok ( ( ) )
441446 }
442447}
443448
444- impl < ' a , W > ser:: SerializeTupleStruct for Serializer < ' a , W >
449+ impl < W > ser:: SerializeTupleStruct for Serializer < & mut W >
445450where
446- W : ? Sized + std:: io:: Write ,
451+ W : std:: io:: Write ,
447452{
448453 type Ok = ( ) ;
449454 type Error = Error ;
@@ -452,17 +457,17 @@ where
452457 where
453458 T : ?Sized + Serialize ,
454459 {
455- value. serialize ( Serializer :: new ( self . output , self . max_remaining_depth ) )
460+ value. serialize ( Serializer :: new ( & mut * self . output , self . max_remaining_depth ) )
456461 }
457462
458463 fn end ( self ) -> Result < ( ) > {
459464 Ok ( ( ) )
460465 }
461466}
462467
463- impl < ' a , W > ser:: SerializeTupleVariant for Serializer < ' a , W >
468+ impl < W > ser:: SerializeTupleVariant for Serializer < & mut W >
464469where
465- W : ? Sized + std:: io:: Write ,
470+ W : std:: io:: Write ,
466471{
467472 type Ok = ( ) ;
468473 type Error = Error ;
@@ -471,7 +476,7 @@ where
471476 where
472477 T : ?Sized + Serialize ,
473478 {
474- value. serialize ( Serializer :: new ( self . output , self . max_remaining_depth ) )
479+ value. serialize ( Serializer :: new ( & mut * self . output , self . max_remaining_depth ) )
475480 }
476481
477482 fn end ( self ) -> Result < ( ) > {
@@ -480,14 +485,14 @@ where
480485}
481486
482487#[ doc( hidden) ]
483- struct MapSerializer < ' a , W : ? Sized > {
484- serializer : Serializer < ' a , W > ,
488+ pub struct MapSerializer < W > {
489+ serializer : Serializer < W > ,
485490 entries : Vec < ( Vec < u8 > , Vec < u8 > ) > ,
486491 next_key : Option < Vec < u8 > > ,
487492}
488493
489- impl < ' a , W : ? Sized > MapSerializer < ' a , W > {
490- fn new ( serializer : Serializer < ' a , W > ) -> Self {
494+ impl < W > MapSerializer < W > {
495+ fn new ( serializer : Serializer < W > ) -> Self {
491496 MapSerializer {
492497 serializer,
493498 entries : Vec :: new ( ) ,
@@ -496,9 +501,9 @@ impl<'a, W: ?Sized> MapSerializer<'a, W> {
496501 }
497502}
498503
499- impl < ' a , W > ser:: SerializeMap for MapSerializer < ' a , W >
504+ impl < W > ser:: SerializeMap for MapSerializer < W >
500505where
501- W : ? Sized + std:: io:: Write ,
506+ W : std:: io:: Write ,
502507{
503508 type Ok = ( ) ;
504509 type Error = Error ;
@@ -557,9 +562,9 @@ where
557562 }
558563}
559564
560- impl < ' a , W > ser:: SerializeStruct for Serializer < ' a , W >
565+ impl < W > ser:: SerializeStruct for Serializer < & mut W >
561566where
562- W : ? Sized + std:: io:: Write ,
567+ W : std:: io:: Write ,
563568{
564569 type Ok = ( ) ;
565570 type Error = Error ;
@@ -568,17 +573,17 @@ where
568573 where
569574 T : ?Sized + Serialize ,
570575 {
571- value. serialize ( Serializer :: new ( self . output , self . max_remaining_depth ) )
576+ value. serialize ( Serializer :: new ( & mut * self . output , self . max_remaining_depth ) )
572577 }
573578
574579 fn end ( self ) -> Result < ( ) > {
575580 Ok ( ( ) )
576581 }
577582}
578583
579- impl < ' a , W > ser:: SerializeStructVariant for Serializer < ' a , W >
584+ impl < W > ser:: SerializeStructVariant for Serializer < & mut W >
580585where
581- W : ? Sized + std:: io:: Write ,
586+ W : std:: io:: Write ,
582587{
583588 type Ok = ( ) ;
584589 type Error = Error ;
@@ -587,7 +592,7 @@ where
587592 where
588593 T : ?Sized + Serialize ,
589594 {
590- value. serialize ( Serializer :: new ( self . output , self . max_remaining_depth ) )
595+ value. serialize ( Serializer :: new ( & mut * self . output , self . max_remaining_depth ) )
591596 }
592597
593598 fn end ( self ) -> Result < ( ) > {
0 commit comments