@@ -4,9 +4,7 @@ use std::{
4
4
ffi:: { OsStr , OsString } ,
5
5
} ;
6
6
7
- // Third Party
8
- use clap_lex:: RawOsStr ;
9
- use clap_lex:: RawOsString ;
7
+ use clap_lex:: OsStrExt as _;
10
8
11
9
// Internal
12
10
use crate :: builder:: { Arg , Command } ;
@@ -93,9 +91,8 @@ impl<'cmd> Parser<'cmd> {
93
91
}
94
92
95
93
debug ! (
96
- "Parser::get_matches_with: Begin parsing '{:?}' ({:?}) " ,
94
+ "Parser::get_matches_with: Begin parsing '{:?}'" ,
97
95
arg_os. to_value_os( ) ,
98
- arg_os. to_value_os( ) . as_raw_bytes( )
99
96
) ;
100
97
101
98
// Has the user already passed '--'? Meaning only positional args follow
@@ -291,7 +288,7 @@ impl<'cmd> Parser<'cmd> {
291
288
} else {
292
289
let trailing_values = false ;
293
290
let arg_values = matcher. pending_values_mut ( id, None , trailing_values) ;
294
- arg_values. push ( arg_os. to_value_os ( ) . to_os_str ( ) . into_owned ( ) ) ;
291
+ arg_values. push ( arg_os. to_value_os ( ) . to_owned ( ) ) ;
295
292
if matcher. needs_more_vals ( arg) {
296
293
ParseResult :: Opt ( arg. get_id ( ) . clone ( ) )
297
294
} else {
@@ -411,7 +408,7 @@ impl<'cmd> Parser<'cmd> {
411
408
Some ( Identifier :: Index ) ,
412
409
trailing_values,
413
410
) ;
414
- arg_values. push ( arg_os. to_value_os ( ) . to_os_str ( ) . into_owned ( ) ) ;
411
+ arg_values. push ( arg_os. to_value_os ( ) . to_owned ( ) ) ;
415
412
}
416
413
417
414
// Only increment the positional counter if it doesn't allow multiples
@@ -548,7 +545,7 @@ impl<'cmd> Parser<'cmd> {
548
545
// Checks if the arg matches a subcommand name, or any of its aliases (if defined)
549
546
fn possible_subcommand (
550
547
& self ,
551
- arg : Result < & str , & RawOsStr > ,
548
+ arg : Result < & str , & OsStr > ,
552
549
valid_arg_found : bool ,
553
550
) -> Option < & str > {
554
551
debug ! ( "Parser::possible_subcommand: arg={:?}" , arg) ;
@@ -723,8 +720,8 @@ impl<'cmd> Parser<'cmd> {
723
720
fn parse_long_arg (
724
721
& mut self ,
725
722
matcher : & mut ArgMatcher ,
726
- long_arg : Result < & str , & RawOsStr > ,
727
- long_value : Option < & RawOsStr > ,
723
+ long_arg : & str ,
724
+ long_value : Option < & OsStr > ,
728
725
parse_state : & ParseState ,
729
726
pos_counter : usize ,
730
727
valid_arg_found : & mut bool ,
@@ -741,14 +738,6 @@ impl<'cmd> Parser<'cmd> {
741
738
}
742
739
743
740
debug ! ( "Parser::parse_long_arg: Does it contain '='..." ) ;
744
- let long_arg = match long_arg {
745
- Ok ( long_arg) => long_arg,
746
- Err ( long_arg) => {
747
- return Ok ( ParseResult :: NoMatchingArg {
748
- arg : long_arg. to_str_lossy ( ) . into_owned ( ) ,
749
- } ) ;
750
- }
751
- } ;
752
741
if long_arg. is_empty ( ) {
753
742
debug_assert ! (
754
743
long_value. is_some( ) ,
@@ -805,7 +794,7 @@ impl<'cmd> Parser<'cmd> {
805
794
used. push ( arg. get_id ( ) . clone ( ) ) ;
806
795
807
796
Ok ( ParseResult :: UnneededAttachedValue {
808
- rest : rest. to_str_lossy ( ) . into_owned ( ) ,
797
+ rest : rest. to_string_lossy ( ) . into_owned ( ) ,
809
798
used,
810
799
arg : arg. to_string ( ) ,
811
800
} )
@@ -902,7 +891,7 @@ impl<'cmd> Parser<'cmd> {
902
891
Ok ( c) => c,
903
892
Err ( rest) => {
904
893
return Ok ( ParseResult :: NoMatchingArg {
905
- arg : format ! ( "-{}" , rest. to_str_lossy ( ) ) ,
894
+ arg : format ! ( "-{}" , rest. to_string_lossy ( ) ) ,
906
895
} ) ;
907
896
}
908
897
} ;
@@ -938,8 +927,8 @@ impl<'cmd> Parser<'cmd> {
938
927
// Cloning the iterator, so we rollback if it isn't there.
939
928
let val = short_arg. clone ( ) . next_value_os ( ) . unwrap_or_default ( ) ;
940
929
debug ! (
941
- "Parser::parse_short_arg:iter:{}: val={:?} (bytes), val={:?} (ascii) , short_arg={:?}" ,
942
- c, val, val . as_raw_bytes ( ) , short_arg
930
+ "Parser::parse_short_arg:iter:{}: val={:?}, short_arg={:?}" ,
931
+ c, val, short_arg
943
932
) ;
944
933
let val = Some ( val) . filter ( |v| !v. is_empty ( ) ) ;
945
934
@@ -950,7 +939,7 @@ impl<'cmd> Parser<'cmd> {
950
939
//
951
940
// e.g. `-xvf`, when require_equals && x.min_vals == 0, we don't
952
941
// consume the `vf`, even if it's provided as value.
953
- let ( val, has_eq) = if let Some ( val) = val. and_then ( |v| v. strip_prefix ( '=' ) ) {
942
+ let ( val, has_eq) = if let Some ( val) = val. and_then ( |v| v. strip_prefix ( "=" ) ) {
954
943
( Some ( val) , true )
955
944
} else {
956
945
( val, false )
@@ -991,7 +980,7 @@ impl<'cmd> Parser<'cmd> {
991
980
fn parse_opt_value (
992
981
& self ,
993
982
ident : Identifier ,
994
- attached_value : Option < & RawOsStr > ,
983
+ attached_value : Option < & OsStr > ,
995
984
arg : & Arg ,
996
985
matcher : & mut ArgMatcher ,
997
986
has_eq : bool ,
@@ -1032,7 +1021,7 @@ impl<'cmd> Parser<'cmd> {
1032
1021
} )
1033
1022
}
1034
1023
} else if let Some ( v) = attached_value {
1035
- let arg_values = vec ! [ v. to_os_str ( ) . into_owned ( ) ] ;
1024
+ let arg_values = vec ! [ v. to_owned ( ) ] ;
1036
1025
let trailing_idx = None ;
1037
1026
let react_result = ok ! ( self . react(
1038
1027
Some ( ident) ,
@@ -1054,13 +1043,8 @@ impl<'cmd> Parser<'cmd> {
1054
1043
}
1055
1044
}
1056
1045
1057
- fn check_terminator ( & self , arg : & Arg , val : & RawOsStr ) -> Option < ParseResult > {
1058
- if Some ( val)
1059
- == arg
1060
- . terminator
1061
- . as_ref ( )
1062
- . map ( |s| RawOsStr :: from_str ( s. as_str ( ) ) )
1063
- {
1046
+ fn check_terminator ( & self , arg : & Arg , val : & OsStr ) -> Option < ParseResult > {
1047
+ if Some ( val) == arg. terminator . as_ref ( ) . map ( |s| OsStr :: new ( s. as_str ( ) ) ) {
1064
1048
debug ! ( "Parser::check_terminator: terminator={:?}" , arg. terminator) ;
1065
1049
Some ( ParseResult :: ValuesDone )
1066
1050
} else {
@@ -1156,17 +1140,17 @@ impl<'cmd> Parser<'cmd> {
1156
1140
if self . cmd . is_dont_delimit_trailing_values_set ( ) && trailing_idx == Some ( 0 ) {
1157
1141
// Nothing to do
1158
1142
} else {
1143
+ let mut val_delim_buffer = [ 0 ; 4 ] ;
1144
+ let val_delim = val_delim. encode_utf8 ( & mut val_delim_buffer) ;
1159
1145
let mut split_raw_vals = Vec :: with_capacity ( raw_vals. len ( ) ) ;
1160
1146
for ( i, raw_val) in raw_vals. into_iter ( ) . enumerate ( ) {
1161
- let raw_val = RawOsString :: new ( raw_val) ;
1162
1147
if !raw_val. contains ( val_delim)
1163
1148
|| ( self . cmd . is_dont_delimit_trailing_values_set ( )
1164
1149
&& trailing_idx == Some ( i) )
1165
1150
{
1166
- split_raw_vals. push ( raw_val. into_os_string ( ) ) ;
1151
+ split_raw_vals. push ( raw_val) ;
1167
1152
} else {
1168
- split_raw_vals
1169
- . extend ( raw_val. split ( val_delim) . map ( |x| x. to_os_str ( ) . into_owned ( ) ) ) ;
1153
+ split_raw_vals. extend ( raw_val. split ( val_delim) . map ( |x| x. to_owned ( ) ) ) ;
1170
1154
}
1171
1155
}
1172
1156
raw_vals = split_raw_vals
0 commit comments