11use crate :: leb128:: { self , max_leb128_len} ;
2- use crate :: serialize;
2+ use crate :: serialize:: { self , Decoder as _ , Encoder as _ } ;
33use std:: borrow:: Cow ;
44use std:: fs:: File ;
55use std:: io:: { self , Write } ;
@@ -30,11 +30,6 @@ impl Encoder {
3030 pub fn position ( & self ) -> usize {
3131 self . data . len ( )
3232 }
33-
34- #[ inline]
35- pub fn emit_raw_bytes ( & mut self , s : & [ u8 ] ) {
36- self . data . extend_from_slice ( s) ;
37- }
3833}
3934
4035macro_rules! write_leb128 {
@@ -154,7 +149,13 @@ impl serialize::Encoder for Encoder {
154149 #[ inline]
155150 fn emit_str ( & mut self , v : & str ) -> EncodeResult {
156151 self . emit_usize ( v. len ( ) ) ?;
157- self . emit_raw_bytes ( v. as_bytes ( ) ) ;
152+ self . emit_raw_bytes ( v. as_bytes ( ) ) ?;
153+ Ok ( ( ) )
154+ }
155+
156+ #[ inline]
157+ fn emit_raw_bytes ( & mut self , s : & [ u8 ] ) -> EncodeResult {
158+ self . data . extend_from_slice ( s) ;
158159 Ok ( ( ) )
159160 }
160161}
@@ -208,11 +209,6 @@ impl FileEncoder {
208209 self . flushed + self . buffered
209210 }
210211
211- #[ inline]
212- pub fn emit_raw_bytes ( & mut self , s : & [ u8 ] ) -> FileEncodeResult {
213- self . write_all ( s)
214- }
215-
216212 pub fn flush ( & mut self ) -> FileEncodeResult {
217213 // This is basically a copy of `BufWriter::flush`. If `BufWriter` ever
218214 // offers a raw buffer access API, we can use it, and remove this.
@@ -508,6 +504,11 @@ impl serialize::Encoder for FileEncoder {
508504 self . emit_usize ( v. len ( ) ) ?;
509505 self . emit_raw_bytes ( v. as_bytes ( ) )
510506 }
507+
508+ #[ inline]
509+ fn emit_raw_bytes ( & mut self , s : & [ u8 ] ) -> FileEncodeResult {
510+ self . write_all ( s)
511+ }
511512}
512513
513514// -----------------------------------------------------------------------------
@@ -539,26 +540,6 @@ impl<'a> Decoder<'a> {
539540 pub fn advance ( & mut self , bytes : usize ) {
540541 self . position += bytes;
541542 }
542-
543- #[ inline]
544- pub fn read_raw_bytes ( & mut self , s : & mut [ MaybeUninit < u8 > ] ) -> Result < ( ) , String > {
545- let start = self . position ;
546- let end = start + s. len ( ) ;
547- assert ! ( end <= self . data. len( ) ) ;
548-
549- // SAFETY: Both `src` and `dst` point to at least `s.len()` elements:
550- // `src` points to at least `s.len()` elements by above assert, and
551- // `dst` points to `s.len()` elements by derivation from `s`.
552- unsafe {
553- let src = self . data . as_ptr ( ) . add ( start) ;
554- let dst = s. as_mut_ptr ( ) as * mut u8 ;
555- ptr:: copy_nonoverlapping ( src, dst, s. len ( ) ) ;
556- }
557-
558- self . position = end;
559-
560- Ok ( ( ) )
561- }
562543}
563544
564545macro_rules! read_leb128 {
@@ -677,6 +658,26 @@ impl<'a> serialize::Decoder for Decoder<'a> {
677658 fn error ( & mut self , err : & str ) -> Self :: Error {
678659 err. to_string ( )
679660 }
661+
662+ #[ inline]
663+ fn read_raw_bytes ( & mut self , s : & mut [ MaybeUninit < u8 > ] ) -> Result < ( ) , String > {
664+ let start = self . position ;
665+ let end = start + s. len ( ) ;
666+ assert ! ( end <= self . data. len( ) ) ;
667+
668+ // SAFETY: Both `src` and `dst` point to at least `s.len()` elements:
669+ // `src` points to at least `s.len()` elements by above assert, and
670+ // `dst` points to `s.len()` elements by derivation from `s`.
671+ unsafe {
672+ let src = self . data . as_ptr ( ) . add ( start) ;
673+ let dst = s. as_mut_ptr ( ) as * mut u8 ;
674+ ptr:: copy_nonoverlapping ( src, dst, s. len ( ) ) ;
675+ }
676+
677+ self . position = end;
678+
679+ Ok ( ( ) )
680+ }
680681}
681682
682683// Specializations for contiguous byte sequences follow. The default implementations for slices
@@ -689,7 +690,7 @@ impl<'a> serialize::Decoder for Decoder<'a> {
689690impl serialize:: Encodable < Encoder > for [ u8 ] {
690691 fn encode ( & self , e : & mut Encoder ) -> EncodeResult {
691692 serialize:: Encoder :: emit_usize ( e, self . len ( ) ) ?;
692- e. emit_raw_bytes ( self ) ;
693+ e. emit_raw_bytes ( self ) ? ;
693694 Ok ( ( ) )
694695 }
695696}
0 commit comments