rscel 1.0.8

Cel interpreter in rust
Documentation
use crate::BindContext;

pub struct IdentFilterIter<'a> {
    bindings: &'a BindContext<'a>,
    iter: &'a mut dyn Iterator<Item = &'a str>,
}

impl<'a> IdentFilterIter<'a> {
    pub fn new(
        bindings: &'a BindContext,
        iterable: &'a mut dyn Iterator<Item = &'a str>,
    ) -> IdentFilterIter<'a> {
        IdentFilterIter {
            bindings,
            iter: iterable,
        }
    }
}

impl<'a> Iterator for IdentFilterIter<'a> {
    type Item = String;

    fn next(&mut self) -> Option<Self::Item> {
        loop {
            match self.iter.next() {
                Some(val) => {
                    if self.bindings.is_bound(val) {
                        continue;
                    }

                    return Some(val.to_owned());
                }
                None => return None,
            }
        }
    }
}