10
10
11
11
use fmt;
12
12
13
- struct PadAdapter < ' a , ' b : ' a > {
14
- fmt : & ' a mut fmt:: Formatter < ' b > ,
13
+ struct PadAdapter < ' a > {
14
+ buf : & ' a mut ( fmt:: Write + ' a ) ,
15
15
on_newline : bool ,
16
16
}
17
17
18
- impl < ' a , ' b : ' a > PadAdapter < ' a , ' b > {
19
- fn new ( fmt : & ' a mut fmt:: Formatter < ' b > ) -> PadAdapter < ' a , ' b > {
20
- PadAdapter {
21
- fmt,
22
- on_newline : false ,
23
- }
18
+ impl < ' a > PadAdapter < ' a > {
19
+ fn wrap < ' b , ' c : ' a +' b > ( fmt : & ' c mut fmt:: Formatter , slot : & ' b mut Option < Self > )
20
+ -> fmt:: Formatter < ' b > {
21
+ fmt. wrap_buf ( move |buf| {
22
+ * slot = Some ( PadAdapter {
23
+ buf,
24
+ on_newline : false ,
25
+ } ) ;
26
+ slot. as_mut ( ) . unwrap ( )
27
+ } )
24
28
}
25
29
}
26
30
27
- impl < ' a , ' b : ' a > fmt:: Write for PadAdapter < ' a , ' b > {
31
+ impl < ' a > fmt:: Write for PadAdapter < ' a > {
28
32
fn write_str ( & mut self , mut s : & str ) -> fmt:: Result {
29
33
while !s. is_empty ( ) {
30
34
if self . on_newline {
31
- self . fmt . write_str ( " " ) ?;
35
+ self . buf . write_str ( " " ) ?;
32
36
}
33
37
34
38
let split = match s. find ( '\n' ) {
@@ -41,7 +45,7 @@ impl<'a, 'b: 'a> fmt::Write for PadAdapter<'a, 'b> {
41
45
s. len ( )
42
46
}
43
47
} ;
44
- self . fmt . write_str ( & s[ ..split] ) ?;
48
+ self . buf . write_str ( & s[ ..split] ) ?;
45
49
s = & s[ split..] ;
46
50
}
47
51
@@ -112,11 +116,16 @@ impl<'a, 'b: 'a> DebugStruct<'a, 'b> {
112
116
} ;
113
117
114
118
if self . is_pretty ( ) {
115
- let mut writer = PadAdapter :: new ( self . fmt ) ;
116
- fmt:: write ( & mut writer,
117
- format_args ! ( "{}\n {}: {:#?}" , prefix, name, value) )
119
+ let mut slot = None ;
120
+ let mut writer = PadAdapter :: wrap ( & mut self . fmt , & mut slot) ;
121
+ writer. write_str ( prefix) ?;
122
+ writer. write_str ( "\n " ) ?;
123
+ writer. write_str ( name) ?;
124
+ writer. write_str ( ": " ) ?;
125
+ value. fmt ( & mut writer)
118
126
} else {
119
- write ! ( self . fmt, "{} {}: {:?}" , prefix, name, value)
127
+ write ! ( self . fmt, "{} {}: " , prefix, name) ?;
128
+ value. fmt ( self . fmt )
120
129
}
121
130
} ) ;
122
131
@@ -204,10 +213,15 @@ impl<'a, 'b: 'a> DebugTuple<'a, 'b> {
204
213
} ;
205
214
206
215
if self . is_pretty ( ) {
207
- let mut writer = PadAdapter :: new ( self . fmt ) ;
208
- fmt:: write ( & mut writer, format_args ! ( "{}\n {:#?}" , prefix, value) )
216
+ let mut slot = None ;
217
+ let mut writer = PadAdapter :: wrap ( & mut self . fmt , & mut slot) ;
218
+ writer. write_str ( prefix) ?;
219
+ writer. write_str ( "\n " ) ?;
220
+ value. fmt ( & mut writer)
209
221
} else {
210
- write ! ( self . fmt, "{}{}{:?}" , prefix, space, value)
222
+ self . fmt . write_str ( prefix) ?;
223
+ self . fmt . write_str ( space) ?;
224
+ value. fmt ( self . fmt )
211
225
}
212
226
} ) ;
213
227
@@ -247,20 +261,19 @@ impl<'a, 'b: 'a> DebugInner<'a, 'b> {
247
261
fn entry ( & mut self , entry : & fmt:: Debug ) {
248
262
self . result = self . result . and_then ( |_| {
249
263
if self . is_pretty ( ) {
250
- let mut writer = PadAdapter :: new ( self . fmt ) ;
251
- let prefix = if self . has_fields {
252
- ","
264
+ let mut slot = None ;
265
+ let mut writer = PadAdapter :: wrap ( & mut self . fmt , & mut slot) ;
266
+ writer. write_str ( if self . has_fields {
267
+ ",\n "
253
268
} else {
254
- ""
255
- } ;
256
- fmt:: write ( & mut writer, format_args ! ( "{} \n {:#?}" , prefix , entry ) )
269
+ "\n "
270
+ } ) ? ;
271
+ entry . fmt ( & mut writer)
257
272
} else {
258
- let prefix = if self . has_fields {
259
- ", "
260
- } else {
261
- ""
262
- } ;
263
- write ! ( self . fmt, "{}{:?}" , prefix, entry)
273
+ if self . has_fields {
274
+ self . fmt . write_str ( ", " ) ?
275
+ }
276
+ entry. fmt ( self . fmt )
264
277
}
265
278
} ) ;
266
279
@@ -472,21 +485,23 @@ impl<'a, 'b: 'a> DebugMap<'a, 'b> {
472
485
pub fn entry ( & mut self , key : & fmt:: Debug , value : & fmt:: Debug ) -> & mut DebugMap < ' a , ' b > {
473
486
self . result = self . result . and_then ( |_| {
474
487
if self . is_pretty ( ) {
475
- let mut writer = PadAdapter :: new ( self . fmt ) ;
476
- let prefix = if self . has_fields {
477
- ","
488
+ let mut slot = None ;
489
+ let mut writer = PadAdapter :: wrap ( & mut self . fmt , & mut slot) ;
490
+ writer. write_str ( if self . has_fields {
491
+ ",\n "
478
492
} else {
479
- ""
480
- } ;
481
- fmt:: write ( & mut writer,
482
- format_args ! ( "{}\n {:#?}: {:#?}" , prefix, key, value) )
493
+ "\n "
494
+ } ) ?;
495
+ key. fmt ( & mut writer) ?;
496
+ writer. write_str ( ": " ) ?;
497
+ value. fmt ( & mut writer)
483
498
} else {
484
- let prefix = if self . has_fields {
485
- ", "
486
- } else {
487
- ""
488
- } ;
489
- write ! ( self . fmt, "{}{:?}: {:?}" , prefix , key , value )
499
+ if self . has_fields {
500
+ self . fmt . write_str ( ", " ) ?
501
+ }
502
+ key . fmt ( self . fmt ) ? ;
503
+ self . fmt . write_str ( ": " ) ? ;
504
+ value . fmt ( self . fmt )
490
505
}
491
506
} ) ;
492
507
0 commit comments