diff --git a/maud/src/lib.rs b/maud/src/lib.rs index 1bd5f66..446d5de 100644 --- a/maud/src/lib.rs +++ b/maud/src/lib.rs @@ -7,8 +7,9 @@ use std::io::{IoError, IoErrorKind, IoResult}; /// Escape an HTML value. pub fn escape(s: &str) -> String { + use std::fmt::Writer; let mut buf = String::new(); - rt::escape(&mut buf, |w| w.write_str(s)).unwrap(); + rt::Escaper { inner: &mut buf }.write_str(s).unwrap(); buf } @@ -71,8 +72,8 @@ pub mod rt { write!(w, "{}", value) } - struct Escaper<'a, 'b: 'a> { - inner: &'a mut (fmt::Writer + 'b), + pub struct Escaper<'a, 'b: 'a> { + pub inner: &'a mut (fmt::Writer + 'b), } impl<'a, 'b> fmt::Writer for Escaper<'a, 'b> { @@ -90,11 +91,4 @@ pub mod rt { Ok(()) } } - - #[inline] - pub fn escape<F>(w: &mut fmt::Writer, f: F) -> fmt::Result where - F: FnOnce(&mut fmt::Writer) -> fmt::Result - { - f(&mut Escaper { inner: w }) - } } diff --git a/maud_macros/src/render.rs b/maud_macros/src/render.rs index c0bfeb3..0422fb0 100644 --- a/maud_macros/src/render.rs +++ b/maud_macros/src/render.rs @@ -71,7 +71,9 @@ impl<'cx, 's, 'o> Renderer<'cx, 's, 'o> { quote_expr!(self.cx, ::maud::rt::write_fmt($w, $expr)), Escape::Escape => quote_expr!(self.cx, - ::maud::rt::escape($w, |w| ::maud::rt::write_fmt(w, $expr))), + ::maud::rt::write_fmt( + &mut ::maud::rt::Escaper { inner: $w }, + $expr)), }; self.push(expr); }