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,
    },
};