@@ -2,7 +2,7 @@ use std::collections::{BTreeMap, BTreeSet};
2
2
3
3
use schemars:: schema:: {
4
4
InstanceType , NumberValidation , ObjectValidation , RootSchema , Schema , SchemaObject ,
5
- SingleOrVec , StringValidation , SubschemaValidation ,
5
+ SingleOrVec , SubschemaValidation ,
6
6
} ;
7
7
use serde_json:: Value ;
8
8
@@ -36,10 +36,10 @@ impl DiffWalker {
36
36
}
37
37
}
38
38
39
- let mut mat = vec ! [ ] ;
40
39
let len = lhs_any_of. len ( ) ;
41
- for l in lhs_any_of. iter_mut ( ) {
42
- for r in rhs_any_of. iter_mut ( ) {
40
+ let mut mat = pathfinding:: matrix:: Matrix :: new ( len, len, 0i32 ) ;
41
+ for ( i, l) in lhs_any_of. iter_mut ( ) . enumerate ( ) {
42
+ for ( j, r) in rhs_any_of. iter_mut ( ) . enumerate ( ) {
43
43
let mut walker = DiffWalker {
44
44
changes : vec ! [ ] ,
45
45
lhs_root : self . lhs_root . clone ( ) ,
@@ -50,25 +50,20 @@ impl DiffWalker {
50
50
& mut l. clone ( ) . into_object ( ) ,
51
51
& mut r. clone ( ) . into_object ( ) ,
52
52
) ?;
53
- mat. push ( walker. changes . len ( ) ) ;
53
+ mat[ ( i , j ) ] = i32 :: try_from ( walker. changes . len ( ) ) . expect ( "too many changes" ) ;
54
54
}
55
55
}
56
- let pairs = hungarian:: minimize ( & mat, len, len)
57
- . into_iter ( )
58
- . enumerate ( )
59
- . filter_map ( |( i, j) | j. map ( |j| ( i, j) ) )
60
- . collect :: < Vec < _ > > ( ) ;
61
-
56
+ let pairs = pathfinding:: kuhn_munkres:: kuhn_munkres_min ( & mat) . 1 ;
62
57
for i in 0 ..len {
63
58
let new_path = match is_rhs_split {
64
59
true => json_path. to_owned ( ) ,
65
- false => format ! ( "{json_path}.<anyOf:{}>" , pairs[ i] . 1 ) ,
60
+ false => format ! ( "{json_path}.<anyOf:{}>" , pairs[ i] ) ,
66
61
} ;
67
62
self . do_diff (
68
63
& new_path,
69
64
true ,
70
- & mut lhs_any_of[ pairs [ i ] . 0 ] . clone ( ) . into_object ( ) ,
71
- & mut rhs_any_of[ pairs[ i] . 1 ] . clone ( ) . into_object ( ) ,
65
+ & mut lhs_any_of[ i ] . clone ( ) . into_object ( ) ,
66
+ & mut rhs_any_of[ pairs[ i] ] . clone ( ) . into_object ( ) ,
72
67
) ?;
73
68
}
74
69
}
0 commit comments