@@ -58,52 +58,43 @@ pub type Document = OrderedDocument;
58
58
59
59
impl Display for Bson {
60
60
fn fmt ( & self , fmt : & mut Formatter ) -> Result < ( ) , Error > {
61
- let bson_string = match self {
62
- & Bson :: FloatingPoint ( f) => format ! ( "{}" , f) ,
63
- & Bson :: String ( ref s) => format ! ( "\" {}\" " , s) ,
61
+ match self {
62
+ & Bson :: FloatingPoint ( f) => write ! ( fmt , "{}" , f) ,
63
+ & Bson :: String ( ref s) => write ! ( fmt , "\" {}\" " , s) ,
64
64
& Bson :: Array ( ref vec) => {
65
- let mut string = "[" . to_owned ( ) ;
65
+ try! ( write ! ( fmt , "[" ) ) ;
66
66
67
+ let mut first = true ;
67
68
for bson in vec. iter ( ) {
68
- if !string . eq ( "[" ) {
69
- string . push_str ( ", " ) ;
69
+ if !first {
70
+ try! ( write ! ( fmt , ", " ) ) ;
70
71
}
71
72
72
- string. push_str ( & format ! ( "{}" , bson) ) ;
73
+ try!( write ! ( fmt, "{}" , bson) ) ;
74
+ first = false ;
73
75
}
74
76
75
- string. push_str ( "]" ) ;
76
- string
77
+ write ! ( fmt, "]" )
77
78
}
78
- & Bson :: Document ( ref doc) => format ! ( "{}" , doc) ,
79
- & Bson :: Boolean ( b) => format ! ( "{}" , b) ,
80
- & Bson :: Null => "null" . to_owned ( ) ,
81
- & Bson :: RegExp ( ref pat, ref opt) => format ! ( "/{}/{}" , pat, opt) ,
79
+ & Bson :: Document ( ref doc) => write ! ( fmt , "{}" , doc) ,
80
+ & Bson :: Boolean ( b) => write ! ( fmt , "{}" , b) ,
81
+ & Bson :: Null => write ! ( fmt , "null" ) ,
82
+ & Bson :: RegExp ( ref pat, ref opt) => write ! ( fmt , "/{}/{}" , pat, opt) ,
82
83
& Bson :: JavaScriptCode ( ref s) |
83
- & Bson :: JavaScriptCodeWithScope ( ref s, _) => s . to_owned ( ) ,
84
- & Bson :: I32 ( i) => format ! ( "{}" , i) ,
85
- & Bson :: I64 ( i) => format ! ( "{}" , i) ,
84
+ & Bson :: JavaScriptCodeWithScope ( ref s, _) => fmt . write_str ( & s ) ,
85
+ & Bson :: I32 ( i) => write ! ( fmt , "{}" , i) ,
86
+ & Bson :: I64 ( i) => write ! ( fmt , "{}" , i) ,
86
87
& Bson :: TimeStamp ( i) => {
87
88
let time = ( i >> 32 ) as i32 ;
88
89
let inc = ( i & 0xFFFFFFFF ) as i32 ;
89
90
90
- format ! ( "Timestamp({}, {})" , time, inc)
91
+ write ! ( fmt , "Timestamp({}, {})" , time, inc)
91
92
}
92
- & Bson :: Binary ( t, ref vec) => format ! ( "BinData({}, 0x{})" , u8 :: from( t) , vec. to_hex( ) ) ,
93
- & Bson :: ObjectId ( ref id) => {
94
- let mut vec = vec ! [ ] ;
95
-
96
- for byte in id. bytes ( ) . iter ( ) {
97
- vec. push ( byte. to_owned ( ) ) ;
98
- }
99
-
100
- let string = unsafe { String :: from_utf8_unchecked ( vec) } ;
101
- format ! ( "ObjectId(\" {}\" )" , string)
102
- }
103
- & Bson :: UtcDatetime ( date_time) => format ! ( "Date(\" {}\" )" , date_time)
104
- } ;
105
-
106
- fmt. write_str ( & bson_string)
93
+ & Bson :: Binary ( t, ref vec) =>
94
+ write ! ( fmt, "BinData({}, 0x{})" , u8 :: from( t) , vec. to_hex( ) ) ,
95
+ & Bson :: ObjectId ( ref id) => write ! ( fmt, "ObjectId(\" {}\" )" , id) ,
96
+ & Bson :: UtcDatetime ( date_time) => write ! ( fmt, "Date(\" {}\" )" , date_time)
97
+ }
107
98
}
108
99
}
109
100
0 commit comments