Macro rocket_dyn_templates::minijinja::context
source ยท macro_rules! context { () => { ... }; ( $($key:ident $(=> $value:expr)?),* $(, .. $ctx:expr),* $(,)? ) => { ... }; ( $(.. $ctx:expr),* $(,)? ) => { ... }; }
Expand description
Creates a template context from keys and values or merging in another value.
let ctx = context!{
name => "Peter",
location => "World",
};
Alternatively if the variable name matches the key name it can be omitted:
let name = "Peter";
let ctx = context!{ name };
The return value is a Value
.
Note that context!
can also be used recursively if you need to
create nested objects:
let ctx = context! {
nav => vec![
context!(path => "/", title => "Index"),
context!(path => "/downloads", title => "Downloads"),
context!(path => "/faq", title => "FAQ"),
]
};
Additionally the macro supports a second syntax that can merge other
contexts or values. In that case one or more values need to be
passed with a leading ..
operator. This is useful to supply extra
values into render in a common place. The order of precedence is
left to right:
let ctx = context! { a => "A" };
let ctx = context! { ..ctx, ..context! {
b => "B"
}};
// or
let ctx = context! {
a => "A",
..context! {
b => "B"
}
};
The merge works with an value, not just values created by the context!
macro and is performed lazy. This means it also works with dynamic
Object
s.