Skip to content

Commit f831945

Browse files
committed
Create sys::args::Args wrapper in sys_common
1 parent fffe272 commit f831945

File tree

3 files changed

+56
-7
lines changed

3 files changed

+56
-7
lines changed

library/std/src/env.rs

+5-7
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ use crate::ffi::{OsStr, OsString};
1818
use crate::fmt;
1919
use crate::io;
2020
use crate::path::{Path, PathBuf};
21-
use crate::sys;
2221
use crate::sys::os as os_imp;
22+
use crate::sys_common;
2323

2424
/// Returns the current working directory as a [`PathBuf`].
2525
///
@@ -705,7 +705,7 @@ pub struct Args {
705705
/// [`env::args_os()`]: args_os
706706
#[stable(feature = "env", since = "1.0.0")]
707707
pub struct ArgsOs {
708-
inner: sys::args::Args,
708+
inner: sys_common::args::Args,
709709
}
710710

711711
/// Returns the arguments that this program was started with (normally passed
@@ -777,7 +777,7 @@ pub fn args() -> Args {
777777
/// ```
778778
#[stable(feature = "env", since = "1.0.0")]
779779
pub fn args_os() -> ArgsOs {
780-
ArgsOs { inner: sys::args::args() }
780+
ArgsOs { inner: sys_common::args::Args::get() }
781781
}
782782

783783
#[stable(feature = "env_unimpl_send_sync", since = "1.26.0")]
@@ -817,8 +817,7 @@ impl DoubleEndedIterator for Args {
817817
#[stable(feature = "std_debug", since = "1.16.0")]
818818
impl fmt::Debug for Args {
819819
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
820-
let args = &AsRef::<[OsString]>::as_ref(&self.inner.inner);
821-
f.debug_struct("Args").field("inner", args).finish()
820+
f.debug_struct("Args").field("inner", &self.inner.inner).finish()
822821
}
823822
}
824823

@@ -859,8 +858,7 @@ impl DoubleEndedIterator for ArgsOs {
859858
#[stable(feature = "std_debug", since = "1.16.0")]
860859
impl fmt::Debug for ArgsOs {
861860
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
862-
let args = &AsRef::<[OsString]>::as_ref(&self.inner);
863-
f.debug_struct("ArgsOs").field("inner", args).finish()
861+
f.debug_struct("ArgsOs").field("inner", &self.inner).finish()
864862
}
865863
}
866864

library/std/src/sys_common/args.rs

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use crate::convert::AsRef;
2+
use crate::ffi::OsString;
3+
use crate::fmt;
4+
use crate::sys::args as sys;
5+
6+
pub struct Args(sys::Args);
7+
8+
impl !Send for Args {}
9+
impl !Sync for Args {}
10+
11+
impl Args {
12+
pub fn get() -> Args {
13+
Args(sys::args())
14+
}
15+
}
16+
17+
impl fmt::Debug for Args {
18+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19+
let args = &AsRef::<[OsString]>::as_ref(self);
20+
args.fmt(f)
21+
}
22+
}
23+
24+
impl AsRef<[OsString]> for Args {
25+
fn as_ref(&self) -> &[OsString] {
26+
self.0.as_ref()
27+
}
28+
}
29+
30+
impl Iterator for Args {
31+
type Item = OsString;
32+
fn next(&mut self) -> Option<OsString> {
33+
self.0.next()
34+
}
35+
fn size_hint(&self) -> (usize, Option<usize>) {
36+
self.0.size_hint()
37+
}
38+
}
39+
40+
impl ExactSizeIterator for Args {
41+
fn len(&self) -> usize {
42+
self.0.len()
43+
}
44+
}
45+
46+
impl DoubleEndedIterator for Args {
47+
fn next_back(&mut self) -> Option<OsString> {
48+
self.0.next_back()
49+
}
50+
}

library/std/src/sys_common/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#[cfg(test)]
2121
mod tests;
2222

23+
pub mod args;
2324
pub mod backtrace;
2425
pub mod bytestring;
2526
pub mod condvar;

0 commit comments

Comments
 (0)