@@ -195,6 +195,19 @@ impl PartialEq for ParameterKey<'_> {
195
195
pub struct Parameter < ' a > ( bytes:: Parameter < ' a > ) ;
196
196
197
197
impl < ' a > Parameter < ' a > {
198
+ /// Attempt to parse a single command line parameter from a UTF-8
199
+ /// string.
200
+ ///
201
+ /// Returns `Some(Parameter)`, or `None` if a Parameter could not
202
+ /// be constructed from the input. This occurs when the input is
203
+ /// either empty or contains only whitespace.
204
+ ///
205
+ /// Any remaining characters not consumed from the input are
206
+ /// discarded.
207
+ pub fn parse < T : AsRef < str > + ?Sized > ( input : & ' a T ) -> Option < Self > {
208
+ Self :: parse_one ( input) . 0
209
+ }
210
+
198
211
/// Attempt to parse a single command line parameter from a UTF-8
199
212
/// string.
200
213
///
@@ -205,8 +218,8 @@ impl<'a> Parameter<'a> {
205
218
///
206
219
/// Any remaining characters not consumed from the input are
207
220
/// returned as the second tuple item.
208
- pub fn parse < T : AsRef < str > + ?Sized > ( input : & ' a T ) -> ( Option < Self > , & ' a str ) {
209
- let ( bytes, rest) = bytes:: Parameter :: parse ( input. as_ref ( ) . as_bytes ( ) ) ;
221
+ pub fn parse_one < T : AsRef < str > + ?Sized > ( input : & ' a T ) -> ( Option < Self > , & ' a str ) {
222
+ let ( bytes, rest) = bytes:: Parameter :: parse_one ( input. as_ref ( ) . as_bytes ( ) ) ;
210
223
211
224
// SAFETY: we know this is valid UTF-8 since input is &str,
212
225
// and `rest` is a subslice of that &str which was split on
@@ -288,29 +301,29 @@ mod tests {
288
301
289
302
// convenience method for tests
290
303
fn param ( s : & str ) -> Parameter < ' _ > {
291
- Parameter :: parse ( s) . 0 . unwrap ( )
304
+ Parameter :: parse ( s) . unwrap ( )
292
305
}
293
306
294
307
#[ test]
295
- fn test_parameter_parse ( ) {
296
- let ( p, rest) = Parameter :: parse ( "foo" ) ;
308
+ fn test_parameter_parse_one ( ) {
309
+ let ( p, rest) = Parameter :: parse_one ( "foo" ) ;
297
310
let p = p. unwrap ( ) ;
298
311
assert_eq ! ( p. key( ) , "foo" . into( ) ) ;
299
312
assert_eq ! ( p. value( ) , None ) ;
300
313
assert_eq ! ( rest, "" ) ;
301
314
302
315
// should consume one parameter and return the rest of the input
303
- let ( p, rest) = Parameter :: parse ( "foo=bar baz" ) ;
316
+ let ( p, rest) = Parameter :: parse_one ( "foo=bar baz" ) ;
304
317
let p = p. unwrap ( ) ;
305
318
assert_eq ! ( p. key( ) , "foo" . into( ) ) ;
306
319
assert_eq ! ( p. value( ) , Some ( "bar" ) ) ;
307
320
assert_eq ! ( rest, " baz" ) ;
308
321
309
322
// should return None on empty or whitespace inputs
310
- let ( p, rest) = Parameter :: parse ( "" ) ;
323
+ let ( p, rest) = Parameter :: parse_one ( "" ) ;
311
324
assert ! ( p. is_none( ) ) ;
312
325
assert_eq ! ( rest, "" ) ;
313
- let ( p, rest) = Parameter :: parse ( " " ) ;
326
+ let ( p, rest) = Parameter :: parse_one ( " " ) ;
314
327
assert ! ( p. is_none( ) ) ;
315
328
assert_eq ! ( rest, "" ) ;
316
329
}
@@ -341,7 +354,7 @@ mod tests {
341
354
342
355
#[ test]
343
356
fn test_parameter_internal_key_whitespace ( ) {
344
- let ( p, rest) = Parameter :: parse ( "foo bar=baz" ) ;
357
+ let ( p, rest) = Parameter :: parse_one ( "foo bar=baz" ) ;
345
358
let p = p. unwrap ( ) ;
346
359
assert_eq ! ( p. key( ) , "foo" . into( ) ) ;
347
360
assert_eq ! ( p. value( ) , None ) ;
@@ -393,27 +406,27 @@ mod tests {
393
406
#[ test]
394
407
fn test_parameter_tryfrom ( ) {
395
408
// ok switch
396
- let p = bytes:: Parameter :: parse ( b"foo" ) . 0 . unwrap ( ) ;
409
+ let p = bytes:: Parameter :: parse ( b"foo" ) . unwrap ( ) ;
397
410
let utf = Parameter :: try_from ( p) . unwrap ( ) ;
398
411
assert_eq ! ( utf. key( ) , "foo" . into( ) ) ;
399
412
assert_eq ! ( utf. value( ) , None ) ;
400
413
401
414
// ok key/value
402
- let p = bytes:: Parameter :: parse ( b"foo=bar" ) . 0 . unwrap ( ) ;
415
+ let p = bytes:: Parameter :: parse ( b"foo=bar" ) . unwrap ( ) ;
403
416
let utf = Parameter :: try_from ( p) . unwrap ( ) ;
404
417
assert_eq ! ( utf. key( ) , "foo" . into( ) ) ;
405
418
assert_eq ! ( utf. value( ) , Some ( "bar" . into( ) ) ) ;
406
419
407
420
// bad switch
408
- let p = bytes:: Parameter :: parse ( b"f\xff oo" ) . 0 . unwrap ( ) ;
421
+ let p = bytes:: Parameter :: parse ( b"f\xff oo" ) . unwrap ( ) ;
409
422
let e = Parameter :: try_from ( p) ;
410
423
assert_eq ! (
411
424
e. unwrap_err( ) . to_string( ) ,
412
425
"Parameter key is not valid UTF-8"
413
426
) ;
414
427
415
428
// bad key/value
416
- let p = bytes:: Parameter :: parse ( b"foo=b\xff ar" ) . 0 . unwrap ( ) ;
429
+ let p = bytes:: Parameter :: parse ( b"foo=b\xff ar" ) . unwrap ( ) ;
417
430
let e = Parameter :: try_from ( p) ;
418
431
assert_eq ! (
419
432
e. unwrap_err( ) . to_string( ) ,
0 commit comments