gtmpl 0.7.1

The Golang Templating Language for Rust
Documentation
use anyhow::anyhow;
use gtmpl::{Func, FuncError, Value};
use gtmpl_derive::Gtmpl;

fn plus_one(args: &[Value]) -> Result<Value, FuncError> {
    if let Value::Object(ref o) = &args[0] {
        if let Some(Value::Number(ref n)) = o.get("num") {
            if let Some(i) = n.as_i64() {
                return Ok((i + 1).into());
            }
        }
    }
    Err(anyhow!("integer required, got: {:?}", args).into())
}

#[derive(Gtmpl)]
struct AddMe {
    num: u8,
    plus_one: Func,
}

#[test]
fn simple_niladic_method() {
    let add_me = AddMe { num: 42, plus_one };
    let output = gtmpl::template("The answer is: {{ .plus_one }}", add_me);
    assert_eq!(&output.unwrap(), "The answer is: 43");
}