xee-interpreter 0.2.0

Interpreter for XPath and XSLT
Documentation
use crate::error;

pub fn one<'a, T>(mut iter: impl Iterator<Item = error::Result<T>> + 'a) -> error::Result<T> {
    if let Some(one) = iter.next() {
        if iter.next().is_none() {
            Ok(one?)
        } else {
            Err(error::Error::XPTY0004)
        }
    } else {
        Err(error::Error::XPTY0004)
    }
}

pub fn option<'a, T>(
    mut iter: impl Iterator<Item = error::Result<T>> + 'a,
) -> error::Result<Option<T>> {
    if let Some(one) = iter.next() {
        if iter.next().is_none() {
            Ok(Some(one?))
        } else {
            Err(error::Error::XPTY0004)
        }
    } else {
        Ok(None)
    }
}