]>
Commit | Line | Data |
---|---|---|
487cf647 | 1 | // @generated |
49aad941 | 2 | #[clippy::msrv = "1.61"] |
487cf647 | 3 | mod fallback; |
49aad941 | 4 | #[clippy::msrv = "1.61"] |
487cf647 | 5 | mod list; |
49aad941 FG |
6 | #[clippy::msrv = "1.61"] |
7 | use icu_provider::prelude::*; | |
9ffffee4 FG |
8 | /// Implement [`DataProvider<M>`] on the given struct using the data |
9 | /// hardcoded in this module. This allows the struct to be used with | |
10 | /// `icu`'s `_unstable` constructors. | |
11 | /// | |
12 | /// This macro can only be called from its definition-site, i.e. right | |
13 | /// after `include!`-ing the generated module. | |
14 | /// | |
15 | /// ```compile_fail | |
16 | /// struct MyDataProvider; | |
17 | /// include!("/path/to/generated/mod.rs"); | |
18 | /// impl_data_provider(MyDataProvider); | |
19 | /// ``` | |
20 | #[allow(unused_macros)] | |
21 | macro_rules! impl_data_provider { | |
22 | ($ provider : path) => { | |
49aad941 | 23 | #[clippy::msrv = "1.61"] |
9ffffee4 FG |
24 | impl DataProvider<::icu_list::provider::AndListV1Marker> for $provider { |
25 | fn load(&self, req: DataRequest) -> Result<DataResponse<::icu_list::provider::AndListV1Marker>, DataError> { | |
26 | list::and_v1::lookup(&req.locale) | |
27 | .map(zerofrom::ZeroFrom::zero_from) | |
28 | .map(DataPayload::from_owned) | |
29 | .map(|payload| DataResponse { metadata: Default::default(), payload: Some(payload) }) | |
30 | .ok_or_else(|| DataErrorKind::MissingLocale.with_req(::icu_list::provider::AndListV1Marker::KEY, req)) | |
31 | } | |
32 | } | |
49aad941 | 33 | #[clippy::msrv = "1.61"] |
9ffffee4 FG |
34 | impl DataProvider<::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker> for $provider { |
35 | fn load( | |
36 | &self, | |
37 | req: DataRequest, | |
38 | ) -> Result<DataResponse<::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker>, DataError> { | |
39 | fallback::supplement::co_v1::lookup(&req.locale) | |
40 | .map(zerofrom::ZeroFrom::zero_from) | |
41 | .map(DataPayload::from_owned) | |
42 | .map(|payload| DataResponse { metadata: Default::default(), payload: Some(payload) }) | |
487cf647 FG |
43 | .ok_or_else(|| { |
44 | DataErrorKind::MissingLocale | |
9ffffee4 FG |
45 | .with_req(::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker::KEY, req) |
46 | }) | |
47 | } | |
48 | } | |
49aad941 | 49 | #[clippy::msrv = "1.61"] |
9ffffee4 FG |
50 | impl DataProvider<::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker> for $provider { |
51 | fn load( | |
52 | &self, | |
53 | req: DataRequest, | |
54 | ) -> Result<DataResponse<::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker>, DataError> { | |
55 | fallback::likelysubtags_v1::lookup(&req.locale) | |
56 | .map(zerofrom::ZeroFrom::zero_from) | |
57 | .map(DataPayload::from_owned) | |
58 | .map(|payload| DataResponse { metadata: Default::default(), payload: Some(payload) }) | |
59 | .ok_or_else(|| { | |
60 | DataErrorKind::MissingLocale | |
61 | .with_req(::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker::KEY, req) | |
62 | }) | |
63 | } | |
64 | } | |
49aad941 | 65 | #[clippy::msrv = "1.61"] |
9ffffee4 FG |
66 | impl DataProvider<::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker> for $provider { |
67 | fn load( | |
68 | &self, | |
69 | req: DataRequest, | |
70 | ) -> Result<DataResponse<::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker>, DataError> { | |
71 | fallback::parents_v1::lookup(&req.locale) | |
72 | .map(zerofrom::ZeroFrom::zero_from) | |
73 | .map(DataPayload::from_owned) | |
74 | .map(|payload| DataResponse { metadata: Default::default(), payload: Some(payload) }) | |
75 | .ok_or_else(|| { | |
76 | DataErrorKind::MissingLocale.with_req(::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker::KEY, req) | |
77 | }) | |
78 | } | |
79 | } | |
80 | }; | |
487cf647 | 81 | } |
9ffffee4 FG |
82 | /// Implement [`AnyProvider`] on the given struct using the data |
83 | /// hardcoded in this module. This allows the struct to be used with | |
84 | /// `icu`'s `_any` constructors. | |
85 | /// | |
86 | /// This macro can only be called from its definition-site, i.e. right | |
87 | /// after `include!`-ing the generated module. | |
88 | /// | |
89 | /// ```compile_fail | |
90 | /// struct MyAnyProvider; | |
91 | /// include!("/path/to/generated/mod.rs"); | |
92 | /// impl_any_provider(MyAnyProvider); | |
93 | /// ``` | |
94 | #[allow(unused_macros)] | |
95 | macro_rules! impl_any_provider { | |
96 | ($ provider : path) => { | |
49aad941 | 97 | #[clippy::msrv = "1.61"] |
9ffffee4 FG |
98 | impl AnyProvider for $provider { |
99 | fn load_any(&self, key: DataKey, req: DataRequest) -> Result<AnyResponse, DataError> { | |
100 | const ANDLISTV1MARKER: ::icu_provider::DataKeyHash = ::icu_list::provider::AndListV1Marker::KEY.hashed(); | |
101 | const COLLATIONFALLBACKSUPPLEMENTV1MARKER: ::icu_provider::DataKeyHash = | |
102 | ::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker::KEY.hashed(); | |
103 | const LOCALEFALLBACKLIKELYSUBTAGSV1MARKER: ::icu_provider::DataKeyHash = | |
104 | ::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker::KEY.hashed(); | |
105 | const LOCALEFALLBACKPARENTSV1MARKER: ::icu_provider::DataKeyHash = | |
106 | ::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker::KEY.hashed(); | |
107 | match key.hashed() { | |
108 | ANDLISTV1MARKER => list::and_v1::lookup(&req.locale).map(AnyPayload::from_static_ref), | |
109 | COLLATIONFALLBACKSUPPLEMENTV1MARKER => fallback::supplement::co_v1::lookup(&req.locale).map(AnyPayload::from_static_ref), | |
110 | LOCALEFALLBACKLIKELYSUBTAGSV1MARKER => fallback::likelysubtags_v1::lookup(&req.locale).map(AnyPayload::from_static_ref), | |
111 | LOCALEFALLBACKPARENTSV1MARKER => fallback::parents_v1::lookup(&req.locale).map(AnyPayload::from_static_ref), | |
112 | _ => return Err(DataErrorKind::MissingDataKey.with_req(key, req)), | |
113 | } | |
114 | .map(|payload| AnyResponse { payload: Some(payload), metadata: Default::default() }) | |
115 | .ok_or_else(|| DataErrorKind::MissingLocale.with_req(key, req)) | |
116 | } | |
117 | } | |
118 | }; | |
487cf647 | 119 | } |
49aad941 | 120 | #[clippy::msrv = "1.61"] |
9ffffee4 FG |
121 | pub struct BakedDataProvider; |
122 | impl_data_provider!(BakedDataProvider); |