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, Weekday, YearInfo};
9use icu_provider::marker::NeverMarker;
10use icu_time::{
11    zone::{TimeZoneVariant, 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 DayOfWeekInput = datetime_marker_helper!(@input/day_of_week, yes);
41}
42
43impl<C: CldrCalendar> TypedDateDataMarkers<C> for DateFieldSet {
44    type DateSkeletonPatternsV1 = datetime_marker_helper!(@dates/typed, yes);
45    type YearNamesV1 = datetime_marker_helper!(@years/typed, yes);
46    type MonthNamesV1 = datetime_marker_helper!(@months/typed, yes);
47    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays, yes);
48}
49
50impl DateDataMarkers for DateFieldSet {
51    type Skel = datetime_marker_helper!(@calmarkers, yes);
52    type Year = datetime_marker_helper!(@calmarkers, yes);
53    type Month = datetime_marker_helper!(@calmarkers, yes);
54    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays, yes);
55}
56
57impl DateTimeMarkers for DateFieldSet {
58    type D = Self;
59    type T = ();
60    type Z = ();
61    type GluePatternV1 = datetime_marker_helper!(@glue,);
62}
63
64impl UnstableSealed for CalendarPeriodFieldSet {}
65
66impl DateTimeNamesMarker for CalendarPeriodFieldSet {
67    type YearNames = datetime_marker_helper!(@names/year, yes);
68    type MonthNames = datetime_marker_helper!(@names/month, yes);
69    type WeekdayNames = datetime_marker_helper!(@names/weekday,);
70    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod,);
71    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
72    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
73    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
74    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
75    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
76    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
77    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
78    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
79    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
80    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
81    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
82}
83
84impl DateInputMarkers for CalendarPeriodFieldSet {
85    type YearInput = datetime_marker_helper!(@input/year, yes);
86    type MonthInput = datetime_marker_helper!(@input/month, yes);
87    type DayOfMonthInput = datetime_marker_helper!(@input/day_of_month,);
88    type DayOfWeekInput = datetime_marker_helper!(@input/day_of_week,);
89    type DayOfYearInput = datetime_marker_helper!(@input/day_of_year,);
90}
91
92impl<C: CldrCalendar> TypedDateDataMarkers<C> for CalendarPeriodFieldSet {
93    type DateSkeletonPatternsV1 = datetime_marker_helper!(@dates/typed, yes);
94    type YearNamesV1 = datetime_marker_helper!(@years/typed, yes);
95    type MonthNamesV1 = datetime_marker_helper!(@months/typed, yes);
96    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays,);
97}
98
99impl DateDataMarkers for CalendarPeriodFieldSet {
100    type Skel = datetime_marker_helper!(@calmarkers, yes);
101    type Year = datetime_marker_helper!(@calmarkers, yes);
102    type Month = datetime_marker_helper!(@calmarkers, yes);
103    type WeekdayNamesV1 = datetime_marker_helper!(@weekdays,);
104}
105
106impl DateTimeMarkers for CalendarPeriodFieldSet {
107    type D = Self;
108    type T = ();
109    type Z = ();
110    type GluePatternV1 = datetime_marker_helper!(@glue,);
111}
112
113impl UnstableSealed for TimeFieldSet {}
114
115impl DateTimeNamesMarker for TimeFieldSet {
116    type YearNames = datetime_marker_helper!(@names/year,);
117    type MonthNames = datetime_marker_helper!(@names/month,);
118    type WeekdayNames = datetime_marker_helper!(@names/weekday,);
119    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
120    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
121    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
122    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
123    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
124    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
125    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
126    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
127    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
128    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
129    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
130    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
131}
132
133impl TimeMarkers for TimeFieldSet {
134    type DayPeriodNamesV1 = datetime_marker_helper!(@dayperiods, yes);
135    type TimeSkeletonPatternsV1 = datetime_marker_helper!(@times, yes);
136    type HourInput = datetime_marker_helper!(@input/hour, yes);
137    type MinuteInput = datetime_marker_helper!(@input/minute, yes);
138    type SecondInput = datetime_marker_helper!(@input/second, yes);
139    type NanosecondInput = datetime_marker_helper!(@input/Nanosecond, yes);
140}
141
142impl DateTimeMarkers for TimeFieldSet {
143    type D = ();
144    type T = Self;
145    type Z = ();
146    type GluePatternV1 = datetime_marker_helper!(@glue,);
147}
148
149impl UnstableSealed for DateAndTimeFieldSet {}
150
151impl DateTimeNamesMarker for DateAndTimeFieldSet {
152    type YearNames = datetime_marker_helper!(@names/year, yes);
153    type MonthNames = datetime_marker_helper!(@names/month, yes);
154    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
155    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
156    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
157    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
158    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
159    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
160    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
161    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
162    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
163    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
164    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
165    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
166    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
167}
168
169impl DateTimeMarkers for DateAndTimeFieldSet {
170    type D = DateFieldSet;
171    type T = TimeFieldSet;
172    type Z = ();
173    type GluePatternV1 = datetime_marker_helper!(@glue, yes);
174}
175
176impl UnstableSealed for ZoneFieldSet {}
177
178impl DateTimeNamesMarker for ZoneFieldSet {
179    type YearNames = datetime_marker_helper!(@names/year,);
180    type MonthNames = datetime_marker_helper!(@names/month,);
181    type WeekdayNames = datetime_marker_helper!(@names/weekday,);
182    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod,);
183    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials, yes);
184    type ZoneLocations = datetime_marker_helper!(@names/zone/locations, yes);
185    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root, yes);
186    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars, yes);
187    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root, yes);
188    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long, yes);
189    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long, yes);
190    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short, yes);
191    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long, yes);
192    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short, yes);
193    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods, yes);
194}
195
196impl ZoneMarkers for ZoneFieldSet {
197    type TimeZoneIdInput = datetime_marker_helper!(@input/timezone/id, yes);
198    type TimeZoneOffsetInput = datetime_marker_helper!(@input/timezone/offset, yes);
199    type TimeZoneVariantInput = datetime_marker_helper!(@input/timezone/variant, yes);
200    type TimeZoneNameTimestampInput = datetime_marker_helper!(@input/timezone/local_time, yes);
201    type EssentialsV1 = datetime_marker_helper!(@data/zone/essentials, yes);
202    type LocationsV1 = datetime_marker_helper!(@data/zone/locations, yes);
203    type LocationsRootV1 = datetime_marker_helper!(@data/zone/locations_root, yes);
204    type ExemplarCitiesV1 = datetime_marker_helper!(@data/zone/exemplars, yes);
205    type ExemplarCitiesRootV1 = datetime_marker_helper!(@data/zone/exemplars_root, yes);
206    type GenericLongV1 = datetime_marker_helper!(@data/zone/generic_long, yes);
207    type GenericShortV1 = datetime_marker_helper!(@data/zone/generic_short, yes);
208    type StandardLongV1 = datetime_marker_helper!(@data/zone/standard_long, yes);
209    type SpecificLongV1 = datetime_marker_helper!(@data/zone/specific_long, yes);
210    type SpecificShortV1 = datetime_marker_helper!(@data/zone/specific_short, yes);
211    type MetazonePeriodV1 = datetime_marker_helper!(@data/zone/metazone_periods, yes);
212}
213
214impl DateTimeMarkers for ZoneFieldSet {
215    type D = ();
216    type T = ();
217    type Z = Self;
218    type GluePatternV1 = datetime_marker_helper!(@glue,);
219}
220
221impl UnstableSealed for CompositeDateTimeFieldSet {}
222
223impl DateTimeNamesMarker for CompositeDateTimeFieldSet {
224    type YearNames = datetime_marker_helper!(@names/year, yes);
225    type MonthNames = datetime_marker_helper!(@names/month, yes);
226    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
227    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
228    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials,);
229    type ZoneLocations = datetime_marker_helper!(@names/zone/locations,);
230    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root,);
231    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars,);
232    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root,);
233    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long,);
234    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short,);
235    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long,);
236    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long,);
237    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short,);
238    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods,);
239}
240
241impl DateTimeMarkers for CompositeDateTimeFieldSet {
242    type D = DateFieldSet;
243    type T = TimeFieldSet;
244    type Z = ();
245    type GluePatternV1 = datetime_marker_helper!(@glue, yes);
246}
247
248impl UnstableSealed for CompositeFieldSet {}
249
250impl DateTimeNamesMarker for CompositeFieldSet {
251    type YearNames = datetime_marker_helper!(@names/year, yes);
252    type MonthNames = datetime_marker_helper!(@names/month, yes);
253    type WeekdayNames = datetime_marker_helper!(@names/weekday, yes);
254    type DayPeriodNames = datetime_marker_helper!(@names/dayperiod, yes);
255    type ZoneEssentials = datetime_marker_helper!(@names/zone/essentials, yes);
256    type ZoneLocations = datetime_marker_helper!(@names/zone/locations, yes);
257    type ZoneLocationsRoot = datetime_marker_helper!(@names/zone/locations_root, yes);
258    type ZoneExemplars = datetime_marker_helper!(@names/zone/exemplars, yes);
259    type ZoneExemplarsRoot = datetime_marker_helper!(@names/zone/exemplars_root, yes);
260    type ZoneGenericLong = datetime_marker_helper!(@names/zone/generic_long, yes);
261    type ZoneGenericShort = datetime_marker_helper!(@names/zone/generic_short, yes);
262    type ZoneStandardLong = datetime_marker_helper!(@names/zone/standard_long, yes);
263    type ZoneSpecificLong = datetime_marker_helper!(@names/zone/specific_long, yes);
264    type ZoneSpecificShort = datetime_marker_helper!(@names/zone/specific_short, yes);
265    type MetazoneLookup = datetime_marker_helper!(@names/zone/metazone_periods, yes);
266}
267
268impl DateTimeMarkers for CompositeFieldSet {
269    type D = DateFieldSet;
270    type T = TimeFieldSet;
271    type Z = ZoneFieldSet;
272    type GluePatternV1 = datetime_marker_helper!(@glue, yes);
273}