@@ -466,6 +466,20 @@ impl fmt::Debug for AsciiString {
466
466
}
467
467
}
468
468
469
+ impl fmt:: Write for AsciiString {
470
+ fn write_str ( & mut self , s : & str ) -> fmt:: Result {
471
+ let astr = try!( AsciiStr :: from_ascii ( s) . map_err ( |_| fmt:: Error ) ) ;
472
+ self . push_str ( astr) ;
473
+ Ok ( ( ) )
474
+ }
475
+
476
+ fn write_char ( & mut self , c : char ) -> fmt:: Result {
477
+ let achar = try!( AsciiChar :: from ( c) . map_err ( |_| fmt:: Error ) ) ;
478
+ self . push ( achar) ;
479
+ Ok ( ( ) )
480
+ }
481
+ }
482
+
469
483
impl FromIterator < AsciiChar > for AsciiString {
470
484
fn from_iter < I : IntoIterator < Item =AsciiChar > > ( iter : I ) -> AsciiString {
471
485
let mut buf = AsciiString :: new ( ) ;
@@ -644,7 +658,6 @@ impl IntoAsciiString for String {
644
658
}
645
659
}
646
660
647
-
648
661
#[ cfg( test) ]
649
662
mod tests {
650
663
use std:: str:: FromStr ;
@@ -675,4 +688,22 @@ mod tests {
675
688
assert_eq ! ( format!( "{}" , s) , "abc" . to_string( ) ) ;
676
689
assert_eq ! ( format!( "{:?}" , s) , "\" abc\" " . to_string( ) ) ;
677
690
}
691
+
692
+ #[ test]
693
+ fn write_fmt ( ) {
694
+ use std:: { fmt, str} ;
695
+
696
+ let mut s0 = AsciiString :: new ( ) ;
697
+ fmt:: write ( & mut s0, format_args ! ( "Hello World" ) ) . unwrap ( ) ;
698
+ assert_eq ! ( s0, "Hello World" ) ;
699
+
700
+ let mut s1 = AsciiString :: new ( ) ;
701
+ fmt:: write ( & mut s1, format_args ! ( "{}" , 9 ) ) . unwrap ( ) ;
702
+ assert_eq ! ( s1, "9" ) ;
703
+
704
+ let mut s2 = AsciiString :: new ( ) ;
705
+ let sparkle_heart_bytes = [ 240 , 159 , 146 , 150 ] ;
706
+ let sparkle_heart = str:: from_utf8 ( & sparkle_heart_bytes) . unwrap ( ) ;
707
+ assert ! ( fmt:: write( & mut s2, format_args!( "{}" , sparkle_heart) ) . is_err( ) ) ;
708
+ }
678
709
}
0 commit comments