src/main.rs
use minijinja::value::{Object, Value};
use minijinja::{context, Environment, Error};
use std::fmt::Display;
fn main() {
let mut env = Environment::new();
env.add_template("hello", "{{ alfa_value.ping() }}")
.unwrap();
let tmpl = env.get_template("hello").unwrap();
let alfa = Alfa {};
let alfa_value = Value::from_object(alfa);
println!(
"{}",
tmpl.render(context!(alfa_value => alfa_value)).unwrap()
);
}
#[derive(Debug)]
pub struct Alfa {}
impl Object for Alfa {
fn call_method(
&self,
_state: &minijinja::State,
name: &str,
_args: &[Value],
) -> Result<Value, Error> {
match name {
"ping" => Ok(Value::from(self.ping())),
_ => {
Ok(Value::from(""))
}
}
}
}
impl Display for Alfa {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "THIS IS ALFA DISPLAY DEFAULT FORMAT")
}
}
impl Alfa {
fn ping(&self) -> String {
"One ping only".to_string()
}
}