55
66use super :: FormatError ;
77use crate :: {
8- error:: { set_exit_code, UError } ,
8+ error:: set_exit_code,
99 features:: format:: num_parser:: { ParseError , ParsedNumber } ,
10+ os_str_as_bytes_verbose, os_str_as_str_verbose,
1011 quoting_style:: { escape_name, Quotes , QuotingStyle } ,
1112 show_error, show_warning,
1213} ;
1314use os_display:: Quotable ;
14- use std:: {
15- error:: Error ,
16- ffi:: { OsStr , OsString } ,
17- fmt:: Display ,
18- } ;
15+ use std:: ffi:: { OsStr , OsString } ;
1916
2017/// An argument for formatting
2118///
@@ -50,7 +47,7 @@ impl<'a, T: Iterator<Item = &'a FormatArgument>> ArgumentIter<'a> for T {
5047 } ;
5148 match next {
5249 FormatArgument :: Char ( c) => Ok ( * c as u8 ) ,
53- FormatArgument :: Unparsed ( os) => match try_get_bytes_from_os_str ( os) ?. first ( ) {
50+ FormatArgument :: Unparsed ( os) => match os_str_as_bytes_verbose ( os) ?. first ( ) {
5451 Some ( & byte) => Ok ( byte) ,
5552 None => Ok ( b'\0' ) ,
5653 } ,
@@ -65,7 +62,7 @@ impl<'a, T: Iterator<Item = &'a FormatArgument>> ArgumentIter<'a> for T {
6562 match next {
6663 FormatArgument :: UnsignedInt ( n) => Ok ( * n) ,
6764 FormatArgument :: Unparsed ( os) => {
68- let str = try_get_str_from_os_str ( os) ?;
65+ let str = os_str_as_str_verbose ( os) ?;
6966
7067 Ok ( extract_value ( ParsedNumber :: parse_u64 ( str) , str) )
7168 }
@@ -80,7 +77,7 @@ impl<'a, T: Iterator<Item = &'a FormatArgument>> ArgumentIter<'a> for T {
8077 match next {
8178 FormatArgument :: SignedInt ( n) => Ok ( * n) ,
8279 FormatArgument :: Unparsed ( os) => {
83- let str = try_get_str_from_os_str ( os) ?;
80+ let str = os_str_as_str_verbose ( os) ?;
8481
8582 Ok ( extract_value ( ParsedNumber :: parse_i64 ( str) , str) )
8683 }
@@ -95,7 +92,7 @@ impl<'a, T: Iterator<Item = &'a FormatArgument>> ArgumentIter<'a> for T {
9592 match next {
9693 FormatArgument :: Float ( n) => Ok ( * n) ,
9794 FormatArgument :: Unparsed ( os) => {
98- let str = try_get_str_from_os_str ( os) ?;
95+ let str = os_str_as_str_verbose ( os) ?;
9996
10097 Ok ( extract_value ( ParsedNumber :: parse_f64 ( str) , str) )
10198 }
@@ -147,56 +144,3 @@ fn extract_value<T: Default>(p: Result<T, ParseError<'_, T>>, input: &str) -> T
147144 }
148145 }
149146}
150-
151- #[ derive( Debug ) ]
152- pub struct NonUtf8OsStr ( pub String ) ;
153-
154- impl Display for NonUtf8OsStr {
155- fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
156- f. write_fmt ( format_args ! (
157- "invalid (non-UTF-8) string like {} encountered" ,
158- self . 0 . quote( ) ,
159- ) )
160- }
161- }
162-
163- impl Error for NonUtf8OsStr { }
164- impl UError for NonUtf8OsStr { }
165-
166- pub fn try_get_str_from_os_str ( os_str : & OsStr ) -> Result < & str , NonUtf8OsStr > {
167- match os_str. to_str ( ) {
168- Some ( st) => Ok ( st) ,
169- None => {
170- let cow = os_str. to_string_lossy ( ) ;
171-
172- Err ( NonUtf8OsStr ( cow. to_string ( ) ) )
173- }
174- }
175- }
176-
177- pub fn try_get_bytes_from_os_str ( input : & OsStr ) -> Result < & [ u8 ] , NonUtf8OsStr > {
178- let result = {
179- #[ cfg( target_family = "unix" ) ]
180- {
181- use std:: os:: unix:: ffi:: OsStrExt ;
182-
183- Ok ( input. as_bytes ( ) )
184- }
185-
186- #[ cfg( not( target_family = "unix" ) ) ]
187- {
188- // TODO
189- // Verify that this works correctly on these platforms
190- match input. to_str ( ) . map ( |st| st. as_bytes ( ) ) {
191- Some ( sl) => Ok ( sl) ,
192- None => {
193- let cow = input. to_string_lossy ( ) ;
194-
195- Err ( NonUtf8OsStr ( cow. to_string ( ) ) )
196- }
197- }
198- }
199- } ;
200-
201- result
202- }
0 commit comments