@@ -16,44 +16,35 @@ fn split_tag(input: &str) -> Option<(&str, &str)> {
16
16
// language-range = (1*8ALPHA *("-" 1*8alphanum)) / "*"
17
17
// alphanum = ALPHA / DIGIT
18
18
pub ( crate ) fn parse ( input : & str ) -> crate :: Result < LanguageRange > {
19
- let tags = if input == "*" {
20
- vec ! [ Cow :: from( input. to_string( ) ) ]
21
- } else {
22
- let mut tags = Vec :: new ( ) ;
19
+ let mut tags = Vec :: new ( ) ;
20
+
21
+ let ( tag, mut input) = split_tag ( input) . ok_or_else ( || crate :: format_err!( "WIP error" ) ) ?;
22
+ crate :: ensure!( !tag. is_empty( ) , "Language tag should not be empty" ) ;
23
+ crate :: ensure!(
24
+ tag. bytes( )
25
+ . all( |b| ( b'a' ..=b'z' ) . contains( & b) || ( b'A' ..=b'Z' ) . contains( & b) ) ,
26
+ "Language tag should be alpha"
27
+ ) ;
28
+ tags. push ( Cow :: from ( tag. to_string ( ) ) ) ;
23
29
24
- let ( tag, mut input) = split_tag ( input) . ok_or_else ( || crate :: format_err!( "WIP error" ) ) ?;
30
+ while !input. is_empty ( ) {
31
+ let ( tag, rest) = split_tag ( input) . ok_or_else ( || crate :: format_err!( "WIP error" ) ) ?;
25
32
crate :: ensure!( !tag. is_empty( ) , "Language tag should not be empty" ) ;
26
33
crate :: ensure!(
27
- tag. bytes( )
28
- . all( |b| ( b'a' ..=b'z' ) . contains( & b) || ( b'A' ..=b'Z' ) . contains( & b) ) ,
29
- "Language tag should be alpha"
34
+ tag. bytes( ) . all( |b| ( b'a' ..=b'z' ) . contains( & b)
35
+ || ( b'A' ..=b'Z' ) . contains( & b)
36
+ || ( b'0' ..=b'9' ) . contains( & b) ) ,
37
+ "Language tag should be alpha numeric"
30
38
) ;
31
39
tags. push ( Cow :: from ( tag. to_string ( ) ) ) ;
32
-
33
- while !input. is_empty ( ) {
34
- let ( tag, rest) = split_tag ( input) . ok_or_else ( || crate :: format_err!( "WIP error" ) ) ?;
35
- crate :: ensure!( !tag. is_empty( ) , "Language tag should not be empty" ) ;
36
- crate :: ensure!(
37
- tag. bytes( ) . all( |b| ( b'a' ..=b'z' ) . contains( & b)
38
- || ( b'A' ..=b'Z' ) . contains( & b)
39
- || ( b'0' ..=b'9' ) . contains( & b) ) ,
40
- "Language tag should be alpha numeric"
41
- ) ;
42
- tags. push ( Cow :: from ( tag. to_string ( ) ) ) ;
43
- input = rest;
44
- }
45
-
46
- tags
47
- } ;
40
+ input = rest;
41
+ }
48
42
49
43
Ok ( LanguageRange { tags } )
50
44
}
51
45
52
46
#[ test]
53
47
fn test ( ) {
54
- let range = parse ( "*" ) . unwrap ( ) ;
55
- assert_eq ! ( & range. tags, & [ "*" ] ) ;
56
-
57
48
let range = parse ( "en" ) . unwrap ( ) ;
58
49
assert_eq ! ( & range. tags, & [ "en" ] ) ;
59
50
0 commit comments