| use crate::ffi::OsString; |
| use crate::num::NonZero; |
| use crate::ops::Try; |
| use crate::{array, fmt, vec}; |
| |
| pub struct Args { |
| iter: vec::IntoIter<OsString>, |
| } |
| |
| impl !Send for Args {} |
| impl !Sync for Args {} |
| |
| impl Args { |
| #[inline] |
| pub(super) fn new(args: Vec<OsString>) -> Self { |
| Args { iter: args.into_iter() } |
| } |
| } |
| |
| impl fmt::Debug for Args { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| self.iter.as_slice().fmt(f) |
| } |
| } |
| |
| impl Iterator for Args { |
| type Item = OsString; |
| |
| #[inline] |
| fn next(&mut self) -> Option<OsString> { |
| self.iter.next() |
| } |
| |
| #[inline] |
| fn next_chunk<const N: usize>( |
| &mut self, |
| ) -> Result<[OsString; N], array::IntoIter<OsString, N>> { |
| self.iter.next_chunk() |
| } |
| |
| #[inline] |
| fn size_hint(&self) -> (usize, Option<usize>) { |
| self.iter.size_hint() |
| } |
| |
| #[inline] |
| fn count(self) -> usize { |
| self.iter.len() |
| } |
| |
| #[inline] |
| fn last(self) -> Option<OsString> { |
| self.iter.last() |
| } |
| |
| #[inline] |
| fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>> { |
| self.iter.advance_by(n) |
| } |
| |
| #[inline] |
| fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R |
| where |
| F: FnMut(B, Self::Item) -> R, |
| R: Try<Output = B>, |
| { |
| self.iter.try_fold(init, f) |
| } |
| |
| #[inline] |
| fn fold<B, F>(self, init: B, f: F) -> B |
| where |
| F: FnMut(B, Self::Item) -> B, |
| { |
| self.iter.fold(init, f) |
| } |
| } |
| |
| impl DoubleEndedIterator for Args { |
| #[inline] |
| fn next_back(&mut self) -> Option<OsString> { |
| self.iter.next_back() |
| } |
| |
| #[inline] |
| fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero<usize>> { |
| self.iter.advance_back_by(n) |
| } |
| } |
| |
| impl ExactSizeIterator for Args { |
| #[inline] |
| fn len(&self) -> usize { |
| self.iter.len() |
| } |
| |
| #[inline] |
| fn is_empty(&self) -> bool { |
| self.iter.is_empty() |
| } |
| } |