Make Escaper own the wrapped writer, not borrow it
This commit is contained in:
parent
b50a3be6f6
commit
5676895dd9
2 changed files with 12 additions and 15 deletions
|
@ -15,29 +15,26 @@ use std::io;
|
||||||
/// ```
|
/// ```
|
||||||
/// # use maud::Escaper;
|
/// # use maud::Escaper;
|
||||||
/// use std::fmt::Write;
|
/// use std::fmt::Write;
|
||||||
/// let mut result = String::new();
|
/// write!(Escaper::new(String::new()), "<script>launchMissiles()</script>").unwrap();
|
||||||
/// write!(Escaper::new(&mut result), "<script>launchMissiles()</script>").unwrap();
|
/// assert_eq!(result.into_inner(), "<script>launchMissiles()</script>");
|
||||||
/// assert_eq!(result, "<script>launchMissiles()</script>");
|
|
||||||
/// ```
|
/// ```
|
||||||
pub struct Escaper<'a> {
|
pub struct Escaper<W: fmt::Write> {
|
||||||
// FIXME: store the writer directly instead of borrowing it
|
inner: W,
|
||||||
// see <https://github.com/rust-lang/rust/pull/28368>
|
|
||||||
inner: &'a mut fmt::Write,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> Escaper<'a> {
|
impl<W: fmt::Write> Escaper<W> {
|
||||||
/// Creates an `Escaper` from a `std::fmt::Write`.
|
/// Creates an `Escaper` from a `std::fmt::Write`.
|
||||||
pub fn new(inner: &'a mut fmt::Write) -> Escaper<'a> {
|
pub fn new(inner: W) -> Escaper<W> {
|
||||||
Escaper { inner: inner }
|
Escaper { inner: inner }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Extracts the inner writer.
|
/// Extracts the inner writer.
|
||||||
pub fn into_inner(self) -> &'a mut fmt::Write {
|
pub fn into_inner(self) -> W {
|
||||||
self.inner
|
self.inner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> fmt::Write for Escaper<'a> {
|
impl<W: fmt::Write> fmt::Write for Escaper<W> {
|
||||||
fn write_str(&mut self, s: &str) -> fmt::Result {
|
fn write_str(&mut self, s: &str) -> fmt::Result {
|
||||||
for c in s.chars() {
|
for c in s.chars() {
|
||||||
try!(match c {
|
try!(match c {
|
||||||
|
|
|
@ -134,7 +134,7 @@ impl<'cx> Renderer<'cx> {
|
||||||
Escape::Escape =>
|
Escape::Escape =>
|
||||||
quote_expr!(self.cx,
|
quote_expr!(self.cx,
|
||||||
write!(
|
write!(
|
||||||
::maud::Escaper::new($w),
|
::maud::Escaper::new(&mut *$w),
|
||||||
"{}",
|
"{}",
|
||||||
$expr)),
|
$expr)),
|
||||||
};
|
};
|
||||||
|
@ -194,7 +194,7 @@ impl<'cx> Renderer<'cx> {
|
||||||
|
|
||||||
fn html_escape(s: &str) -> String {
|
fn html_escape(s: &str) -> String {
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
let mut out = String::new();
|
let mut escaper = Escaper::new(String::new());
|
||||||
Escaper::new(&mut out).write_str(s).unwrap();
|
escaper.write_str(s).unwrap();
|
||||||
out
|
escaper.into_inner()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue