pub trait ObjectExt:
    Object
    + Send
    + Sync
    + 'static {
    // Provided methods
    fn mapped_enumerator<F>(self: &Arc<Self>, maker: F) -> Enumerator
       where F: for<'a> FnOnce(&'a Self) -> Box<dyn Iterator<Item = Value> + Sync + Send + 'a> + Send + Sync + 'static,
             Self: Sized { ... }
    fn mapped_rev_enumerator<F>(self: &Arc<Self>, maker: F) -> Enumerator
       where F: for<'a> FnOnce(&'a Self) -> Box<dyn DoubleEndedIterator<Item = Value> + Sync + Send + 'a> + Send + Sync + 'static,
             Self: Sized { ... }
    fn try_iter(
        self: &Arc<Self>,
    ) -> Option<Box<dyn Iterator<Item = Value> + Sync + Send>>
       where Self: 'static { ... }
    fn try_iter_pairs(
        self: &Arc<Self>,
    ) -> Option<Box<dyn Iterator<Item = (Value, Value)> + Sync + Send>> { ... }
}Expand description
Provides utility methods for working with objects.
Provided Methods§
Sourcefn mapped_enumerator<F>(self: &Arc<Self>, maker: F) -> Enumerator
 
fn mapped_enumerator<F>(self: &Arc<Self>, maker: F) -> Enumerator
Creates a new iterator enumeration that projects into the given object.
It takes a method that is passed a reference to self and is expected
to return an Iterator.  This iterator is then wrapped in an
Enumerator::Iter.  This allows one to create an iterator that borrows
out of the object.
§Example
use std::sync::Arc;
use minijinja::value::{Value, Object, ObjectExt, Enumerator};
#[derive(Debug)]
struct CustomMap(HashMap<usize, i64>);
impl Object for CustomMap {
    fn get_value(self: &Arc<Self>, key: &Value) -> Option<Value> {
        self.0.get(&key.as_usize()?).copied().map(Value::from)
    }
    fn enumerate(self: &Arc<Self>) -> Enumerator {
        self.mapped_enumerator(|this| {
            Box::new(this.0.keys().copied().map(Value::from))
        })
    }
}Sourcefn mapped_rev_enumerator<F>(self: &Arc<Self>, maker: F) -> Enumerator
 
fn mapped_rev_enumerator<F>(self: &Arc<Self>, maker: F) -> Enumerator
Creates a new reversible iterator enumeration that projects into the given object.
It takes a method that is passed a reference to self and is expected
to return a DoubleEndedIterator.  This iterator is then wrapped in an
Enumerator::RevIter.  This allows one to create an iterator that borrows
out of the object and is reversible.
§Example
use std::sync::Arc;
use std::ops::Range;
use minijinja::value::{Value, Object, ObjectExt, ObjectRepr, Enumerator};
#[derive(Debug)]
struct VecView(Vec<usize>);
impl Object for VecView {
    fn repr(self: &Arc<Self>) -> ObjectRepr {
        ObjectRepr::Iterable
    }
    fn enumerate(self: &Arc<Self>) -> Enumerator {
        self.mapped_enumerator(|this| {
            Box::new(this.0.iter().cloned().map(Value::from))
        })
    }
}Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.