@@ -342,6 +342,22 @@ impl Iterator for EscapeUnicode {
342
342
EscapeUnicodeState :: Done => None ,
343
343
}
344
344
}
345
+
346
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
347
+ let mut n = 0 ;
348
+ while ( self . c as usize ) >> ( 4 * ( n + 1 ) ) != 0 {
349
+ n += 1 ;
350
+ }
351
+ let n = match self . state {
352
+ EscapeUnicodeState :: Backslash => n + 5 ,
353
+ EscapeUnicodeState :: Type => n + 4 ,
354
+ EscapeUnicodeState :: LeftBrace => n + 3 ,
355
+ EscapeUnicodeState :: Value ( offset) => offset + 2 ,
356
+ EscapeUnicodeState :: RightBrace => 1 ,
357
+ EscapeUnicodeState :: Done => 0 ,
358
+ } ;
359
+ ( n, Some ( n) )
360
+ }
345
361
}
346
362
347
363
/// An iterator over the characters that represent a `char`, escaped
@@ -375,16 +391,16 @@ impl Iterator for EscapeDefault {
375
391
Some ( c)
376
392
}
377
393
EscapeDefaultState :: Done => None ,
378
- EscapeDefaultState :: Unicode ( ref mut iter) => iter. next ( )
394
+ EscapeDefaultState :: Unicode ( ref mut iter) => iter. next ( ) ,
379
395
}
380
396
}
381
397
382
398
fn size_hint ( & self ) -> ( usize , Option < usize > ) {
383
399
match self . state {
384
400
EscapeDefaultState :: Char ( _) => ( 1 , Some ( 1 ) ) ,
385
401
EscapeDefaultState :: Backslash ( _) => ( 2 , Some ( 2 ) ) ,
386
- EscapeDefaultState :: Unicode ( _ ) => ( 0 , Some ( 10 ) ) ,
387
- _ => ( 0 , Some ( 0 ) )
402
+ EscapeDefaultState :: Unicode ( ref iter ) => iter . size_hint ( ) ,
403
+ EscapeDefaultState :: Done => ( 0 , Some ( 0 ) ) ,
388
404
}
389
405
}
390
406
}
0 commit comments