@@ -9,11 +9,11 @@ use crate::options::{components, length, preferences, DateTimeFormatOptions};
9
9
use crate :: pattern:: { hour_cycle, runtime:: PatternPlurals } ;
10
10
use crate :: provider;
11
11
use crate :: provider:: calendar:: patterns:: PatternPluralsV1 ;
12
- use crate :: provider:: calendar:: DatePatternsV1 ;
13
12
use crate :: provider:: calendar:: {
14
13
patterns:: PatternPluralsFromPatternsV1Marker , DatePatternsV1Marker ,
15
- DateSkeletonPatternsV1Marker ,
14
+ DateSkeletonPatternsV1Marker , TimePatternsV1Marker ,
16
15
} ;
16
+ use crate :: provider:: calendar:: { DatePatternsV1 , TimePatternsV1 } ;
17
17
use crate :: skeleton;
18
18
use icu_calendar:: types:: { Era , MonthCode } ;
19
19
use icu_locid:: Locale ;
@@ -22,7 +22,7 @@ use icu_provider::prelude::*;
22
22
type Result < T > = core:: result:: Result < T , DateTimeFormatError > ;
23
23
24
24
fn pattern_for_time_length_inner < ' data > (
25
- data : DatePatternsV1 < ' data > ,
25
+ data : TimePatternsV1 < ' data > ,
26
26
length : length:: Time ,
27
27
preferences : & Option < preferences:: Bag > ,
28
28
) -> PatternPlurals < ' data > {
@@ -81,6 +81,7 @@ impl<D: ?Sized> Clone for PatternSelector<'_, D> {
81
81
impl < D > PatternSelector < ' _ , D >
82
82
where
83
83
D : ResourceProvider < DatePatternsV1Marker >
84
+ + ResourceProvider < TimePatternsV1Marker >
84
85
+ ResourceProvider < DateSkeletonPatternsV1Marker >
85
86
+ ?Sized ,
86
87
{
@@ -123,7 +124,7 @@ where
123
124
self ,
124
125
length : length:: Date ,
125
126
) -> Result < DataPayload < PatternPluralsFromPatternsV1Marker > > {
126
- let patterns_data = self . patterns_data_payload ( ) ?;
127
+ let patterns_data = self . date_patterns_data_payload ( ) ?;
127
128
Ok (
128
129
patterns_data. map_project_with_capture ( length, |data, length, _| {
129
130
let pattern = pattern_for_date_length_inner ( data, length) ;
@@ -140,7 +141,7 @@ where
140
141
length : length:: Time ,
141
142
preferences : Option < preferences:: Bag > ,
142
143
) -> Result < DataPayload < PatternPluralsFromPatternsV1Marker > > {
143
- let patterns_data = self . patterns_data_payload ( ) ?;
144
+ let patterns_data = self . time_patterns_data_payload ( ) ?;
144
145
Ok ( patterns_data. map_project_with_capture (
145
146
( length, preferences) ,
146
147
|data, ( length, preferences) , _| {
@@ -158,23 +159,29 @@ where
158
159
time_length : length:: Time ,
159
160
preferences : Option < preferences:: Bag > ,
160
161
) -> Result < DataPayload < PatternPluralsFromPatternsV1Marker > > {
161
- let patterns_data = self . patterns_data_payload ( ) ?;
162
- patterns_data. try_map_project_with_capture (
163
- ( date_length, time_length, preferences) ,
164
- |data, ( date_length, time_length, preferences) , _| {
162
+ let time_patterns_data = self . time_patterns_data_payload ( ) ?;
163
+
164
+ let date_patterns_data = self . date_patterns_data_payload ( ) ?;
165
+ date_patterns_data. try_map_project_with_capture (
166
+ ( date_length, time_length, preferences, time_patterns_data) ,
167
+ |data, ( date_length, time_length, preferences, time_patterns_data) , _| {
165
168
let date = pattern_for_date_length_inner ( data. clone ( ) , date_length)
166
169
. expect_pattern ( "Lengths are single patterns" ) ;
167
- let time = pattern_for_time_length_inner ( data. clone ( ) , time_length, & preferences)
168
- . expect_pattern ( "Lengths are single patterns" ) ;
169
170
170
171
let pattern = match date_length {
171
172
length:: Date :: Full => data. length_combinations . full ,
172
173
length:: Date :: Long => data. length_combinations . long ,
173
174
length:: Date :: Medium => data. length_combinations . medium ,
174
175
length:: Date :: Short => data. length_combinations . short ,
175
176
} ;
176
- let pattern = pattern. combined ( date, time) ?;
177
- Ok ( PatternPlurals :: from ( pattern) . into ( ) )
177
+
178
+ let time = pattern_for_time_length_inner (
179
+ time_patterns_data. get ( ) . clone ( ) ,
180
+ time_length,
181
+ & preferences,
182
+ )
183
+ . expect_pattern ( "Lengths are single patterns" ) ;
184
+ Ok ( PatternPlurals :: from ( pattern. combined ( date, time) ?) . into ( ) )
178
185
} ,
179
186
)
180
187
}
@@ -185,7 +192,7 @@ where
185
192
components : & components:: Bag ,
186
193
) -> Result < DataPayload < PatternPluralsFromPatternsV1Marker > > {
187
194
let skeletons_data = self . skeleton_data_payload ( ) ?;
188
- let patterns_data = self . patterns_data_payload ( ) ?;
195
+ let patterns_data = self . date_patterns_data_payload ( ) ?;
189
196
// Not all skeletons are currently supported.
190
197
let requested_fields = components. to_vec_fields ( ) ;
191
198
let patterns = match skeleton:: create_best_pattern_for_fields (
@@ -204,7 +211,18 @@ where
204
211
patterns. into_owned ( ) ,
205
212
) ) )
206
213
}
207
- fn patterns_data_payload ( self ) -> Result < DataPayload < DatePatternsV1Marker > > {
214
+ fn date_patterns_data_payload ( self ) -> Result < DataPayload < DatePatternsV1Marker > > {
215
+ let data = self
216
+ . data_provider
217
+ . load_resource ( & DataRequest {
218
+ options : ResourceOptions :: from ( self . locale ) ,
219
+ metadata : Default :: default ( ) ,
220
+ } ) ?
221
+ . take_payload ( ) ?;
222
+ Ok ( data)
223
+ }
224
+
225
+ fn time_patterns_data_payload ( self ) -> Result < DataPayload < TimePatternsV1Marker > > {
208
226
let data = self
209
227
. data_provider
210
228
. load_resource ( & DataRequest {
0 commit comments