pub struct Handlebars<'reg> { /* private fields */ }
Expand description
The single entry point of your Handlebars templates
It maintains compiled templates and registered helpers.
Implementations§
Source§impl<'reg> Registry<'reg>
impl<'reg> Registry<'reg>
pub fn new() -> Registry<'reg>
Sourcepub fn set_strict_mode(&mut self, enabled: bool)
pub fn set_strict_mode(&mut self, enabled: bool)
Enable or disable handlebars strict mode
By default, handlebars renders empty string for value that
undefined or never exists. Since rust is a static type
language, we offer strict mode in handlebars-rust. In strict
mode, if you were to render a value that doesn’t exist, a
RenderError
will be raised.
Sourcepub fn strict_mode(&self) -> bool
pub fn strict_mode(&self) -> bool
Return strict mode state, default is false.
By default, handlebars renders empty string for value that
undefined or never exists. Since rust is a static type
language, we offer strict mode in handlebars-rust. In strict
mode, if you were access a value that doesn’t exist, a
RenderError
will be raised.
Sourcepub fn dev_mode(&self) -> bool
pub fn dev_mode(&self) -> bool
Return dev mode state, default is false
With dev mode turned on, handlebars enables a set of development friendly features, that may affect its performance.
Sourcepub fn set_dev_mode(&mut self, enabled: bool)
pub fn set_dev_mode(&mut self, enabled: bool)
Enable or disable dev mode
With dev mode turned on, handlebars enables a set of development friendly features, that may affect its performance.
Note that you have to enable dev mode before adding templates to the registry. Otherwise it won’t take effect at all.
Sourcepub fn set_prevent_indent(&mut self, enable: bool)
pub fn set_prevent_indent(&mut self, enable: bool)
Enable or disable indent for partial include tag {{>}}
By default handlebars keeps indent whitespaces for partial
include tag, to change this behaviour, set this toggle to true
.
Sourcepub fn prevent_indent(&self) -> bool
pub fn prevent_indent(&self) -> bool
Return state for prevent_indent
option, default to false
.
Sourcepub fn register_template(&mut self, name: &str, tpl: Template)
pub fn register_template(&mut self, name: &str, tpl: Template)
Register a Template
This is infallible since the template has already been parsed and insert cannot fail. If there is an existing template with this name it will be overwritten.
Dev mode doesn’t apply for pre-compiled template because it’s lifecycle is not managed by the registry.
Sourcepub fn register_template_string<S>(
&mut self,
name: &str,
tpl_str: S,
) -> Result<(), TemplateError>
pub fn register_template_string<S>( &mut self, name: &str, tpl_str: S, ) -> Result<(), TemplateError>
Register a template string
Returns TemplateError
if there is syntax error on parsing the template.
Sourcepub fn register_partial<S>(
&mut self,
name: &str,
partial_str: S,
) -> Result<(), TemplateError>
pub fn register_partial<S>( &mut self, name: &str, partial_str: S, ) -> Result<(), TemplateError>
Register a partial string
A named partial will be added to the registry. It will overwrite template with same name. Currently a registered partial is just identical to a template.
Sourcepub fn register_template_file<P>(
&mut self,
name: &str,
tpl_path: P,
) -> Result<(), TemplateError>
pub fn register_template_file<P>( &mut self, name: &str, tpl_path: P, ) -> Result<(), TemplateError>
Register a template from a path on file system
If dev mode is enabled, the registry will keep reading the template file from file system everytime it’s visited.
Sourcepub fn register_templates_directory<P>(
&mut self,
dir_path: P,
options: DirectorySourceOptions,
) -> Result<(), TemplateError>
Available on crate feature dir_source
only.
pub fn register_templates_directory<P>( &mut self, dir_path: P, options: DirectorySourceOptions, ) -> Result<(), TemplateError>
dir_source
only.Register templates from a directory
tpl_extension
: the template file extensiondir_path
: the path of directory
Hidden files and tempfile (starts with #
) will be ignored by default.
Set DirectorySourceOptions
to something other than DirectorySourceOptions::default()
to adjust this.
All registered templates will use their relative path to determine their template name.
For example, when dir_path
is templates/
and DirectorySourceOptions.tpl_extension
is .hbs
, the file
templates/some/path/file.hbs
will be registered as some/path/file
.
This method is not available by default.
You will need to enable the dir_source
feature to use it.
When dev_mode is enabled, like with register_template_file
, templates are reloaded
from the file system every time they’re visited.
Sourcepub fn register_embed_templates<E>(&mut self) -> Result<(), TemplateError>where
E: RustEmbed,
Available on crate feature rust-embed
only.
pub fn register_embed_templates<E>(&mut self) -> Result<(), TemplateError>where
E: RustEmbed,
rust-embed
only.Register templates using a RustEmbed type Calls register_embed_templates_with_extension with empty extension.
File names from embed struct are used as template name.
#[derive(RustEmbed)]
#[folder = "templates"]
#[include = "*.hbs"]
struct Assets;
let mut hbs = Handlebars::new();
hbs.register_embed_templates::<Assets>();
Sourcepub fn register_embed_templates_with_extension<E>(
&mut self,
tpl_extension: &str,
) -> Result<(), TemplateError>where
E: RustEmbed,
Available on crate feature rust-embed
only.
pub fn register_embed_templates_with_extension<E>(
&mut self,
tpl_extension: &str,
) -> Result<(), TemplateError>where
E: RustEmbed,
rust-embed
only.Register templates using a RustEmbed type
tpl_extension
: the template file extension
File names from embed struct are used as template name, but extension is stripped.
When dev_mode enabled templates is reloaded from embed struct everytime it’s visied.
#[derive(RustEmbed)]
#[folder = "templates"]
struct Assets;
let mut hbs = Handlebars::new();
hbs.register_embed_templates_with_extension::<Assets>(".hbs");
Sourcepub fn unregister_template(&mut self, name: &str)
pub fn unregister_template(&mut self, name: &str)
Remove a template from the registry
Sourcepub fn register_helper(
&mut self,
name: &str,
def: Box<dyn HelperDef + Send + Sync + 'reg>,
)
pub fn register_helper( &mut self, name: &str, def: Box<dyn HelperDef + Send + Sync + 'reg>, )
Register a helper
Sourcepub fn register_script_helper(
&mut self,
name: &str,
script: &str,
) -> Result<(), ScriptError>
Available on crate feature script_helper
only.
pub fn register_script_helper( &mut self, name: &str, script: &str, ) -> Result<(), ScriptError>
script_helper
only.Register a rhai script as handlebars helper
Currently only simple helpers are supported. You can do computation or string formatting with rhai script.
Helper parameters and hash are available in rhai script as array params
and map hash
. Example script:
{{percent 0.34 label="%"}}
// percent.rhai
let value = params[0];
let label = hash["label"];
(value * 100).to_string() + label
Sourcepub fn register_script_helper_file<P>(
&mut self,
name: &str,
script_path: P,
) -> Result<(), ScriptError>
Available on crate feature script_helper
only.
pub fn register_script_helper_file<P>( &mut self, name: &str, script_path: P, ) -> Result<(), ScriptError>
script_helper
only.Register a rhai script from file
When dev mode is enable, script file is reloaded from original file everytime it is called.
Sourcepub fn engine(&self) -> &Engine
Available on crate feature script_helper
only.
pub fn engine(&self) -> &Engine
script_helper
only.Borrow a read-only reference to current rhai engine
Sourcepub fn set_engine(&mut self, engine: Engine)
Available on crate feature script_helper
only.
pub fn set_engine(&mut self, engine: Engine)
script_helper
only.Set a custom rhai engine for the registry.
Note that you need to set custom engine before adding scripts.
Sourcepub fn register_decorator(
&mut self,
name: &str,
def: Box<dyn DecoratorDef + Send + Sync + 'reg>,
)
pub fn register_decorator( &mut self, name: &str, def: Box<dyn DecoratorDef + Send + Sync + 'reg>, )
Register a decorator
Sourcepub fn register_escape_fn<F: 'static + Fn(&str) -> String + Send + Sync>(
&mut self,
escape_fn: F,
)
pub fn register_escape_fn<F: 'static + Fn(&str) -> String + Send + Sync>( &mut self, escape_fn: F, )
Register a new escape fn to be used from now on by this registry.
Sourcepub fn unregister_escape_fn(&mut self)
pub fn unregister_escape_fn(&mut self)
Restore the default escape fn.
Sourcepub fn get_escape_fn(&self) -> &dyn Fn(&str) -> String
pub fn get_escape_fn(&self) -> &dyn Fn(&str) -> String
Get a reference to the current escape fn.
Sourcepub fn has_template(&self, name: &str) -> bool
pub fn has_template(&self, name: &str) -> bool
Return true
if a template is registered for the given name
Sourcepub fn get_template(&self, name: &str) -> Option<&Template>
pub fn get_template(&self, name: &str) -> Option<&Template>
Return a registered template,
Sourcepub fn get_templates(&self) -> &HashMap<String, Template>
pub fn get_templates(&self) -> &HashMap<String, Template>
Return all templates registered
Note that in dev mode, the template returned from this method may not reflect its latest state. This method doesn’t try to reload templates from its source.
Sourcepub fn clear_templates(&mut self)
pub fn clear_templates(&mut self)
Unregister all templates
Sourcepub fn render<T>(&self, name: &str, data: &T) -> Result<String, RenderError>where
T: Serialize,
pub fn render<T>(&self, name: &str, data: &T) -> Result<String, RenderError>where
T: Serialize,
Render a registered template with some data into a string
name
is the template name you registered previouslydata
is the data that implementsserde::Serialize
Returns rendered string or a struct with error information
Sourcepub fn render_with_context(
&self,
name: &str,
ctx: &Context,
) -> Result<String, RenderError>
pub fn render_with_context( &self, name: &str, ctx: &Context, ) -> Result<String, RenderError>
Render a registered template with reused context
Sourcepub fn render_to_write<T, W>(
&self,
name: &str,
data: &T,
writer: W,
) -> Result<(), RenderError>
pub fn render_to_write<T, W>( &self, name: &str, data: &T, writer: W, ) -> Result<(), RenderError>
Render a registered template and write data to the std::io::Write
Sourcepub fn render_with_context_to_write<W>(
&self,
name: &str,
ctx: &Context,
writer: W,
) -> Result<(), RenderError>where
W: Write,
pub fn render_with_context_to_write<W>(
&self,
name: &str,
ctx: &Context,
writer: W,
) -> Result<(), RenderError>where
W: Write,
Render a registered template using reusable Context
, and write data to
the std::io::Write
Sourcepub fn render_template<T>(
&self,
template_string: &str,
data: &T,
) -> Result<String, RenderError>where
T: Serialize,
pub fn render_template<T>(
&self,
template_string: &str,
data: &T,
) -> Result<String, RenderError>where
T: Serialize,
Render a template string using current registry without registering it
Sourcepub fn render_template_with_context(
&self,
template_string: &str,
ctx: &Context,
) -> Result<String, RenderError>
pub fn render_template_with_context( &self, template_string: &str, ctx: &Context, ) -> Result<String, RenderError>
Render a template string using reusable context data
Sourcepub fn render_template_with_context_to_write<W>(
&self,
template_string: &str,
ctx: &Context,
writer: W,
) -> Result<(), RenderError>where
W: Write,
pub fn render_template_with_context_to_write<W>(
&self,
template_string: &str,
ctx: &Context,
writer: W,
) -> Result<(), RenderError>where
W: Write,
Render a template string using resuable context, and write data into
std::io::Write
Sourcepub fn render_template_to_write<T, W>(
&self,
template_string: &str,
data: &T,
writer: W,
) -> Result<(), RenderError>
pub fn render_template_to_write<T, W>( &self, template_string: &str, data: &T, writer: W, ) -> Result<(), RenderError>
Render a template string using current registry without registering it
Trait Implementations§
Auto Trait Implementations§
impl<'reg> Freeze for Registry<'reg>
impl<'reg> !RefUnwindSafe for Registry<'reg>
impl<'reg> Send for Registry<'reg>
impl<'reg> Sync for Registry<'reg>
impl<'reg> Unpin for Registry<'reg>
impl<'reg> !UnwindSafe for Registry<'reg>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)