Skip to content

Commit 0b57fc3

Browse files
committed
Remove wildcard from LanguageRange
1 parent 4b0cfd6 commit 0b57fc3

File tree

1 file changed

+18
-27
lines changed

1 file changed

+18
-27
lines changed

src/language/parse.rs

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,44 +16,35 @@ fn split_tag(input: &str) -> Option<(&str, &str)> {
1616
// language-range = (1*8ALPHA *("-" 1*8alphanum)) / "*"
1717
// alphanum = ALPHA / DIGIT
1818
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()));
2329

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"))?;
2532
crate::ensure!(!tag.is_empty(), "Language tag should not be empty");
2633
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"
3038
);
3139
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+
}
4842

4943
Ok(LanguageRange { tags })
5044
}
5145

5246
#[test]
5347
fn test() {
54-
let range = parse("*").unwrap();
55-
assert_eq!(&range.tags, &["*"]);
56-
5748
let range = parse("en").unwrap();
5849
assert_eq!(&range.tags, &["en"]);
5950

0 commit comments

Comments
 (0)