Skip to content

Commit 52e9e56

Browse files
committed
Make the list conversion functions more generic
1 parent 14a9fd0 commit 52e9e56

File tree

4 files changed

+46
-26
lines changed

4 files changed

+46
-26
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ unic-langid = "0.4"
2424
[dev-dependencies]
2525
serde = { version = "1.0", features = ["derive"] }
2626
serde_json = "1.0"
27-
unic-locale = "0.4"
27+
unic-locale = { version = "0.4", features = ["macros"] }
2828
criterion = "0.2"
2929

3030
[[bench]]

src/lib.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,30 @@ pub mod accepted_languages;
1919
pub mod negotiate;
2020

2121
pub use accepted_languages::parse as parse_accepted_languages;
22-
pub use negotiate::convert_vec_str_to_langids_lossy;
2322
pub use negotiate::negotiate_languages;
2423
pub use negotiate::NegotiationStrategy;
24+
25+
pub fn convert_vec_str_to_langids<'a, I, J>(
26+
input: I,
27+
) -> Result<Vec<unic_langid::LanguageIdentifier>, unic_langid::errors::LanguageIdentifierError>
28+
where
29+
I: IntoIterator<Item = J>,
30+
J: AsRef<str> + 'a,
31+
{
32+
let mut result = vec![];
33+
for elem in input.into_iter() {
34+
result.push(elem.as_ref().parse()?);
35+
}
36+
Ok(result)
37+
}
38+
39+
pub fn convert_vec_str_to_langids_lossy<'a, I, J>(input: I) -> Vec<unic_langid::LanguageIdentifier>
40+
where
41+
I: IntoIterator<Item = J>,
42+
J: AsRef<str> + 'a,
43+
{
44+
input
45+
.into_iter()
46+
.filter_map(|t| t.as_ref().parse().ok())
47+
.collect()
48+
}

src/negotiate/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,3 @@ pub fn negotiate_languages<
334334
}
335335
supported
336336
}
337-
338-
pub fn convert_vec_str_to_langids_lossy(input: &[&str]) -> Vec<LanguageIdentifier> {
339-
input.iter().filter_map(|t| t.parse().ok()).collect()
340-
}

tests/lib.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ use std::fs;
33
use std::fs::File;
44
use std::path::Path;
55

6+
use fluent_locale::convert_vec_str_to_langids;
67
use fluent_locale::negotiate_languages;
78
use fluent_locale::parse_accepted_languages;
89
use fluent_locale::NegotiationStrategy;
910
use unic_langid::LanguageIdentifier;
10-
use unic_locale::Locale;
11+
use unic_locale::locale;
1112

1213
use serde::{Deserialize, Serialize};
1314

@@ -52,12 +53,12 @@ fn test_negotiate_fixtures(path: &str) {
5253
};
5354
match test.input {
5455
NegotiateTestInput::NoDefault(requested, available) => {
55-
let requested: Vec<LanguageIdentifier> =
56-
dbg!(requested.iter().map(|v| v.parse().unwrap()).collect());
57-
let available: Vec<LanguageIdentifier> =
58-
dbg!(available.iter().map(|v| v.parse().unwrap()).collect());
59-
let output: Vec<LanguageIdentifier> =
60-
test.output.iter().map(|v| v.parse().unwrap()).collect();
56+
let requested =
57+
convert_vec_str_to_langids(requested).expect("Failed to read langid list");
58+
let available =
59+
convert_vec_str_to_langids(available).expect("Failed to read langid list");
60+
let output =
61+
convert_vec_str_to_langids(test.output).expect("Failed to read langid list");
6162
let output2: Vec<&LanguageIdentifier> = output.iter().map(|t| t.as_ref()).collect();
6263
assert_eq!(
6364
negotiate_languages(&requested, &available, None, strategy),
@@ -67,12 +68,12 @@ fn test_negotiate_fixtures(path: &str) {
6768
);
6869
}
6970
NegotiateTestInput::Default(requested, available, default) => {
70-
let requested: Vec<LanguageIdentifier> =
71-
requested.iter().map(|v| v.parse().unwrap()).collect();
72-
let available: Vec<LanguageIdentifier> =
73-
available.iter().map(|v| v.parse().unwrap()).collect();
74-
let output: Vec<LanguageIdentifier> =
75-
test.output.iter().map(|v| v.parse().unwrap()).collect();
71+
let requested =
72+
convert_vec_str_to_langids(requested).expect("Failed to read langid list");
73+
let available =
74+
convert_vec_str_to_langids(available).expect("Failed to read langid list");
75+
let output =
76+
convert_vec_str_to_langids(test.output).expect("Failed to read langid list");
7677
let output2: Vec<&LanguageIdentifier> = output.iter().map(|t| t.as_ref()).collect();
7778
assert_eq!(
7879
negotiate_languages(
@@ -129,19 +130,18 @@ fn accepted_languages() {
129130

130131
for test in tests {
131132
let locales = parse_accepted_languages(test.input.as_str());
132-
let output: Vec<LanguageIdentifier> =
133-
test.output.iter().map(|v| v.parse().unwrap()).collect();
133+
let output = convert_vec_str_to_langids(test.output).expect("Failed to read langid list");
134134
assert_eq!(output, locales);
135135
}
136136
}
137137

138138
#[test]
139139
fn locale_matching() {
140-
let loc_en_us: Locale = "en-US-u-hc-h12".parse().expect("Parsing failed.");
141-
let loc_de_at: Locale = "de-AT-u-hc-h24".parse().expect("Parsing failed.");
142-
let loc_en: Locale = "en-u-ca-buddhist".parse().expect("Parsing failed.");
143-
let loc_de: Locale = "de".parse().expect("Parsing failed.");
144-
let loc_pl: Locale = "pl-x-private".parse().expect("Parsing failed.");
140+
let loc_en_us = locale!("en-US-u-hc-h12");
141+
let loc_de_at = locale!("de-AT-u-hc-h24");
142+
let loc_en = locale!("en-u-ca-buddhist");
143+
let loc_de = locale!("de");
144+
let loc_pl = locale!("pl-x-private");
145145

146146
assert_eq!(
147147
negotiate_languages(

0 commit comments

Comments
 (0)