11use JsonValue ;
22
33pub trait Generator {
4+ fn current_index ( & self ) -> usize ;
5+
46 fn new_line ( & mut self ) { }
57
68 fn write ( & mut self , slice : & [ u8 ] ) ;
@@ -34,16 +36,13 @@ pub trait Generator {
3436 self . write_char ( b'"' ) ;
3537 }
3638
37- fn write_digits_from_u64 ( & mut self , mut num : u64 ) -> u8 {
39+ fn write_digits_from_u64 ( & mut self , mut num : u64 ) {
3840 let digit = ( num % 10 ) as u8 ;
3941 if num > 9 {
4042 num /= 10 ;
41- let length = self . write_digits_from_u64 ( num) + 1 ;
42- self . write_char ( digit + b'0' ) ;
43- return length;
43+ self . write_digits_from_u64 ( num) ;
4444 }
4545 self . write_char ( digit + b'0' ) ;
46- 1
4746 }
4847
4948 fn write_number ( & mut self , mut num : f64 ) {
@@ -52,13 +51,18 @@ pub trait Generator {
5251 self . write_char ( b'-' ) ;
5352 }
5453
55- let mut length = self . write_digits_from_u64 ( num as u64 ) ;
54+ let start = self . current_index ( ) ;
55+
56+ self . write_digits_from_u64 ( num as u64 ) ;
57+
5658 let mut fract = num. fract ( ) ;
5759
5860 if fract < 1e-16 {
5961 return ;
6062 }
6163
64+ let mut length = self . current_index ( ) - start;
65+
6266 fract *= 10.0 ;
6367
6468 self . write_char ( b'.' ) ;
@@ -138,6 +142,10 @@ impl DumpGenerator {
138142}
139143
140144impl Generator for DumpGenerator {
145+ fn current_index ( & self ) -> usize {
146+ self . code . len ( )
147+ }
148+
141149 fn write ( & mut self , slice : & [ u8 ] ) {
142150 self . code . extend_from_slice ( slice) ;
143151 }
@@ -172,6 +180,10 @@ impl PrettyGenerator {
172180}
173181
174182impl Generator for PrettyGenerator {
183+ fn current_index ( & self ) -> usize {
184+ self . code . len ( )
185+ }
186+
175187 fn new_line ( & mut self ) {
176188 self . code . push ( b'\n' ) ;
177189 for _ in 0 ..( self . dent * self . spaces_per_indent ) {
0 commit comments