xee_interpreter/
occurrence.rs

1use crate::error;
2
3pub fn one<'a, T>(mut iter: impl Iterator<Item = error::Result<T>> + 'a) -> error::Result<T> {
4    if let Some(one) = iter.next() {
5        if iter.next().is_none() {
6            Ok(one?)
7        } else {
8            Err(error::Error::XPTY0004)
9        }
10    } else {
11        Err(error::Error::XPTY0004)
12    }
13}
14
15pub fn option<'a, T>(
16    mut iter: impl Iterator<Item = error::Result<T>> + 'a,
17) -> error::Result<Option<T>> {
18    if let Some(one) = iter.next() {
19        if iter.next().is_none() {
20            Ok(Some(one?))
21        } else {
22            Err(error::Error::XPTY0004)
23        }
24    } else {
25        Ok(None)
26    }
27}