| use crate::ffi::OsString; |
| use crate::{fmt, vec}; |
| |
| pub struct Env { |
| iter: vec::IntoIter<(OsString, OsString)>, |
| } |
| |
| // FIXME(https://github.com/rust-lang/rust/issues/114583): Remove this when <OsStr as Debug>::fmt matches <str as Debug>::fmt. |
| pub struct EnvStrDebug<'a> { |
| slice: &'a [(OsString, OsString)], |
| } |
| |
| impl fmt::Debug for EnvStrDebug<'_> { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| f.debug_list() |
| .entries(self.slice.iter().map(|(a, b)| (a.to_str().unwrap(), b.to_str().unwrap()))) |
| .finish() |
| } |
| } |
| |
| impl Env { |
| pub(super) fn new(env: Vec<(OsString, OsString)>) -> Self { |
| Env { iter: env.into_iter() } |
| } |
| |
| pub fn str_debug(&self) -> impl fmt::Debug + '_ { |
| EnvStrDebug { slice: self.iter.as_slice() } |
| } |
| } |
| |
| impl fmt::Debug for Env { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| f.debug_list().entries(self.iter.as_slice()).finish() |
| } |
| } |
| |
| impl !Send for Env {} |
| impl !Sync for Env {} |
| |
| impl Iterator for Env { |
| type Item = (OsString, OsString); |
| fn next(&mut self) -> Option<(OsString, OsString)> { |
| self.iter.next() |
| } |
| fn size_hint(&self) -> (usize, Option<usize>) { |
| self.iter.size_hint() |
| } |
| } |