Return Result<(), RenderError> in `Render` trait methods
This commit is contained in:
parent
cd1b286f1b
commit
95e707152a
|
@ -1,15 +1,14 @@
|
||||||
use std::fmt;
|
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use super::buffer::Buffer;
|
use super::buffer::Buffer;
|
||||||
use super::escape;
|
use super::{escape, RenderError};
|
||||||
|
|
||||||
/// types which can be rendered inside buffer block (`<%= %>`)
|
/// types which can be rendered inside buffer block (`<%= %>`)
|
||||||
pub trait Render {
|
pub trait Render {
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result;
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError>;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
let mut tmp = Buffer::new();
|
let mut tmp = Buffer::new();
|
||||||
self.render(&mut tmp)?;
|
self.render(&mut tmp)?;
|
||||||
b.push_str(tmp.as_str());
|
b.push_str(tmp.as_str());
|
||||||
|
@ -21,34 +20,34 @@ pub trait Render {
|
||||||
// ///
|
// ///
|
||||||
// /// Explanation can be found [here](https://github.com/dtolnay/case-studies/blob/master/autoref-specialization/README.md)
|
// /// Explanation can be found [here](https://github.com/dtolnay/case-studies/blob/master/autoref-specialization/README.md)
|
||||||
// impl<T: Display> Render for &T {
|
// impl<T: Display> Render for &T {
|
||||||
// fn render(&self, b: &mut Buffer) -> fmt::Result {
|
// fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// fmt::write(b, format_args!("{}", self))
|
// fmt::write(b, format_args!("{}", self))
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
// fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// struct Wrapper<'a>(&'a mut Buffer);
|
// struct Wrapper<'a>(&'a mut Buffer);
|
||||||
//
|
//
|
||||||
// impl<'a> fmt::Write for Wrapper<'a> {
|
// impl<'a> fmt::Write for Wrapper<'a> {
|
||||||
// #[inline]
|
// #[inline]
|
||||||
// fn push_str(&mut self, s: &str) -> fmt::Result {
|
// fn push_str(&mut self, s: &str) -> Result<(), RenderError> {
|
||||||
// escape::escape_to_buf(s, self.0);
|
// escape::escape_to_buf(s, self.0);
|
||||||
// Ok(())
|
// Ok(())
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// fmt::write(&mut Wrapper(b), format_args!("{}", self))
|
// fmt::write(&mut Wrapper(b), format_args!("{}", self))
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
impl Render for str {
|
impl Render for str {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
b.push_str(self);
|
b.push_str(self);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
escape::escape_to_buf(self, b);
|
escape::escape_to_buf(self, b);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -56,13 +55,13 @@ impl Render for str {
|
||||||
|
|
||||||
impl<'a> Render for &'a str {
|
impl<'a> Render for &'a str {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
b.push_str(self);
|
b.push_str(self);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// escape string
|
// escape string
|
||||||
escape::escape_to_buf(self, b);
|
escape::escape_to_buf(self, b);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -71,13 +70,13 @@ impl<'a> Render for &'a str {
|
||||||
|
|
||||||
impl Render for String {
|
impl Render for String {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
b.push_str(self);
|
b.push_str(self);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// escape string
|
// escape string
|
||||||
escape::escape_to_buf(self, b);
|
escape::escape_to_buf(self, b);
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -86,13 +85,13 @@ impl Render for String {
|
||||||
|
|
||||||
impl Render for char {
|
impl Render for char {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
b.push(*self);
|
b.push(*self);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
match *self {
|
match *self {
|
||||||
'\"' => b.push_str("""),
|
'\"' => b.push_str("""),
|
||||||
'&' => b.push_str("&"),
|
'&' => b.push_str("&"),
|
||||||
|
@ -106,14 +105,14 @@ impl Render for char {
|
||||||
|
|
||||||
impl<'a> Render for &'a Path {
|
impl<'a> Render for &'a Path {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// TODO: speed up on Windows using OsStrExt
|
// TODO: speed up on Windows using OsStrExt
|
||||||
b.push_str(&*self.to_string_lossy());
|
b.push_str(&*self.to_string_lossy());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
escape::escape_to_buf(&*self.to_string_lossy(), b);
|
escape::escape_to_buf(&*self.to_string_lossy(), b);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -121,13 +120,13 @@ impl<'a> Render for &'a Path {
|
||||||
|
|
||||||
impl Render for PathBuf {
|
impl Render for PathBuf {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
b.push_str(&*self.to_string_lossy());
|
b.push_str(&*self.to_string_lossy());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// escape string
|
// escape string
|
||||||
escape::escape_to_buf(&*self.to_string_lossy(), b);
|
escape::escape_to_buf(&*self.to_string_lossy(), b);
|
||||||
|
|
||||||
|
@ -137,7 +136,7 @@ impl Render for PathBuf {
|
||||||
|
|
||||||
// impl Render for [u8] {
|
// impl Render for [u8] {
|
||||||
// #[inline]
|
// #[inline]
|
||||||
// fn render(&self, b: &mut Buffer) -> fmt::Result {
|
// fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// b.write_bytes(self);
|
// b.write_bytes(self);
|
||||||
// Ok(())
|
// Ok(())
|
||||||
// }
|
// }
|
||||||
|
@ -145,7 +144,7 @@ impl Render for PathBuf {
|
||||||
//
|
//
|
||||||
// impl<'a> Render for &'a [u8] {
|
// impl<'a> Render for &'a [u8] {
|
||||||
// #[inline]
|
// #[inline]
|
||||||
// fn render(&self, b: &mut Buffer) -> fmt::Result {
|
// fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// b.write_bytes(self);
|
// b.write_bytes(self);
|
||||||
// Ok(())
|
// Ok(())
|
||||||
// }
|
// }
|
||||||
|
@ -153,7 +152,7 @@ impl Render for PathBuf {
|
||||||
//
|
//
|
||||||
// impl Render for Vec<u8> {
|
// impl Render for Vec<u8> {
|
||||||
// #[inline]
|
// #[inline]
|
||||||
// fn render(&self, b: &mut Buffer) -> fmt::Result {
|
// fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// b.write_bytes(&**self);
|
// b.write_bytes(&**self);
|
||||||
// Ok(())
|
// Ok(())
|
||||||
// }
|
// }
|
||||||
|
@ -161,18 +160,14 @@ impl Render for PathBuf {
|
||||||
|
|
||||||
impl Render for bool {
|
impl Render for bool {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
let s = if *self {
|
let s = if *self { "true" } else { "false" };
|
||||||
"true"
|
|
||||||
} else {
|
|
||||||
"false"
|
|
||||||
};
|
|
||||||
b.push_str(s);
|
b.push_str(s);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
self.render(b)
|
self.render(b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,7 +177,7 @@ macro_rules! render_int {
|
||||||
$(
|
$(
|
||||||
impl Render for $int {
|
impl Render for $int {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
let mut buffer = itoa::Buffer::new();
|
let mut buffer = itoa::Buffer::new();
|
||||||
let s = buffer.format(*self);
|
let s = buffer.format(*self);
|
||||||
b.push_str(s);
|
b.push_str(s);
|
||||||
|
@ -190,7 +185,7 @@ macro_rules! render_int {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// push_str without escape
|
// push_str without escape
|
||||||
self.render(b)
|
self.render(b)
|
||||||
}
|
}
|
||||||
|
@ -206,7 +201,7 @@ macro_rules! render_float {
|
||||||
$(
|
$(
|
||||||
impl Render for $float {
|
impl Render for $float {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render(&self, b: &mut Buffer) -> fmt::Result {
|
fn render(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
let mut buffer = ryu::Buffer::new();
|
let mut buffer = ryu::Buffer::new();
|
||||||
let s = buffer.format(*self);
|
let s = buffer.format(*self);
|
||||||
b.push_str(s);
|
b.push_str(s);
|
||||||
|
@ -214,7 +209,7 @@ macro_rules! render_float {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn render_escaped(&self, b: &mut Buffer) -> fmt::Result {
|
fn render_escaped(&self, b: &mut Buffer) -> Result<(), RenderError> {
|
||||||
// escape string
|
// escape string
|
||||||
self.render(b)
|
self.render(b)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue