@@ -154,44 +154,42 @@ fn missing_field() -> crate::decode::Error {
154
154
155
155
impl < ' a > CommitRefIter < ' a > {
156
156
#[ inline]
157
- fn next_inner ( i : & ' a [ u8 ] , state : & mut State ) -> Result < ( & ' a [ u8 ] , Token < ' a > ) , crate :: decode:: Error > {
158
- Self :: next_inner_ ( i, state) . map_err ( crate :: decode:: Error :: with_err)
157
+ fn next_inner ( mut i : & ' a [ u8 ] , state : & mut State ) -> Result < ( & ' a [ u8 ] , Token < ' a > ) , crate :: decode:: Error > {
158
+ let input = & mut i;
159
+ match Self :: next_inner_ ( input, state) {
160
+ Ok ( token) => Ok ( ( * input, token) ) ,
161
+ Err ( err) => Err ( crate :: decode:: Error :: with_err ( err, input) ) ,
162
+ }
159
163
}
160
164
161
165
fn next_inner_ (
162
- mut i : & ' a [ u8 ] ,
166
+ input : & mut & ' a [ u8 ] ,
163
167
state : & mut State ,
164
- ) -> Result < ( & ' a [ u8 ] , Token < ' a > ) , winnow:: error:: ErrMode < crate :: decode:: ParseError > > {
168
+ ) -> Result < Token < ' a > , winnow:: error:: ErrMode < crate :: decode:: ParseError > > {
165
169
use State :: * ;
166
170
Ok ( match state {
167
171
Tree => {
168
172
let tree = ( |i : & mut _ | parse:: header_field ( i, b"tree" , parse:: hex_hash) )
169
173
. context ( StrContext :: Expected ( "tree <40 lowercase hex char>" . into ( ) ) )
170
- . parse_next ( & mut i ) ?;
174
+ . parse_next ( input ) ?;
171
175
* state = State :: Parents ;
172
- (
173
- i,
174
- Token :: Tree {
175
- id : ObjectId :: from_hex ( tree) . expect ( "parsing validation" ) ,
176
- } ,
177
- )
176
+ Token :: Tree {
177
+ id : ObjectId :: from_hex ( tree) . expect ( "parsing validation" ) ,
178
+ }
178
179
}
179
180
Parents => {
180
181
let parent = opt ( |i : & mut _ | parse:: header_field ( i, b"parent" , parse:: hex_hash) )
181
182
. context ( StrContext :: Expected ( "commit <40 lowercase hex char>" . into ( ) ) )
182
- . parse_next ( & mut i ) ?;
183
+ . parse_next ( input ) ?;
183
184
match parent {
184
- Some ( parent) => (
185
- i,
186
- Token :: Parent {
187
- id : ObjectId :: from_hex ( parent) . expect ( "parsing validation" ) ,
188
- } ,
189
- ) ,
185
+ Some ( parent) => Token :: Parent {
186
+ id : ObjectId :: from_hex ( parent) . expect ( "parsing validation" ) ,
187
+ } ,
190
188
None => {
191
189
* state = State :: Signature {
192
190
of : SignatureKind :: Author ,
193
191
} ;
194
- return Self :: next_inner_ ( i , state) ;
192
+ Self :: next_inner_ ( input , state) ?
195
193
}
196
194
}
197
195
}
@@ -209,23 +207,20 @@ impl<'a> CommitRefIter<'a> {
209
207
} ;
210
208
let signature = ( |i : & mut _ | parse:: header_field ( i, field_name, parse:: signature) )
211
209
. context ( StrContext :: Expected ( err_msg. into ( ) ) )
212
- . parse_next ( & mut i) ?;
213
- (
214
- i,
215
- match who {
216
- SignatureKind :: Author => Token :: Author { signature } ,
217
- SignatureKind :: Committer => Token :: Committer { signature } ,
218
- } ,
219
- )
210
+ . parse_next ( input) ?;
211
+ match who {
212
+ SignatureKind :: Author => Token :: Author { signature } ,
213
+ SignatureKind :: Committer => Token :: Committer { signature } ,
214
+ }
220
215
}
221
216
Encoding => {
222
217
let encoding = opt ( |i : & mut _ | parse:: header_field ( i, b"encoding" , take_till1 ( NL ) ) )
223
218
. context ( StrContext :: Expected ( "encoding <encoding>" . into ( ) ) )
224
- . parse_next ( & mut i ) ?;
219
+ . parse_next ( input ) ?;
225
220
* state = State :: ExtraHeaders ;
226
221
match encoding {
227
- Some ( encoding) => ( i , Token :: Encoding ( encoding. as_bstr ( ) ) ) ,
228
- None => return Self :: next_inner_ ( i , state) ,
222
+ Some ( encoding) => Token :: Encoding ( encoding. as_bstr ( ) ) ,
223
+ None => Self :: next_inner_ ( input , state) ? ,
229
224
}
230
225
}
231
226
ExtraHeaders => {
@@ -237,22 +232,22 @@ impl<'a> CommitRefIter<'a> {
237
232
} ,
238
233
) ) )
239
234
. context ( StrContext :: Expected ( "<field> <single-line|multi-line>" . into ( ) ) )
240
- . parse_next ( & mut i ) ?;
235
+ . parse_next ( input ) ?;
241
236
match extra_header {
242
- Some ( extra_header) => ( i , Token :: ExtraHeader ( extra_header) ) ,
237
+ Some ( extra_header) => Token :: ExtraHeader ( extra_header) ,
243
238
None => {
244
239
* state = State :: Message ;
245
- return Self :: next_inner_ ( i , state) ;
240
+ Self :: next_inner_ ( input , state) ?
246
241
}
247
242
}
248
243
}
249
244
Message => {
250
- let message = terminated ( decode:: message, eof) . parse_next ( & mut i ) ?;
245
+ let message = terminated ( decode:: message, eof) . parse_next ( input ) ?;
251
246
debug_assert ! (
252
- i . is_empty( ) ,
247
+ input . is_empty( ) ,
253
248
"we should have consumed all data - otherwise iter may go forever"
254
249
) ;
255
- return Ok ( ( i , Token :: Message ( message) ) ) ;
250
+ Token :: Message ( message)
256
251
}
257
252
} )
258
253
}
0 commit comments