@@ -22,7 +22,7 @@ use winnow::token::take_while;
22
22
// local-date = full-date
23
23
// local-time = partial-time
24
24
// full-time = partial-time time-offset
25
- pub ( crate ) fn date_time ( input : & mut Input < ' _ > ) -> PResult < Datetime > {
25
+ pub ( crate ) fn date_time ( input : & mut Input < ' _ > ) -> ModalResult < Datetime > {
26
26
trace (
27
27
"date-time" ,
28
28
alt ( (
@@ -53,11 +53,11 @@ pub(crate) fn date_time(input: &mut Input<'_>) -> PResult<Datetime> {
53
53
}
54
54
55
55
// full-date = date-fullyear "-" date-month "-" date-mday
56
- pub ( crate ) fn full_date ( input : & mut Input < ' _ > ) -> PResult < Date > {
56
+ pub ( crate ) fn full_date ( input : & mut Input < ' _ > ) -> ModalResult < Date > {
57
57
trace ( "full-date" , full_date_) . parse_next ( input)
58
58
}
59
59
60
- fn full_date_ ( input : & mut Input < ' _ > ) -> PResult < Date > {
60
+ fn full_date_ ( input : & mut Input < ' _ > ) -> ModalResult < Date > {
61
61
let year = date_fullyear. parse_next ( input) ?;
62
62
let _ = b'-' . parse_next ( input) ?;
63
63
let month = cut_err ( date_month) . parse_next ( input) ?;
@@ -74,19 +74,16 @@ fn full_date_(input: &mut Input<'_>) -> PResult<Date> {
74
74
} ;
75
75
if max_days_in_month < day {
76
76
input. reset ( & day_start) ;
77
- return Err ( winnow:: error:: ErrMode :: from_external_error (
78
- input,
79
- winnow:: error:: ErrorKind :: Verify ,
80
- CustomError :: OutOfRange ,
81
- )
82
- . cut ( ) ) ;
77
+ return Err (
78
+ winnow:: error:: ErrMode :: from_external_error ( input, CustomError :: OutOfRange ) . cut ( ) ,
79
+ ) ;
83
80
}
84
81
85
82
Ok ( Date { year, month, day } )
86
83
}
87
84
88
85
// partial-time = time-hour ":" time-minute ":" time-second [time-secfrac]
89
- pub ( crate ) fn partial_time ( input : & mut Input < ' _ > ) -> PResult < Time > {
86
+ pub ( crate ) fn partial_time ( input : & mut Input < ' _ > ) -> ModalResult < Time > {
90
87
trace (
91
88
"partial-time" ,
92
89
(
@@ -106,7 +103,7 @@ pub(crate) fn partial_time(input: &mut Input<'_>) -> PResult<Time> {
106
103
107
104
// time-offset = "Z" / time-numoffset
108
105
// time-numoffset = ( "+" / "-" ) time-hour ":" time-minute
109
- pub ( crate ) fn time_offset ( input : & mut Input < ' _ > ) -> PResult < Offset > {
106
+ pub ( crate ) fn time_offset ( input : & mut Input < ' _ > ) -> ModalResult < Offset > {
110
107
trace (
111
108
"time-offset" ,
112
109
alt ( (
@@ -132,14 +129,14 @@ pub(crate) fn time_offset(input: &mut Input<'_>) -> PResult<Offset> {
132
129
}
133
130
134
131
// date-fullyear = 4DIGIT
135
- pub ( crate ) fn date_fullyear ( input : & mut Input < ' _ > ) -> PResult < u16 > {
132
+ pub ( crate ) fn date_fullyear ( input : & mut Input < ' _ > ) -> ModalResult < u16 > {
136
133
unsigned_digits :: < 4 , 4 >
137
134
. map ( |s : & str | s. parse :: < u16 > ( ) . expect ( "4DIGIT should match u8" ) )
138
135
. parse_next ( input)
139
136
}
140
137
141
138
// date-month = 2DIGIT ; 01-12
142
- pub ( crate ) fn date_month ( input : & mut Input < ' _ > ) -> PResult < u8 > {
139
+ pub ( crate ) fn date_month ( input : & mut Input < ' _ > ) -> ModalResult < u8 > {
143
140
unsigned_digits :: < 2 , 2 >
144
141
. try_map ( |s : & str | {
145
142
let d = s. parse :: < u8 > ( ) . expect ( "2DIGIT should match u8" ) ;
@@ -153,7 +150,7 @@ pub(crate) fn date_month(input: &mut Input<'_>) -> PResult<u8> {
153
150
}
154
151
155
152
// date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year
156
- pub ( crate ) fn date_mday ( input : & mut Input < ' _ > ) -> PResult < u8 > {
153
+ pub ( crate ) fn date_mday ( input : & mut Input < ' _ > ) -> ModalResult < u8 > {
157
154
unsigned_digits :: < 2 , 2 >
158
155
. try_map ( |s : & str | {
159
156
let d = s. parse :: < u8 > ( ) . expect ( "2DIGIT should match u8" ) ;
@@ -167,14 +164,14 @@ pub(crate) fn date_mday(input: &mut Input<'_>) -> PResult<u8> {
167
164
}
168
165
169
166
// time-delim = "T" / %x20 ; T, t, or space
170
- pub ( crate ) fn time_delim ( input : & mut Input < ' _ > ) -> PResult < u8 > {
167
+ pub ( crate ) fn time_delim ( input : & mut Input < ' _ > ) -> ModalResult < u8 > {
171
168
one_of ( TIME_DELIM ) . parse_next ( input)
172
169
}
173
170
174
171
const TIME_DELIM : ( u8 , u8 , u8 ) = ( b'T' , b't' , b' ' ) ;
175
172
176
173
// time-hour = 2DIGIT ; 00-23
177
- pub ( crate ) fn time_hour ( input : & mut Input < ' _ > ) -> PResult < u8 > {
174
+ pub ( crate ) fn time_hour ( input : & mut Input < ' _ > ) -> ModalResult < u8 > {
178
175
unsigned_digits :: < 2 , 2 >
179
176
. try_map ( |s : & str | {
180
177
let d = s. parse :: < u8 > ( ) . expect ( "2DIGIT should match u8" ) ;
@@ -188,7 +185,7 @@ pub(crate) fn time_hour(input: &mut Input<'_>) -> PResult<u8> {
188
185
}
189
186
190
187
// time-minute = 2DIGIT ; 00-59
191
- pub ( crate ) fn time_minute ( input : & mut Input < ' _ > ) -> PResult < u8 > {
188
+ pub ( crate ) fn time_minute ( input : & mut Input < ' _ > ) -> ModalResult < u8 > {
192
189
unsigned_digits :: < 2 , 2 >
193
190
. try_map ( |s : & str | {
194
191
let d = s. parse :: < u8 > ( ) . expect ( "2DIGIT should match u8" ) ;
@@ -202,7 +199,7 @@ pub(crate) fn time_minute(input: &mut Input<'_>) -> PResult<u8> {
202
199
}
203
200
204
201
// time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second rules
205
- pub ( crate ) fn time_second ( input : & mut Input < ' _ > ) -> PResult < u8 > {
202
+ pub ( crate ) fn time_second ( input : & mut Input < ' _ > ) -> ModalResult < u8 > {
206
203
unsigned_digits :: < 2 , 2 >
207
204
. try_map ( |s : & str | {
208
205
let d = s. parse :: < u8 > ( ) . expect ( "2DIGIT should match u8" ) ;
@@ -216,7 +213,7 @@ pub(crate) fn time_second(input: &mut Input<'_>) -> PResult<u8> {
216
213
}
217
214
218
215
// time-secfrac = "." 1*DIGIT
219
- pub ( crate ) fn time_secfrac ( input : & mut Input < ' _ > ) -> PResult < u32 > {
216
+ pub ( crate ) fn time_secfrac ( input : & mut Input < ' _ > ) -> ModalResult < u32 > {
220
217
static SCALE : [ u32 ; 10 ] = [
221
218
0 ,
222
219
100_000_000 ,
@@ -253,7 +250,7 @@ pub(crate) fn time_secfrac(input: &mut Input<'_>) -> PResult<u32> {
253
250
254
251
pub ( crate ) fn unsigned_digits < ' i , const MIN : usize , const MAX : usize > (
255
252
input : & mut Input < ' i > ,
256
- ) -> PResult < & ' i str > {
253
+ ) -> ModalResult < & ' i str > {
257
254
take_while ( MIN ..=MAX , DIGIT )
258
255
. map ( |b : & [ u8 ] | unsafe { from_utf8_unchecked ( b, "`is_ascii_digit` filters out on-ASCII" ) } )
259
256
. parse_next ( input)
0 commit comments