minijinja/vm/
module_object.rs

1use std::fmt;
2use std::sync::Arc;
3
4use crate::value::{Enumerator, Object, Value, ValueMap};
5
6/// Holds the locals of a module.
7#[derive(Debug, Default)]
8pub(crate) struct Module {
9    values: ValueMap,
10    captured: Value,
11}
12
13impl Module {
14    pub fn new(values: ValueMap, captured: Value) -> Self {
15        Self { values, captured }
16    }
17}
18
19impl Object for Module {
20    fn get_value(self: &Arc<Self>, key: &Value) -> Option<Value> {
21        self.values.get(key).cloned()
22    }
23
24    fn enumerate(self: &Arc<Self>) -> Enumerator {
25        let keys = self.values.keys().cloned();
26        Enumerator::Values(keys.collect())
27    }
28
29    fn render(self: &Arc<Self>, f: &mut fmt::Formatter<'_>) -> fmt::Result {
30        write!(f, "{}", self.captured)
31    }
32}