1use crate::{Argument, Options};
2
3#[derive(Debug)]
7pub struct Positionals<'opts, A: Argument, I: Iterator<Item = A>> {
8 inner: &'opts mut Options<A, I>,
9}
10
11impl<'opts, A: Argument, I: Iterator<Item = A>> Positionals<'opts, A, I> {
12 pub(crate) fn new(inner: &'opts mut Options<A, I>) -> Self {
13 Self { inner }
14 }
15}
16
17impl<'opts, A: Argument, I: Iterator<Item = A>> Iterator for Positionals<'opts, A, I> {
18 type Item = A;
19
20 fn next(&mut self) -> Option<Self::Item> {
21 self.inner.next_positional()
22 }
23}
24
25#[derive(Debug)]
31pub struct IntoPositionals<A: Argument, I: Iterator<Item = A>> {
32 positional: Option<A>,
33 iter: I,
34}
35
36impl<A: Argument, I: Iterator<Item = A>> IntoPositionals<A, I> {
37 pub(crate) fn new(positional: Option<A>, iter: I) -> Self {
38 Self { positional, iter }
39 }
40}
41
42impl<A: Argument, I: Iterator<Item = A>> Iterator for IntoPositionals<A, I> {
43 type Item = A;
44
45 fn next(&mut self) -> Option<Self::Item> {
46 self.positional.take().or_else(|| self.iter.next())
47 }
48}