use crate::ffi::OsString; use crate::num::NonZero; use crate::ops::Try; use crate::{array, fmt, vec}; pub struct Args { iter: vec::IntoIter, } impl !Send for Args {} impl !Sync for Args {} impl Args { #[inline] pub fn new(args: Vec) -> 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 { self.iter.next() } #[inline] fn next_chunk( &mut self, ) -> Result<[OsString; N], array::IntoIter> { self.iter.next_chunk() } #[inline] fn size_hint(&self) -> (usize, Option) { self.iter.size_hint() } #[inline] fn count(self) -> usize { self.iter.len() } #[inline] fn last(self) -> Option { self.iter.last() } #[inline] fn advance_by(&mut self, n: usize) -> Result<(), NonZero> { self.iter.advance_by(n) } #[inline] fn try_fold(&mut self, init: B, f: F) -> R where F: FnMut(B, Self::Item) -> R, R: Try, { self.iter.try_fold(init, f) } #[inline] fn fold(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 { self.iter.next_back() } #[inline] fn advance_back_by(&mut self, n: usize) -> Result<(), NonZero> { 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() } }