@@ -22,13 +22,21 @@ static REGION_MATCHING_KEYS: &[(Language, Region)] = &[
2222 ( language ! ( "ru" ) , region ! ( "RU" ) ) ,
2323] ;
2424
25- pub trait MockLikelySubtags {
26- fn maximize ( & mut self ) -> bool ;
25+ #[ derive( PartialEq , Eq , Debug ) ]
26+ pub enum TransformResult {
27+ Modified ,
28+ Unmodified ,
2729}
2830
29- impl MockLikelySubtags for LanguageIdentifier {
30- fn maximize ( & mut self ) -> bool {
31- let extended = match & self {
31+ pub struct LocaleExpander ;
32+
33+ impl LocaleExpander {
34+ pub fn new ( ) -> Self {
35+ Self
36+ }
37+
38+ pub fn maximize ( & self , input : & mut LanguageIdentifier ) -> TransformResult {
39+ let extended = match & input {
3240 b if * b == & langid ! ( "en" ) => langid ! ( "en-Latn-US" ) ,
3341 b if * b == & langid ! ( "fr" ) => langid ! ( "fr-Latn-FR" ) ,
3442 b if * b == & langid ! ( "sr" ) => langid ! ( "sr-Cyrl-SR" ) ,
@@ -37,20 +45,20 @@ impl MockLikelySubtags for LanguageIdentifier {
3745 b if * b == & langid ! ( "zh-GB" ) => langid ! ( "zh-Hant-GB" ) ,
3846 b if * b == & langid ! ( "zh-US" ) => langid ! ( "zh-Hant-US" ) ,
3947 _ => {
40- let lang = & self . language ;
48+ let lang = & input . language ;
4149
4250 if let Ok ( idx) = REGION_MATCHING_KEYS . binary_search_by ( |( l, _) | l. cmp ( lang) ) {
4351 let subtag = REGION_MATCHING_KEYS [ idx] . 1 ;
44- self . region = Some ( subtag) ;
45- return true ;
52+ input . region = Some ( subtag) ;
53+ return TransformResult :: Modified ;
4654 }
47- return false ;
55+ return TransformResult :: Unmodified ;
4856 }
4957 } ;
5058 let ( language, script, region) = ( extended. language , extended. script , extended. region ) ;
51- self . language = language;
52- self . script = script;
53- self . region = region;
54- true
59+ input . language = language;
60+ input . script = script;
61+ input . region = region;
62+ TransformResult :: Modified
5563 }
5664}
0 commit comments