feat(render): accept a mutable reference of Write

This commit is contained in:
PoiScript 2019-03-10 01:00:29 +08:00
parent a288a6d554
commit 0c64b76dc6
3 changed files with 12 additions and 21 deletions

View file

@ -31,17 +31,17 @@ fn main() -> Result<()> {
let mut contents = String::new();
file.read_to_string(&mut contents)?;
let cursor = Cursor::new(Vec::new());
let mut cursor = Cursor::new(Vec::new());
//let mut render = DefaultHtmlRender::new(cursor, &contents);
// comment the following line and uncomment the line above to use the default handler
let mut render = HtmlRender::new(CustomHtmlHandler, cursor, &contents);
let mut render = HtmlRender::new(CustomHtmlHandler, &mut cursor, &contents);
render.render()?;
println!(
"{}",
String::from_utf8(render.into_writer().into_inner()).expect("invalid utf-8")
String::from_utf8(cursor.into_inner()).expect("invalid utf-8")
);
}

View file

@ -15,15 +15,10 @@ macro_rules! create_render {
impl<'a, W: Write> $default_render<'a, W> {
#[inline]
pub fn new(writer: W, text: &'a str) -> Self {
pub fn new(writer: &'a mut W, text: &'a str) -> Self {
$default_render($render::new($default_handler, writer, text))
}
#[inline]
pub fn into_writer(self) -> W {
self.0.writer
}
#[inline]
pub fn render(&mut self) -> Result<()> {
self.0.render()
@ -33,11 +28,11 @@ macro_rules! create_render {
pub struct $render<'a, W: Write, H: $handler<W>> {
pub parser: Parser<'a>,
handler: H,
writer: W,
writer: &'a mut W,
}
impl<'a, W: Write, H: $handler<W>> $render<'a, W, H> {
pub fn new(handler: H, writer: W, text: &'a str) -> Self {
pub fn new(handler: H, writer: &'a mut W, text: &'a str) -> Self {
$render {
parser: Parser::new(text),
handler,
@ -45,10 +40,6 @@ macro_rules! create_render {
}
}
pub fn into_writer(self) -> W {
self.writer
}
pub fn render(&mut self) -> Result<()> {
use crate::parser::Event::*;

View file

@ -36,14 +36,14 @@
//! * Title 4
//! =Section 4=";
//!
//! let cursor = Cursor::new(Vec::new());
//! let mut render = DefaultHtmlRender::new(cursor, &contents);
//! let mut cursor = Cursor::new(Vec::new());
//! let mut render = DefaultHtmlRender::new(&mut cursor, &contents);
//!
//! render
//! .render()
//! .expect("something went wrong rendering the file");
//!
//! let result = String::from_utf8(render.into_writer().into_inner()).expect("invalid utf-8");
//! let result = String::from_utf8(cursor.into_inner()).expect("invalid utf-8");
//! ```
//!
//! or `impl HtmlHandler` to create your own render. The following example
@ -79,15 +79,15 @@
//! * Title 4
//! =Section 4=";
//!
//! let cursor = Cursor::new(Vec::new());
//! let mut cursor = Cursor::new(Vec::new());
//!
//! let mut render = HtmlRender::new(CustomHtmlHandler, cursor, &contents);
//! let mut render = HtmlRender::new(CustomHtmlHandler, &mut cursor, &contents);
//!
//! render
//! .render()
//! .expect("something went wrong rendering the file");
//!
//! let result = String::from_utf8(render.into_writer().into_inner()).expect("invalid utf-8");
//! let result = String::from_utf8(cursor.into_inner()).expect("invalid utf-8");
//! ```
#[macro_use]