diff --git a/src/lib.rs b/src/lib.rs index 7ec0122..f3a77b1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,12 +3,41 @@ extern crate self as mono_fmt; pub use mono_fmt_macro::format_args; -use std::fmt::{Error, Write}; use crate::arguments::Arguments; pub type Result = std::result::Result<(), Error>; +#[derive(Debug)] +pub struct Error; + +pub trait Write { + fn write_str(&mut self, str: &str) -> Result; + fn write_char(&mut self, char: char) -> Result; +} + +impl Write for String { + fn write_str(&mut self, str: &str) -> Result { + self.push_str(str); + Ok(()) + } + + fn write_char(&mut self, char: char) -> Result { + self.push(char); + Ok(()) + } +} + +impl Write for &mut W { + fn write_str(&mut self, str: &str) -> Result { + ::write_str(self, str) + } + + fn write_char(&mut self, char: char) -> Result { + ::write_char(self, char) + } +} + trait Debug { fn fmt(&self, f: &mut Formatter) -> Result; } @@ -59,8 +88,7 @@ pub fn format(args: A) -> String { } mod arguments { - use crate::{Debug, Display, Formatter, Result}; - use std::fmt::Write; + use crate::{Debug, Display, Formatter, Result, Write}; pub trait Arguments { fn fmt(&self, f: &mut Formatter) -> Result; } @@ -140,7 +168,6 @@ macro_rules! format { #[cfg(test)] mod tests { - use crate::format; #[test] @@ -161,7 +188,6 @@ mod tests { assert_eq!(result, "oowuwu omg"); } - #[test] fn debug() { let result = format!("test {:?} hello", "uwu");