@@ -29,7 +29,7 @@ pub use self::{
2929 serde:: Encoder ,
3030} ;
3131
32- use std:: { io:: Write , iter :: IntoIterator , mem} ;
32+ use std:: { io:: Write , mem} ;
3333
3434use byteorder:: { LittleEndian , WriteBytesExt } ;
3535use chrono:: Timelike ;
@@ -56,7 +56,7 @@ fn write_cstring<W: Write + ?Sized>(writer: &mut W, s: &str) -> EncoderResult<()
5656}
5757
5858#[ inline]
59- fn write_i32 < W : Write + ?Sized > ( writer : & mut W , val : i32 ) -> EncoderResult < ( ) > {
59+ pub ( crate ) fn write_i32 < W : Write + ?Sized > ( writer : & mut W , val : i32 ) -> EncoderResult < ( ) > {
6060 writer. write_i32 :: < LittleEndian > ( val) . map_err ( From :: from)
6161}
6262
@@ -92,42 +92,19 @@ fn encode_array<W: Write + ?Sized>(writer: &mut W, arr: &[Bson]) -> EncoderResul
9292 Ok ( ( ) )
9393}
9494
95- /// Attempt to encode a `Document` into a byte stream.
96- ///
97- /// Can encode any type which is iterable as `(key: &str, value: &Bson)` pairs,
98- /// which generally means most maps.
99- pub fn encode_document <
100- ' a ,
101- S : AsRef < str > + ' a ,
102- W : Write + ?Sized ,
103- D : IntoIterator < Item = ( & ' a S , & ' a Bson ) > ,
104- > (
95+ pub ( crate ) fn encode_bson < W : Write + ?Sized > (
10596 writer : & mut W ,
106- doc : D ,
97+ key : & str ,
98+ val : & Bson ,
10799) -> EncoderResult < ( ) > {
108- let mut buf = Vec :: new ( ) ;
109- for ( key, val) in doc. into_iter ( ) {
110- encode_bson ( & mut buf, key. as_ref ( ) , val) ?;
111- }
112-
113- write_i32 (
114- writer,
115- ( buf. len ( ) + mem:: size_of :: < i32 > ( ) + mem:: size_of :: < u8 > ( ) ) as i32 ,
116- ) ?;
117- writer. write_all ( & buf) ?;
118- writer. write_u8 ( 0 ) ?;
119- Ok ( ( ) )
120- }
121-
122- fn encode_bson < W : Write + ?Sized > ( writer : & mut W , key : & str , val : & Bson ) -> EncoderResult < ( ) > {
123100 writer. write_u8 ( val. element_type ( ) as u8 ) ?;
124101 write_cstring ( writer, key) ?;
125102
126103 match * val {
127104 Bson :: FloatingPoint ( v) => write_f64 ( writer, v) ,
128105 Bson :: String ( ref v) => write_string ( writer, & v) ,
129106 Bson :: Array ( ref v) => encode_array ( writer, & v) ,
130- Bson :: Document ( ref v) => encode_document ( writer, v ) ,
107+ Bson :: Document ( ref v) => v . encode ( writer) ,
131108 Bson :: Boolean ( v) => writer
132109 . write_u8 ( if v { 0x01 } else { 0x00 } )
133110 . map_err ( From :: from) ,
@@ -146,7 +123,7 @@ fn encode_bson<W: Write + ?Sized>(writer: &mut W, key: &str, val: &Bson) -> Enco
146123 } ) => {
147124 let mut buf = Vec :: new ( ) ;
148125 write_string ( & mut buf, code) ?;
149- encode_document ( & mut buf, scope ) ?;
126+ scope . encode ( & mut buf) ?;
150127
151128 write_i32 ( writer, buf. len ( ) as i32 + 4 ) ?;
152129 writer. write_all ( & buf) . map_err ( From :: from)
0 commit comments