home ~ projects ~ socials

Get The Value Of A Struct Object's Key In MiniJinja

```cargo
[dependencies]
minijinja = "2.6.0"
```

use minijinja::value::{Object, Value};
use minijinja::{context, Environment};
use std::sync::Arc;

#[derive(Clone, Debug)]
struct Widget {
  item: String
}

impl Widget {
  pub fn new() -> Widget {
    Widget { item: "alfa echo".to_string() }
  }
}

impl Object for Widget {
  fn get_value(self: &Arc<Self>, key: &Value) -> Option<Value> {
    match key.as_str()? {
      "item" => Some(Value::from(&self.item)),
      _ => Some(Value::from(format!(
              "ISSUE: No field for page.{}",
              key.to_string()
            )
          )
        ),
    }
  }
}

fn main() {
  let raw_widget = Widget::new();
  let widget = Value::from_object(raw_widget);
  let mut env = Environment::new();
  env.add_template("main", "{{ widget.item }}").unwrap();
  let tmpl = env.get_template("main").unwrap();
  let output = tmpl
        .render(context!(widget => widget))
        .unwrap();
  println!("{}", output);
}
Output:
alfa echo
-- end of line --