Skip to content

Commit ed58225

Browse files
burtonageoThomas Bahn
authored and
Thomas Bahn
committed
Impl fmt::Write for AsciiString, and add tests (#33)
1 parent 7ca8afe commit ed58225

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

src/ascii_string.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,20 @@ impl fmt::Debug for AsciiString {
466466
}
467467
}
468468

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+
469483
impl FromIterator<AsciiChar> for AsciiString {
470484
fn from_iter<I: IntoIterator<Item=AsciiChar>>(iter: I) -> AsciiString {
471485
let mut buf = AsciiString::new();
@@ -644,7 +658,6 @@ impl IntoAsciiString for String {
644658
}
645659
}
646660

647-
648661
#[cfg(test)]
649662
mod tests {
650663
use std::str::FromStr;
@@ -675,4 +688,22 @@ mod tests {
675688
assert_eq!(format!("{}", s), "abc".to_string());
676689
assert_eq!(format!("{:?}", s), "\"abc\"".to_string());
677690
}
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+
}
678709
}

0 commit comments

Comments
 (0)