@@ -96,15 +96,15 @@ pub fn take_n_digits(n: usize) -> impl FnMut(&str) -> StrResult<&str> {
96
96
pub fn two_digits < T : FromStr > ( remain : & str ) -> StrResult < T > {
97
97
let ( remain, two) = take_n_digits ( 2 ) ( remain) ?;
98
98
// NonZeroU8's FromStr implementation rejects 00.
99
- let ( _ , parsed) = nom :: parse_to! ( two, T ) ?;
99
+ let parsed = two. parse_to_err ( ) ?;
100
100
Ok ( ( remain, parsed) )
101
101
}
102
102
103
103
/// Level 0 month or day. Two digits, and the range is not checked here.
104
104
pub fn two_digits_zero_none ( remain : & str ) -> StrResult < Option < NonZeroU8 > > {
105
105
let ( remain, two) = take_n_digits ( 2 ) . parse ( remain) ?;
106
106
// NonZeroU8's FromStr implementation rejects 00.
107
- let ( _ , parsed) = nom :: parse_to! ( two, u8 ) ?;
107
+ let parsed = two. parse_to_err ( ) ?;
108
108
Ok ( ( remain, NonZeroU8 :: new ( parsed) ) )
109
109
}
110
110
@@ -124,10 +124,29 @@ pub enum UnvalidatedTz {
124
124
HoursMinutes { positive : bool , hh : u8 , mm : u8 } ,
125
125
}
126
126
127
+ pub ( crate ) trait ParseToExt < R > : ParseTo < R >
128
+ where
129
+ R : FromStr ,
130
+ {
131
+ fn parse_to_err ( self ) -> Result < R , nom:: Err < nom:: error:: Error < Self > > >
132
+ where
133
+ Self : Sized ,
134
+ {
135
+ self . parse_to ( ) . ok_or_else ( || {
136
+ nom:: Err :: Error ( NomParseError :: from_error_kind (
137
+ self ,
138
+ // whatever. nom should have an Other errorkind.
139
+ nom:: error:: ErrorKind :: MapRes ,
140
+ ) )
141
+ } )
142
+ }
143
+ }
144
+ impl < S : ParseTo < R > , R : FromStr > ParseToExt < R > for S { }
145
+
127
146
pub fn year_n ( n : usize ) -> impl FnMut ( & str ) -> StrResult < i32 > {
128
147
move |remain| {
129
148
let ( remain, four) = take_n_digits ( n) ( remain) ?;
130
- let ( _ , parsed) = nom :: parse_to! ( four, i32 ) ?;
149
+ let parsed: i32 = four. parse_to_err ( ) ?;
131
150
Ok ( ( remain, parsed) )
132
151
}
133
152
}
@@ -136,7 +155,7 @@ pub fn year_n_signed(n: usize) -> impl FnMut(&str) -> StrResult<i32> {
136
155
move |remain| {
137
156
let ( remain, sign) = minus_sign ( -1i32 , 1 ) ( remain) ?;
138
157
let ( remain, four) = take_n_digits ( n) ( remain) ?;
139
- let ( _ , parsed) = nom :: parse_to! ( four, i32 ) ?;
158
+ let parsed: i32 = four. parse_to_err ( ) ?;
140
159
if sign == -1 && parsed == 0 {
141
160
return Err ( nom:: Err :: Error ( NomParseError :: from_error_kind (
142
161
remain,
@@ -153,7 +172,7 @@ pub fn signed_year_min_n(n: usize) -> impl FnMut(&str) -> StrResult<i64> {
153
172
let nonzero_digit = ncc:: satisfy ( |c| c. is_ascii_digit ( ) && c != '0' ) ;
154
173
let ( remain, sign) = minus_sign ( -1i64 , 1i64 ) . parse ( remain) ?;
155
174
let ( remain, digs) = nc:: recognize ( nonzero_digit. and ( take_min_n_digits ( n - 1 ) ) ) ( remain) ?;
156
- let ( _ , parsed) = nom :: parse_to! ( digs, i64 ) ?;
175
+ let parsed: i64 = digs. parse_to_err ( ) ?;
157
176
Ok ( ( remain, parsed * sign) )
158
177
}
159
178
}
0 commit comments