[−][src]Struct ckb_resource::Template
A simple template which supports spec branches and variables.
The template is designed so that without expanding the template, it is still a valid TOML file.
Spec Branches
A spec branches block replaces a line with a branch matching the given spec name.
The block starts with the line ending with # {{
(the leading space is required) and ends
with a line # }}
.
Between the start and end markers, every line is a branch starting with # SPEC => CONTENT
, where
SPEC
is the branch spec name, and CONTENT
is the text to be replaced for the spec.
A special spec name _
acts as a wildcard which matches any spec name.
The spec name is required to render the template, see Template::new
. The block including
the whole starting line which ends with # {{
will be replaced by the branch CONTENT
which SPEC
is _
or equals to the given spec name.
In the CONTENT
, variables are expanded and all the escape sequences \n
are replaced by new
lines.
use ckb_resource::{Template, TemplateContext}; let template = Template::new( r#"filter = "debug" # {{ # mainnet => filter = "error" # _ => filter = "info" # }}"# .to_string(), ); let mainnet_result = template.render(&TemplateContext::new("mainnet", Vec::new())); assert_eq!("filter = \"error\"\n", mainnet_result.unwrap()); let testnet_result = template.render(&TemplateContext::new("testnet", Vec::new())); assert_eq!("filter = \"info\"\n", testnet_result.unwrap());
Template Variables
Template variables are defined as key value dictionary in TemplateContext
via
TemplateContext::new
or TemplateContext::insert
.
Template uses variables by surrounding the variable names with curly brackets.
The variables expansions only happen inside the spec branches in the spec CONTENT
.
It is a trick to use a wildcard branch as in the following example.
use ckb_resource::{Template, TemplateContext}; let template = Template::new( r#"# # {{ # _ => listen_address = "127.0.0.1:{rpc_port}" # }}"# .to_string(), ); let text = template.render(&TemplateContext::new("dev", vec![("rpc_port", "18114")])); assert_eq!("listen_address = \"127.0.0.1:18114\"\n", text.unwrap());
Implementations
impl Template
[src]
impl Template
[src]
pub fn render_to<'c, W: Write>(
&self,
w: &mut W,
context: &TemplateContext<'c>
) -> Result<()>
[src]
&self,
w: &mut W,
context: &TemplateContext<'c>
) -> Result<()>
Expands the template using the context and writes the result via the writer w
.
Errors
This method returns std::io::Error
when it fails to write the chunks to the underlying
writer.
pub fn render<'c>(&self, context: &TemplateContext<'c>) -> Result<String>
[src]
Renders the template and returns the result as a string.
Errors
This method returns std::io::Error
when it fails to write the chunks to the underlying
writer or it failed to convert the result text to UTF-8.
Auto Trait Implementations
impl RefUnwindSafe for Template
impl Send for Template
impl Sync for Template
impl Unpin for Template
impl UnwindSafe for Template
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,