Skip to content

Commit ae8a2cf

Browse files
committed
Switch to new unic-locale
1 parent ef2d093 commit ae8a2cf

File tree

9 files changed

+55
-65
lines changed

9 files changed

+55
-65
lines changed

Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ coveralls = { repository = "projectfluent/fluent-locale-rs", branch = "master",
1919
maintenance = { status = "actively-developed" }
2020

2121
[dependencies]
22-
unic-langid = "^0.3.0"
22+
unic-langid = { git = "https://github.com/zbraniecki/unic-locale", branch = "master" }
2323

2424
[dev-dependencies]
25-
serde = "^1.0"
26-
serde_json = "^1.0"
27-
serde_derive = "^1.0"
28-
unic-locale = "^0.3.0"
25+
serde = "1.0"
26+
serde_json = "1.0"
27+
serde_derive = "1.0"
28+
unic-locale = { git = "https://github.com/zbraniecki/unic-locale", branch = "master" }

README.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,16 @@ Usage
1818
-----
1919

2020
```rust
21-
use std::convert::TryFrom
22-
2321
use fluent_locale::negotiate_languages;
2422
use fluent_locale::NegotiationStrategy;
25-
use fluent_locale::convert_vec_str_to_langids;
23+
use fluent_locale::convert_vec_str_to_langids_lossy;
2624
use unic_langid::LanguageIdentifier
2725

2826
// Since langid parsing from string is fallible, we'll use a helper
2927
// function which strips any langids that failed to parse.
30-
let requested = convert_vec_str_to_langids(&["de-DE", "fr-FR", "en-US"]);
31-
let available = convert_vec_str_to_langids(&["it", "fr", "de-AT", "fr-CA", "en-US"]);
32-
let default = LanguageIdentifier::try_from("en-US").expect("Parsing langid failed.");
28+
let requested = convert_vec_str_to_langids_lossy(&["de-DE", "fr-FR", "en-US"]);
29+
let available = convert_vec_str_to_langids_lossy(&["it", "fr", "de-AT", "fr-CA", "en-US"]);
30+
let default: LanguageIdentifier = "en-US".parse().expect("Parsing langid failed.");
3331

3432
let supported = negotiate_languages(
3533
&requested,
@@ -38,7 +36,7 @@ let supported = negotiate_languages(
3836
NegotiationStrategy::Filtering
3937
);
4038

41-
let expected = convert_vec_str_to_langids(&["de-AT", "fr", "fr-CA", "en-US"]);
39+
let expected = convert_vec_str_to_langids_lossy(&["de-AT", "fr", "fr-CA", "en-US"]);
4240
assert_eq!(supported,
4341
expected.iter().map(|t| t.as_ref()).collect::<Vec<&LanguageIdentifier>>());
4442
```

benches/lib.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
extern crate test;
44

5-
use fluent_locale::convert_vec_str_to_langids;
5+
use fluent_locale::convert_vec_str_to_langids_lossy;
66
use fluent_locale::negotiate_languages;
7-
use std::convert::TryFrom;
87
use test::Bencher;
98
use unic_langid::LanguageIdentifier;
109

@@ -17,7 +16,7 @@ fn bench_locale(b: &mut Bencher) {
1716

1817
b.iter(|| {
1918
for locale in &langids {
20-
let _ = LanguageIdentifier::try_from(*locale).unwrap();
19+
let _: LanguageIdentifier = locale.parse().unwrap();
2120
}
2221
});
2322
}
@@ -30,8 +29,8 @@ fn bench_negotiate(b: &mut Bencher) {
3029
"ja-JP", "he-IL", "de-DE", "de-IT",
3130
];
3231

33-
let requested = convert_vec_str_to_langids(&requested);
34-
let available = convert_vec_str_to_langids(&available);
32+
let requested = convert_vec_str_to_langids_lossy(&requested);
33+
let available = convert_vec_str_to_langids_lossy(&available);
3534

3635
b.iter(|| {
3736
negotiate_languages(

examples/negotiate.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use fluent_locale::negotiate::NegotiationStrategy;
2-
use fluent_locale::{convert_vec_str_to_langids, negotiate_languages};
2+
use fluent_locale::{convert_vec_str_to_langids_lossy, negotiate_languages};
33

44
fn main() {
5-
let requested = convert_vec_str_to_langids(&["it", "pl", "ru"]);
6-
let available = convert_vec_str_to_langids(&["fr", "en-GB", "en-US", "ru", "pl"]);
5+
let requested = convert_vec_str_to_langids_lossy(&["it", "pl", "ru"]);
6+
let available = convert_vec_str_to_langids_lossy(&["fr", "en-GB", "en-US", "ru", "pl"]);
77
let supported =
88
negotiate_languages(&requested, &available, None, NegotiationStrategy::Filtering);
99

src/accepted_languages.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,15 @@
44
//! # Example:
55
//!
66
//! ```
7-
//! use std::convert::TryFrom;
8-
//!
97
//! use fluent_locale::negotiate_languages;
108
//! use fluent_locale::NegotiationStrategy;
119
//! use fluent_locale::parse_accepted_languages;
12-
//! use fluent_locale::convert_vec_str_to_langids;
10+
//! use fluent_locale::convert_vec_str_to_langids_lossy;
1311
//! use unic_langid::LanguageIdentifier;
1412
//!
1513
//! let requested = parse_accepted_languages("de-AT;0.9,de-DE;0.8,de;0.7;en-US;0.5");
16-
//! let available = convert_vec_str_to_langids(&["fr", "pl", "de", "en-US"]);
17-
//! let default = LanguageIdentifier::try_from("en-US").expect("Failed to parse a langid.");
14+
//! let available = convert_vec_str_to_langids_lossy(&["fr", "pl", "de", "en-US"]);
15+
//! let default: LanguageIdentifier = "en-US".parse().expect("Failed to parse a langid.");
1816
//!
1917
//! let supported = negotiate_languages(
2018
//! &requested,
@@ -23,7 +21,7 @@
2321
//! NegotiationStrategy::Filtering
2422
//! );
2523
//!
26-
//! let expected = convert_vec_str_to_langids(&["de", "en-US"]);
24+
//! let expected = convert_vec_str_to_langids_lossy(&["de", "en-US"]);
2725
//! assert_eq!(supported,
2826
//! expected.iter().map(|t| t.as_ref()).collect::<Vec<&LanguageIdentifier>>());
2927
//! ```
@@ -32,13 +30,12 @@
3230
//! language negotiation only uses the order of locales, not the weights.
3331
//!
3432
35-
use std::convert::TryFrom;
3633
use unic_langid::LanguageIdentifier;
3734

3835
pub fn parse(s: &str) -> Vec<LanguageIdentifier> {
3936
s.split(',')
4037
.map(|t| t.trim().split(';').nth(0).unwrap())
4138
.filter(|t| !t.is_empty())
42-
.filter_map(|t| LanguageIdentifier::try_from(t).ok())
39+
.filter_map(|t| t.parse().ok())
4340
.collect()
4441
}

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ 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;
22+
pub use negotiate::convert_vec_str_to_langids_lossy;
2323
pub use negotiate::negotiate_languages;
2424
pub use negotiate::NegotiationStrategy;

src/negotiate/likely_subtags.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use std::convert::TryFrom;
21
use unic_langid::LanguageIdentifier;
32

43
static REGION_MATCHING_KEYS: &[&str] = &[
@@ -7,13 +6,13 @@ static REGION_MATCHING_KEYS: &[&str] = &[
76

87
pub fn add(langid: &LanguageIdentifier) -> Option<LanguageIdentifier> {
98
let extended = match langid.to_string().as_str() {
10-
"en" => LanguageIdentifier::try_from("en-Latn-US"),
11-
"fr" => LanguageIdentifier::try_from("fr-Latn-FR"),
12-
"sr" => LanguageIdentifier::try_from("sr-Cyrl-SR"),
13-
"sr-RU" => LanguageIdentifier::try_from("sr-Latn-SR"),
14-
"az-IR" => LanguageIdentifier::try_from("az-Aram-IR"),
15-
"zh-GB" => LanguageIdentifier::try_from("zh-Hant-GB"),
16-
"zh-US" => LanguageIdentifier::try_from("zh-Hant-US"),
9+
"en" => "en-Latn-US",
10+
"fr" => "fr-Latn-FR",
11+
"sr" => "sr-Cyrl-SR",
12+
"sr-RU" => "sr-Latn-SR",
13+
"az-IR" => "az-Aram-IR",
14+
"zh-GB" => "zh-Hant-GB",
15+
"zh-US" => "zh-Hant-US",
1716
_ => {
1817
let lang = langid.get_language();
1918

@@ -27,6 +26,7 @@ pub fn add(langid: &LanguageIdentifier) -> Option<LanguageIdentifier> {
2726
return None;
2827
}
2928
};
29+
let langid: LanguageIdentifier = extended.parse().expect("Failed to parse langid.");
3030

31-
Some(extended.expect("Failed to parse langid.").to_owned())
31+
Some(langid)
3232
}

src/negotiate/mod.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,14 @@
1111
//! # Example:
1212
//!
1313
//! ```
14-
//! use std::convert::TryFrom;
15-
//!
1614
//! use fluent_locale::negotiate_languages;
1715
//! use fluent_locale::NegotiationStrategy;
18-
//! use fluent_locale::convert_vec_str_to_langids;
16+
//! use fluent_locale::convert_vec_str_to_langids_lossy;
1917
//! use unic_langid::LanguageIdentifier;
2018
//!
21-
//! let requested = convert_vec_str_to_langids(&["pl", "fr", "en-US"]);
22-
//! let available = convert_vec_str_to_langids(&["it", "de", "fr", "en-GB", "en_US"]);
23-
//! let default = LanguageIdentifier::try_from("en-US").expect("Parsing langid failed.");
19+
//! let requested = convert_vec_str_to_langids_lossy(&["pl", "fr", "en-US"]);
20+
//! let available = convert_vec_str_to_langids_lossy(&["it", "de", "fr", "en-GB", "en_US"]);
21+
//! let default: LanguageIdentifier = "en-US".parse().expect("Parsing langid failed.");
2422
//!
2523
//! let supported = negotiate_languages(
2624
//! &requested,
@@ -29,7 +27,7 @@
2927
//! NegotiationStrategy::Filtering
3028
//! );
3129
//!
32-
//! let expected = convert_vec_str_to_langids(&["fr", "en-US", "en-GB"]);
30+
//! let expected = convert_vec_str_to_langids_lossy(&["fr", "en-US", "en-GB"]);
3331
//! assert_eq!(supported,
3432
//! expected.iter().map(|t| t.as_ref()).collect::<Vec<&LanguageIdentifier>>());
3533
//! ```
@@ -122,7 +120,6 @@
122120
//!
123121
124122
use std::collections::HashMap;
125-
use std::convert::TryInto;
126123
use unic_langid::LanguageIdentifier;
127124

128125
mod likely_subtags;
@@ -136,8 +133,8 @@ pub enum NegotiationStrategy {
136133

137134
pub fn filter_matches<
138135
'a,
139-
R: 'a + Into<LanguageIdentifier> + PartialEq + Clone,
140-
A: 'a + Into<LanguageIdentifier> + PartialEq + Clone,
136+
R: 'a + Into<LanguageIdentifier> + Clone,
137+
A: 'a + Into<LanguageIdentifier> + Clone,
141138
>(
142139
requested: impl IntoIterator<Item = &'a R>,
143140
available: impl IntoIterator<Item = &'a A>,
@@ -316,7 +313,7 @@ pub fn filter_matches<
316313

317314
pub fn negotiate_languages<
318315
'a,
319-
R: 'a + Into<LanguageIdentifier> + PartialEq + Clone,
316+
R: 'a + Into<LanguageIdentifier> + Clone,
320317
A: 'a + Into<LanguageIdentifier> + PartialEq + Clone,
321318
>(
322319
requested: impl IntoIterator<Item = &'a R>,
@@ -338,6 +335,6 @@ pub fn negotiate_languages<
338335
supported
339336
}
340337

341-
pub fn convert_vec_str_to_langids(input: &[&str]) -> Vec<LanguageIdentifier> {
342-
input.iter().filter_map(|t| (*t).try_into().ok()).collect()
338+
pub fn convert_vec_str_to_langids_lossy(input: &[&str]) -> Vec<LanguageIdentifier> {
339+
input.iter().filter_map(|t| t.parse().ok()).collect()
343340
}

tests/lib.rs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use std::convert::{TryFrom, TryInto};
21
use std::error::Error;
32
use std::fs;
43
use std::fs::File;
@@ -55,11 +54,11 @@ fn test_negotiate_fixtures(path: &str) {
5554
match test.input {
5655
NegotiateTestInput::NoDefault(requested, available) => {
5756
let requested: Vec<LanguageIdentifier> =
58-
dbg!(requested.iter().map(|v| v.try_into().unwrap()).collect());
57+
dbg!(requested.iter().map(|v| v.parse().unwrap()).collect());
5958
let available: Vec<LanguageIdentifier> =
60-
dbg!(available.iter().map(|v| v.try_into().unwrap()).collect());
59+
dbg!(available.iter().map(|v| v.parse().unwrap()).collect());
6160
let output: Vec<LanguageIdentifier> =
62-
test.output.iter().map(|v| v.try_into().unwrap()).collect();
61+
test.output.iter().map(|v| v.parse().unwrap()).collect();
6362
let output2: Vec<&LanguageIdentifier> = output.iter().map(|t| t.as_ref()).collect();
6463
assert_eq!(
6564
negotiate_languages(&requested, &available, None, strategy),
@@ -70,17 +69,17 @@ fn test_negotiate_fixtures(path: &str) {
7069
}
7170
NegotiateTestInput::Default(requested, available, default) => {
7271
let requested: Vec<LanguageIdentifier> =
73-
requested.iter().map(|v| v.try_into().unwrap()).collect();
72+
requested.iter().map(|v| v.parse().unwrap()).collect();
7473
let available: Vec<LanguageIdentifier> =
75-
available.iter().map(|v| v.try_into().unwrap()).collect();
74+
available.iter().map(|v| v.parse().unwrap()).collect();
7675
let output: Vec<LanguageIdentifier> =
77-
test.output.iter().map(|v| v.try_into().unwrap()).collect();
76+
test.output.iter().map(|v| v.parse().unwrap()).collect();
7877
let output2: Vec<&LanguageIdentifier> = output.iter().map(|t| t.as_ref()).collect();
7978
assert_eq!(
8079
negotiate_languages(
8180
&requested,
8281
&available,
83-
default.try_into().ok().as_ref(),
82+
default.parse().ok().as_ref(),
8483
strategy
8584
),
8685
output2,
@@ -132,18 +131,18 @@ fn accepted_languages() {
132131
for test in tests {
133132
let locales = parse_accepted_languages(test.input.as_str());
134133
let output: Vec<LanguageIdentifier> =
135-
test.output.iter().map(|v| v.try_into().unwrap()).collect();
134+
test.output.iter().map(|v| v.parse().unwrap()).collect();
136135
assert_eq!(output, locales);
137136
}
138137
}
139138

140139
#[test]
141140
fn locale_matching() {
142-
let loc_en_us = Locale::try_from("en-US-u-hc-h12").expect("Parsing failed.");
143-
let loc_de_at = Locale::try_from("de-AT-u-hc-h24").expect("Parsing failed.");
144-
let loc_en = Locale::try_from("en-u-ca-buddhist").expect("Parsing failed.");
145-
let loc_de = Locale::try_from("de").expect("Parsing failed.");
146-
let loc_pl = Locale::try_from("pl-x-private").expect("Parsing failed.");
141+
let loc_en_us: Locale = "en-US-u-hc-h12".parse().expect("Parsing failed.");
142+
let loc_de_at: Locale = "de-AT-u-hc-h24".parse().expect("Parsing failed.");
143+
let loc_en: Locale = "en-u-ca-buddhist".parse().expect("Parsing failed.");
144+
let loc_de: Locale = "de".parse().expect("Parsing failed.");
145+
let loc_pl: Locale = "pl-x-private".parse().expect("Parsing failed.");
147146

148147
assert_eq!(
149148
negotiate_languages(

0 commit comments

Comments
 (0)