@@ -2,6 +2,7 @@ use std::ptr;
22use std:: io:: Write ;
33use JsonValue ;
44use number:: Number ;
5+ use object:: Object ;
56use std:: io;
67
78use util:: print_dec;
@@ -113,6 +114,34 @@ pub trait Generator {
113114 }
114115 }
115116
117+ fn write_object ( & mut self , object : & Object ) -> io:: Result < ( ) > {
118+ try!( self . write_char ( b'{' ) ) ;
119+ let mut iter = object. iter ( ) ;
120+
121+ if let Some ( ( key, value) ) = iter. next ( ) {
122+ self . indent ( ) ;
123+ try!( self . new_line ( ) ) ;
124+ try!( self . write_string ( key) ) ;
125+ try!( self . write_min ( b": " , b':' ) ) ;
126+ try!( self . write_json ( value) ) ;
127+ } else {
128+ try!( self . write_char ( b'}' ) ) ;
129+ return Ok ( ( ) ) ;
130+ }
131+
132+ for ( key, value) in iter {
133+ try!( self . write_char ( b',' ) ) ;
134+ try!( self . new_line ( ) ) ;
135+ try!( self . write_string ( key) ) ;
136+ try!( self . write_min ( b": " , b':' ) ) ;
137+ try!( self . write_json ( value) ) ;
138+ }
139+
140+ self . dedent ( ) ;
141+ try!( self . new_line ( ) ) ;
142+ self . write_char ( b'}' )
143+ }
144+
116145 fn write_json ( & mut self , json : & JsonValue ) -> io:: Result < ( ) > {
117146 match * json {
118147 JsonValue :: Null => self . write ( b"null" ) ,
@@ -145,31 +174,7 @@ pub trait Generator {
145174 self . write_char ( b']' )
146175 } ,
147176 JsonValue :: Object ( ref object) => {
148- try!( self . write_char ( b'{' ) ) ;
149- let mut iter = object. iter ( ) ;
150-
151- if let Some ( ( key, value) ) = iter. next ( ) {
152- self . indent ( ) ;
153- try!( self . new_line ( ) ) ;
154- try!( self . write_string ( key) ) ;
155- try!( self . write_min ( b": " , b':' ) ) ;
156- try!( self . write_json ( value) ) ;
157- } else {
158- try!( self . write_char ( b'}' ) ) ;
159- return Ok ( ( ) ) ;
160- }
161-
162- for ( key, value) in iter {
163- try!( self . write_char ( b',' ) ) ;
164- try!( self . new_line ( ) ) ;
165- try!( self . write_string ( key) ) ;
166- try!( self . write_min ( b": " , b':' ) ) ;
167- try!( self . write_json ( value) ) ;
168- }
169-
170- self . dedent ( ) ;
171- try!( self . new_line ( ) ) ;
172- self . write_char ( b'}' )
177+ self . write_object ( object)
173178 }
174179 }
175180 }
0 commit comments