icu_datetime/scaffold/
dynamic_impls.rs

1// This file is part of ICU4X. For terms of use, please see the file
2// called LICENSE at the top level of the ICU4X source tree
3// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5use super::*;
6use crate::fieldsets::enums::*;
7use crate::provider::{neo::*, time_zones::tz, *};
8use icu_calendar::types::{DayOfMonth, DayOfYear, MonthInfo, RataDie, Weekday, YearInfo};
9use icu_provider::marker::NeverMarker;
10use icu_time::{
11    zone::{UtcOffset, ZoneNameTimestamp},
12    Hour, Minute, Nanosecond, Second, TimeZone,
13};
14
15impl UnstableSealed for DateFieldSet {}
16
17impl DateTimeNamesMarker for DateFieldSet {
18    type YearNames = datetime_marker_helper!(@names/year, yes);
19    type MonthNames = datetime_marker_helper!(@names/month, yes);
20    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
21    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod,);
22    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
23    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
24    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
25    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
26    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
27    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
28    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
29    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
30    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
31    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
32    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
33}
34
35impl DateInputMarkers for DateFieldSet {
36    type YearInput = datetime_marker_helper!(@input/year, yes);
37    type MonthInput = datetime_marker_helper!(@input/month, yes);
38    type DayOfMonthInput = datetime_marker_helper!(@input/day_of_month, yes);
39    type DayOfYearInput = datetime_marker_helper!(@input/day_of_year, yes);
40    type RataDieInput = datetime_marker_helper!(@input/rata_die, yes);
41    type DayOfWeekInput = datetime_marker_helper!(@input/day_of_week, yes);
42}
43
44impl<C: CldrCalendar> TypedDateDataMarkers<C> for DateFieldSet {
45    type DateSkeletonPatternsV1 = datetime_marker_helper!(@dates/typed, yes);
46    type YearNamesV1 = datetime_marker_helper!(@years/typed, yes);
47    type MonthNamesV1 = datetime_marker_helper!(@months/typed, yes);
48    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays, yes);
49}
50
51impl DateDataMarkers for DateFieldSet {
52    type Skel = datetime_marker_helper!(@calmarkers, yes);
53    type Year = datetime_marker_helper!(@calmarkers, yes);
54    type Month = datetime_marker_helper!(@calmarkers, yes);
55    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays, yes);
56}
57
58impl DateTimeMarkers for DateFieldSet {
59    type D = Self;
60    type T = ();
61    type Z = ();
62    type GluePatternV1 = datetime_marker_helper!(@glue,);
63}
64
65impl UnstableSealed for CalendarPeriodFieldSet {}
66
67impl DateTimeNamesMarker for CalendarPeriodFieldSet {
68    type YearNames = datetime_marker_helper!(@names/year, yes);
69    type MonthNames = datetime_marker_helper!(@names/month, yes);
70    type WeekdayNames = datetime_marker_helper!(@names/weekday,);
71    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod,);
72    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
73    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
74    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
75    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
76    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
77    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
78    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
79    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
80    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
81    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
82    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
83}
84
85impl DateInputMarkers for CalendarPeriodFieldSet {
86    type YearInput = datetime_marker_helper!(@input/year, yes);
87    type MonthInput = datetime_marker_helper!(@input/month, yes);
88    type DayOfMonthInput = datetime_marker_helper!(@input/day_of_month,);
89    type DayOfWeekInput = datetime_marker_helper!(@input/day_of_week,);
90    type DayOfYearInput = datetime_marker_helper!(@input/day_of_year,);
91    type RataDieInput = datetime_marker_helper!(@input/rata_die,);
92}
93
94impl<C: CldrCalendar> TypedDateDataMarkers<C> for CalendarPeriodFieldSet {
95    type DateSkeletonPatternsV1 = datetime_marker_helper!(@dates/typed, yes);
96    type YearNamesV1 = datetime_marker_helper!(@years/typed, yes);
97    type MonthNamesV1 = datetime_marker_helper!(@months/typed, yes);
98    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays,);
99}
100
101impl DateDataMarkers for CalendarPeriodFieldSet {
102    type Skel = datetime_marker_helper!(@calmarkers, yes);
103    type Year = datetime_marker_helper!(@calmarkers, yes);
104    type Month = datetime_marker_helper!(@calmarkers, yes);
105    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays,);
106}
107
108impl DateTimeMarkers for CalendarPeriodFieldSet {
109    type D = Self;
110    type T = ();
111    type Z = ();
112    type GluePatternV1 = datetime_marker_helper!(@glue,);
113}
114
115impl UnstableSealed for TimeFieldSet {}
116
117impl DateTimeNamesMarker for TimeFieldSet {
118    type YearNames = datetime_marker_helper!(@names/year,);
119    type MonthNames = datetime_marker_helper!(@names/month,);
120    type WeekdayNames = datetime_marker_helper!(@names/weekday,);
121    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
122    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
123    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
124    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
125    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
126    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
127    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
128    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
129    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
130    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
131    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
132    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
133}
134
135impl TimeMarkers for TimeFieldSet {
136    type DayPeriodNamesV1 = datetime_marker_helper!(@dayperiods, yes);
137    type TimeSkeletonPatternsV1 = datetime_marker_helper!(@times, yes);
138    type HourInput = datetime_marker_helper!(@input/hour, yes);
139    type MinuteInput = datetime_marker_helper!(@input/minute, yes);
140    type SecondInput = datetime_marker_helper!(@input/second, yes);
141    type NanosecondInput = datetime_marker_helper!(@input/Nanosecond, yes);
142}
143
144impl DateTimeMarkers for TimeFieldSet {
145    type D = ();
146    type T = Self;
147    type Z = ();
148    type GluePatternV1 = datetime_marker_helper!(@glue,);
149}
150
151impl UnstableSealed for DateAndTimeFieldSet {}
152
153impl DateTimeNamesMarker for DateAndTimeFieldSet {
154    type YearNames = datetime_marker_helper!(@names/year, yes);
155    type MonthNames = datetime_marker_helper!(@names/month, yes);
156    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
157    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
158    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
159    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
160    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
161    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
162    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
163    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
164    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
165    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
166    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
167    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
168    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
169}
170
171impl DateTimeMarkers for DateAndTimeFieldSet {
172    type D = DateFieldSet;
173    type T = TimeFieldSet;
174    type Z = ();
175    type GluePatternV1 = datetime_marker_helper!(@glue, yes);
176}
177
178impl UnstableSealed for ZoneFieldSet {}
179
180impl DateTimeNamesMarker for ZoneFieldSet {
181    type YearNames = datetime_marker_helper!(@names/year,);
182    type MonthNames = datetime_marker_helper!(@names/month,);
183    type WeekdayNames = datetime_marker_helper!(@names/weekday,);
184    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod,);
185    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials, yes);
186    type ZoneLocations = datetime_marker_helper!(@names/zone/locations, yes);
187    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root, yes);
188    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars, yes);
189    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root, yes);
190    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long, yes);
191    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long, yes);
192    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short, yes);
193    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long, yes);
194    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short, yes);
195    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods, yes);
196}
197
198impl ZoneMarkers for ZoneFieldSet {
199    type TimeZoneIdInput = datetime_marker_helper!(@input/timezone/id, yes);
200    type TimeZoneOffsetInput = datetime_marker_helper!(@input/timezone/offset, yes);
201    type TimeZoneNameTimestampInput = datetime_marker_helper!(@input/timezone/timestamp, yes);
202    type EssentialsV1 = datetime_marker_helper!(@data/zone/essentials, yes);
203    type LocationsV1 = datetime_marker_helper!(@data/zone/locations, yes);
204    type LocationsRootV1 = datetime_marker_helper!(@data/zone/locations_root, yes);
205    type ExemplarCitiesV1 = datetime_marker_helper!(@data/zone/exemplars, yes);
206    type ExemplarCitiesRootV1 = datetime_marker_helper!(@data/zone/exemplars_root, yes);
207    type GenericLongV1 = datetime_marker_helper!(@data/zone/generic_long, yes);
208    type GenericShortV1 = datetime_marker_helper!(@data/zone/generic_short, yes);
209    type StandardLongV1 = datetime_marker_helper!(@data/zone/standard_long, yes);
210    type SpecificLongV1 = datetime_marker_helper!(@data/zone/specific_long, yes);
211    type SpecificShortV1 = datetime_marker_helper!(@data/zone/specific_short, yes);
212    type MetazonePeriodV1 = datetime_marker_helper!(@data/zone/metazone_periods, yes);
213}
214
215impl DateTimeMarkers for ZoneFieldSet {
216    type D = ();
217    type T = ();
218    type Z = Self;
219    type GluePatternV1 = datetime_marker_helper!(@glue,);
220}
221
222impl UnstableSealed for CompositeDateTimeFieldSet {}
223
224impl DateTimeNamesMarker for CompositeDateTimeFieldSet {
225    type YearNames = datetime_marker_helper!(@names/year, yes);
226    type MonthNames = datetime_marker_helper!(@names/month, yes);
227    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
228    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
229    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
230    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
231    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
232    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
233    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
234    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
235    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
236    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
237    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
238    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
239    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
240}
241
242impl DateTimeMarkers for CompositeDateTimeFieldSet {
243    type D = DateFieldSet;
244    type T = TimeFieldSet;
245    type Z = ();
246    type GluePatternV1 = datetime_marker_helper!(@glue, yes);
247}
248
249impl UnstableSealed for CompositeFieldSet {}
250
251impl DateTimeNamesMarker for CompositeFieldSet {
252    type YearNames = datetime_marker_helper!(@names/year, yes);
253    type MonthNames = datetime_marker_helper!(@names/month, yes);
254    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
255    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
256    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials, yes);
257    type ZoneLocations = datetime_marker_helper!(@names/zone/locations, yes);
258    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root, yes);
259    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars, yes);
260    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root, yes);
261    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long, yes);
262    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short, yes);
263    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long, yes);
264    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long, yes);
265    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short, yes);
266    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods, yes);
267}
268
269impl DateTimeMarkers for CompositeFieldSet {
270    type D = DateFieldSet;
271    type T = TimeFieldSet;
272    type Z = ZoneFieldSet;
273    type GluePatternV1 = datetime_marker_helper!(@glue, yes);
274}