@@ -342,6 +342,22 @@ impl Iterator for EscapeUnicode {
342342 EscapeUnicodeState :: Done => None ,
343343 }
344344 }
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+ }
345361}
346362
347363/// An iterator over the characters that represent a `char`, escaped
@@ -375,16 +391,16 @@ impl Iterator for EscapeDefault {
375391 Some ( c)
376392 }
377393 EscapeDefaultState :: Done => None ,
378- EscapeDefaultState :: Unicode ( ref mut iter) => iter. next ( )
394+ EscapeDefaultState :: Unicode ( ref mut iter) => iter. next ( ) ,
379395 }
380396 }
381397
382398 fn size_hint ( & self ) -> ( usize , Option < usize > ) {
383399 match self . state {
384400 EscapeDefaultState :: Char ( _) => ( 1 , Some ( 1 ) ) ,
385401 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 ) ) ,
388404 }
389405 }
390406}
0 commit comments