use crate::{Argument, Options};
#[derive(Debug)]
pub struct Positionals<'opts, A: Argument, I: Iterator<Item = A>> {
inner: &'opts mut Options<A, I>,
}
impl<'opts, A: Argument, I: Iterator<Item = A>> Positionals<'opts, A, I> {
pub(crate) fn new(inner: &'opts mut Options<A, I>) -> Self {
Self { inner }
}
}
impl<'opts, A: Argument, I: Iterator<Item = A>> Iterator for Positionals<'opts, A, I> {
type Item = A;
fn next(&mut self) -> Option<Self::Item> {
self.inner.next_positional()
}
}
#[derive(Debug)]
pub struct IntoPositionals<A: Argument, I: Iterator<Item = A>> {
positional: Option<A>,
iter: I,
}
impl<A: Argument, I: Iterator<Item = A>> IntoPositionals<A, I> {
pub(crate) fn new(positional: Option<A>, iter: I) -> Self {
Self { positional, iter }
}
}
impl<A: Argument, I: Iterator<Item = A>> Iterator for IntoPositionals<A, I> {
type Item = A;
fn next(&mut self) -> Option<Self::Item> {
self.positional.take().or_else(|| self.iter.next())
}
}