#![forbid(unsafe_code)]
use trillium::{Conn, KnownHeaderName::ContentType};
pub trait RucteConnExt {
fn render<F>(self, render_fn: F) -> Self
where
F: FnOnce(&mut Vec<u8>) -> std::io::Result<()>;
fn render_with_size_estimate<F>(self, render_fn: F, size_estimate: usize) -> Self
where
F: FnOnce(&mut Vec<u8>) -> std::io::Result<()>;
fn render_html<F>(self, render_fn: F) -> Self
where
F: FnOnce(&mut Vec<u8>) -> std::io::Result<()>;
}
impl RucteConnExt for Conn {
fn render<F>(self, render_fn: F) -> Self
where
F: FnOnce(&mut Vec<u8>) -> std::io::Result<()>,
{
self.render_with_size_estimate(render_fn, 1024)
}
fn render_html<F>(self, render_fn: F) -> Self
where
F: FnOnce(&mut Vec<u8>) -> std::io::Result<()>,
{
self.render(render_fn)
.with_header(ContentType, "text/html; charset=utf-8")
}
fn render_with_size_estimate<F>(self, render_fn: F, size_estimate: usize) -> Self
where
F: FnOnce(&mut Vec<u8>) -> std::io::Result<()>,
{
let mut body = Vec::with_capacity(size_estimate);
trillium::conn_try!(render_fn(&mut body), self);
self.ok(body)
}
}