Create A StructObject To Get Fields Directly In minijinja

  • Combine with id: 2tasgoyx

Code

[package]
name = "minijinji_object_method_call"
version = "0.1.0"
edition = "2021"

[dependencies]
minijinja = "1.0.7"

Code

use minijinja::value::{StructObject, Value};
use minijinja::{context, Environment};

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_struct_object(alfa);
    println!(
        "{}",
        tmpl.render(context!(alfa_value => alfa_value)).unwrap()
    );
}

pub struct Alfa {}

impl StructObject for Alfa {
    fn get_field(&self, name: &str) -> Option<Value> {
        match name {
            "ping" => Some(Value::from(self.ping())),
            _ => None,
        }
    }
}

impl Alfa {
    fn ping(&self) -> String {
        "One ping only".to_string()
    }
}