macro_rules! context {
($($key:ident $(: $value:expr)?),*$(,)?) => { ... };
}
Expand description
A macro to easily create a template rendering context.
Invocations of this macro expand to a value of an anonymous type which
implements [serde::Serialize
]. Fields can be literal expressions or
variables captured from a surrounding scope, as long as all fields implement
Serialize
.
§Examples
The following code:
#[get("/<foo>")]
fn render_index(foo: u64) -> Template {
Template::render("index", context! {
// Note that shorthand field syntax is supported.
// This is equivalent to `foo: foo,`
foo,
bar: "Hello world",
})
}
is equivalent to the following, but without the need to manually define an
IndexContext
struct:
#[derive(Serialize)]
struct IndexContext<'a> {
foo: u64,
bar: &'a str,
}
#[get("/<foo>")]
fn render_index(foo: u64) -> Template {
Template::render("index", IndexContext {
foo,
bar: "Hello world",
})
}
§Nesting
Nested objects can be created by nesting calls to context!
:
let ctx = context! {
planet: "Earth",
info: context! {
mass: 5.97e24,
radius: "6371 km",
moons: 1,
},
};