use crate::{Error, Result, TemplWrite};
pub trait Template {
fn render_into(&self, writer: &mut impl TemplWrite) -> Result<()>;
fn render_block_into(&self, _block: &str, _writer: &mut impl TemplWrite) -> Result<()> {
Err(Error::NoBlock)
}
fn render(&self) -> Result<String> {
let (min,max) = self.size_hint();
let mut buffer = String::with_capacity(max.unwrap_or(min));
self.render_into(&mut buffer)?;
Ok(buffer)
}
fn render_block(&self, block: &str) -> Result<String> {
if !self.contains_block(block) {
return Err(Error::NoBlock)
}
let (min,max) = self.size_hint_block(block);
let mut buffer = String::with_capacity(max.unwrap_or(min));
self.render_block_into(block, &mut buffer)?;
Ok(buffer)
}
fn contains_block(&self, _block: &str) -> bool {
false
}
fn size_hint(&self) -> (usize,Option<usize>) {
(0,None)
}
fn size_hint_block(&self, _block: &str) -> (usize,Option<usize>) {
(0,None)
}
}