@@ -10,6 +10,7 @@ use alloc::string::{String, ToString};
10
10
use alloc:: vec:: Vec ;
11
11
use core:: cell:: RefCell ;
12
12
use icu_casemap:: provider:: CaseMapV1 ;
13
+ use icu_locale:: provider:: { LocaleLikelySubtagsLanguageV1 , LocaleParentsV1 } ;
13
14
use icu_locale_core:: Locale ;
14
15
use icu_normalizer:: provider:: * ;
15
16
use icu_properties:: {
@@ -156,25 +157,28 @@ impl RuleCollection {
156
157
icu_properties:: provider:: Baked ,
157
158
icu_normalizer:: provider:: Baked ,
158
159
icu_casemap:: provider:: Baked ,
160
+ icu_locale:: provider:: Baked ,
159
161
> {
160
162
RuleCollectionProvider {
161
163
collection : self ,
162
164
properties_provider : & icu_properties:: provider:: Baked ,
163
165
normalizer_provider : & icu_normalizer:: provider:: Baked ,
164
166
casemap_provider : & icu_casemap:: provider:: Baked ,
167
+ locale_provider : & icu_locale:: provider:: Baked ,
165
168
xid_start : CodePointSetData :: new :: < XidStart > ( ) . static_to_owned ( ) ,
166
169
xid_continue : CodePointSetData :: new :: < XidContinue > ( ) . static_to_owned ( ) ,
167
170
pat_ws : CodePointSetData :: new :: < PatternWhiteSpace > ( ) . static_to_owned ( ) ,
168
171
}
169
172
}
170
173
171
174
#[ doc = icu_provider:: gen_buffer_unstable_docs!( UNSTABLE , Self :: as_provider) ]
172
- pub fn as_provider_unstable < ' a , PP , NP , NC > (
175
+ pub fn as_provider_unstable < ' a , PP , NP , NC , LP > (
173
176
& ' a self ,
174
177
properties_provider : & ' a PP ,
175
178
normalizer_provider : & ' a NP ,
176
179
casemap_provider : & ' a NC ,
177
- ) -> Result < RuleCollectionProvider < ' a , PP , NP , NC > , DataError >
180
+ locale_provider : & ' a LP ,
181
+ ) -> Result < RuleCollectionProvider < ' a , PP , NP , NC , LP > , DataError >
178
182
where
179
183
PP : ?Sized
180
184
+ DataProvider < PropertyBinaryAlphabeticV1 >
@@ -255,6 +259,7 @@ impl RuleCollection {
255
259
properties_provider,
256
260
normalizer_provider,
257
261
casemap_provider,
262
+ locale_provider,
258
263
xid_start : CodePointSetData :: try_new_unstable :: < XidStart > ( properties_provider) ?,
259
264
xid_continue : CodePointSetData :: try_new_unstable :: < XidContinue > ( properties_provider) ?,
260
265
pat_ws : CodePointSetData :: try_new_unstable :: < PatternWhiteSpace > ( properties_provider) ?,
@@ -264,17 +269,19 @@ impl RuleCollection {
264
269
265
270
/// A provider that is usable by [`Transliterator::try_new_unstable`](crate::transliterate::Transliterator::try_new_unstable).
266
271
#[ derive( Debug ) ]
267
- pub struct RuleCollectionProvider < ' a , PP : ?Sized , NP : ?Sized , NC : ?Sized > {
272
+ pub struct RuleCollectionProvider < ' a , PP : ?Sized , NP : ?Sized , NC : ?Sized , LP : ? Sized > {
268
273
collection : & ' a RuleCollection ,
269
274
properties_provider : & ' a PP ,
270
275
normalizer_provider : & ' a NP ,
271
276
casemap_provider : & ' a NC ,
277
+ locale_provider : & ' a LP ,
272
278
xid_start : CodePointSetData ,
273
279
xid_continue : CodePointSetData ,
274
280
pat_ws : CodePointSetData ,
275
281
}
276
282
277
- impl < PP , NP , NC > DataProvider < TransliteratorRulesV1 > for RuleCollectionProvider < ' _ , PP , NP , NC >
283
+ impl < PP , NP , NC , LP > DataProvider < TransliteratorRulesV1 >
284
+ for RuleCollectionProvider < ' _ , PP , NP , NC , LP >
278
285
where
279
286
PP : ?Sized
280
287
+ DataProvider < PropertyBinaryAlphabeticV1 >
@@ -419,7 +426,7 @@ where
419
426
macro_rules! redirect {
420
427
( $( $marker: ty) ,* ) => {
421
428
$(
422
- impl <PP : ?Sized , NP : ?Sized + DataProvider <$marker>, NC : ?Sized > DataProvider <$marker> for RuleCollectionProvider <' _, PP , NP , NC > {
429
+ impl <PP : ?Sized , NP : ?Sized + DataProvider <$marker>, NC : ?Sized , NL : ? Sized > DataProvider <$marker> for RuleCollectionProvider <' _, PP , NP , NC , NL > {
423
430
fn load( & self , req: DataRequest ) -> Result <DataResponse <$marker>, DataError > {
424
431
self . normalizer_provider. load( req)
425
432
}
@@ -436,17 +443,31 @@ redirect!(
436
443
NormalizerNfcV1
437
444
) ;
438
445
439
- impl < PP : ?Sized , NP : ?Sized , NC : ?Sized + DataProvider < CaseMapV1 > > DataProvider < CaseMapV1 >
440
- for RuleCollectionProvider < ' _ , PP , NP , NC >
446
+ impl < PP : ?Sized , NP : ?Sized , NC : ?Sized + DataProvider < CaseMapV1 > , NL : ? Sized >
447
+ DataProvider < CaseMapV1 > for RuleCollectionProvider < ' _ , PP , NP , NC , NL >
441
448
{
442
449
fn load ( & self , req : DataRequest ) -> Result < DataResponse < CaseMapV1 > , DataError > {
443
450
self . casemap_provider . load ( req)
444
451
}
445
452
}
446
453
454
+ macro_rules! redirect {
455
+ ( $( $marker: ty) ,* ) => {
456
+ $(
457
+ impl <PP : ?Sized , NP : ?Sized , NC : ?Sized , NL : ?Sized + DataProvider <$marker>> DataProvider <$marker> for RuleCollectionProvider <' _, PP , NP , NC , NL > {
458
+ fn load( & self , req: DataRequest ) -> Result <DataResponse <$marker>, DataError > {
459
+ self . locale_provider. load( req)
460
+ }
461
+ }
462
+ ) *
463
+ }
464
+ }
465
+
466
+ redirect ! ( LocaleParentsV1 , LocaleLikelySubtagsLanguageV1 ) ;
467
+
447
468
#[ cfg( feature = "datagen" ) ]
448
- impl < PP , NP , NC > IterableDataProvider < TransliteratorRulesV1 >
449
- for RuleCollectionProvider < ' _ , PP , NP , NC >
469
+ impl < PP , NP , NC , NL > IterableDataProvider < TransliteratorRulesV1 >
470
+ for RuleCollectionProvider < ' _ , PP , NP , NC , NL >
450
471
where
451
472
PP : ?Sized
452
473
+ DataProvider < PropertyBinaryAlphabeticV1 >
0 commit comments