@@ -43,14 +43,14 @@ pub enum TreeWalkMode {
43
43
}
44
44
45
45
/// Possible return codes for tree walking callback functions.
46
- #[ allow ( dead_code ) ]
46
+ #[ repr ( i32 ) ]
47
47
pub enum TreeWalkResult {
48
48
/// Continue with the traversal as normal.
49
49
Ok = 0 ,
50
50
/// Skip the current node (in pre-order mode).
51
51
Skip = 1 ,
52
52
/// Completely stop the traversal.
53
- Abort = - 1 ,
53
+ Abort = raw :: GIT_EUSER ,
54
54
}
55
55
56
56
impl Into < i32 > for TreeWalkResult {
@@ -127,7 +127,7 @@ impl<'repo> Tree<'repo> {
127
127
raw:: git_tree_walk (
128
128
self . raw ( ) ,
129
129
mode. into ( ) ,
130
- treewalk_cb,
130
+ treewalk_cb :: < T > ,
131
131
& mut data as * mut _ as * mut c_void ,
132
132
) ;
133
133
Ok ( ( ) )
@@ -201,15 +201,15 @@ impl<'repo> Tree<'repo> {
201
201
202
202
type TreeWalkCb < ' a , T > = FnMut ( & str , & TreeEntry ) -> T + ' a ;
203
203
204
- extern fn treewalk_cb ( root : * const c_char , entry : * const raw:: git_tree_entry , payload : * mut c_void ) -> c_int {
204
+ extern fn treewalk_cb < T : Into < i32 > > ( root : * const c_char , entry : * const raw:: git_tree_entry , payload : * mut c_void ) -> c_int {
205
205
match panic:: wrap ( || unsafe {
206
206
let root = match CStr :: from_ptr ( root) . to_str ( ) {
207
207
Ok ( value) => value,
208
208
_ => return -1 ,
209
209
} ;
210
210
let entry = entry_from_raw_const ( entry) ;
211
- let payload = payload as * mut & mut TreeWalkCb < _ > ;
212
- ( * payload) ( root, & entry)
211
+ let payload = payload as * mut & mut TreeWalkCb < T > ;
212
+ ( * payload) ( root, & entry) . into ( )
213
213
} ) {
214
214
Some ( value) => value,
215
215
None => -1 ,
@@ -520,7 +520,7 @@ mod tests {
520
520
0
521
521
} ) . unwrap ( ) ;
522
522
assert_eq ! ( ct, 1 ) ;
523
-
523
+
524
524
let mut ct = 0 ;
525
525
tree. walk ( TreeWalkMode :: PreOrder , |_, entry| {
526
526
assert_eq ! ( entry. name( ) , Some ( "foo" ) ) ;
0 commit comments