@@ -154,44 +154,42 @@ fn missing_field() -> crate::decode::Error {
154154
155155impl < ' a > CommitRefIter < ' a > {
156156 #[ 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+ }
159163 }
160164
161165 fn next_inner_ (
162- mut i : & ' a [ u8 ] ,
166+ input : & mut & ' a [ u8 ] ,
163167 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 > > {
165169 use State :: * ;
166170 Ok ( match state {
167171 Tree => {
168172 let tree = ( |i : & mut _ | parse:: header_field ( i, b"tree" , parse:: hex_hash) )
169173 . context ( StrContext :: Expected ( "tree <40 lowercase hex char>" . into ( ) ) )
170- . parse_next ( & mut i ) ?;
174+ . parse_next ( input ) ?;
171175 * 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+ }
178179 }
179180 Parents => {
180181 let parent = opt ( |i : & mut _ | parse:: header_field ( i, b"parent" , parse:: hex_hash) )
181182 . context ( StrContext :: Expected ( "commit <40 lowercase hex char>" . into ( ) ) )
182- . parse_next ( & mut i ) ?;
183+ . parse_next ( input ) ?;
183184 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+ } ,
190188 None => {
191189 * state = State :: Signature {
192190 of : SignatureKind :: Author ,
193191 } ;
194- return Self :: next_inner_ ( i , state) ;
192+ Self :: next_inner_ ( input , state) ?
195193 }
196194 }
197195 }
@@ -209,23 +207,20 @@ impl<'a> CommitRefIter<'a> {
209207 } ;
210208 let signature = ( |i : & mut _ | parse:: header_field ( i, field_name, parse:: signature) )
211209 . 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+ }
220215 }
221216 Encoding => {
222217 let encoding = opt ( |i : & mut _ | parse:: header_field ( i, b"encoding" , take_till1 ( NL ) ) )
223218 . context ( StrContext :: Expected ( "encoding <encoding>" . into ( ) ) )
224- . parse_next ( & mut i ) ?;
219+ . parse_next ( input ) ?;
225220 * state = State :: ExtraHeaders ;
226221 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) ? ,
229224 }
230225 }
231226 ExtraHeaders => {
@@ -237,22 +232,22 @@ impl<'a> CommitRefIter<'a> {
237232 } ,
238233 ) ) )
239234 . context ( StrContext :: Expected ( "<field> <single-line|multi-line>" . into ( ) ) )
240- . parse_next ( & mut i ) ?;
235+ . parse_next ( input ) ?;
241236 match extra_header {
242- Some ( extra_header) => ( i , Token :: ExtraHeader ( extra_header) ) ,
237+ Some ( extra_header) => Token :: ExtraHeader ( extra_header) ,
243238 None => {
244239 * state = State :: Message ;
245- return Self :: next_inner_ ( i , state) ;
240+ Self :: next_inner_ ( input , state) ?
246241 }
247242 }
248243 }
249244 Message => {
250- let message = terminated ( decode:: message, eof) . parse_next ( & mut i ) ?;
245+ let message = terminated ( decode:: message, eof) . parse_next ( input ) ?;
251246 debug_assert ! (
252- i . is_empty( ) ,
247+ input . is_empty( ) ,
253248 "we should have consumed all data - otherwise iter may go forever"
254249 ) ;
255- return Ok ( ( i , Token :: Message ( message) ) ) ;
250+ Token :: Message ( message)
256251 }
257252 } )
258253 }
0 commit comments