@@ -4,7 +4,7 @@ use serde_json::{self, Map, Value};
4
4
5
5
use util:: zip_to_end;
6
6
7
- use line:: Line ;
7
+ use line:: { wrap , Line , WrapperKind } ;
8
8
9
9
//
10
10
// Entrypoint function
@@ -31,9 +31,15 @@ fn diff_obj(a: &Map<String, Value>, b: &Map<String, Value>) -> Vec<Line> {
31
31
. iter ( )
32
32
. flat_map ( |( key, val) | match b2. remove ( key) {
33
33
Some ( ref bval) if val == bval => vec ! [ Line :: new( 'x' , String :: new( ) ) ] ,
34
- Some ( ref bval) if val. is_object ( ) && bval. is_object ( ) => Line :: wrap (
34
+ Some ( ref bval) if val. is_object ( ) && bval. is_object ( ) => wrap (
35
35
diff ( val, & bval) . expect ( "Invalid input" ) ,
36
36
& format ! ( "\" {}\" : " , key) ,
37
+ WrapperKind :: Object ,
38
+ ) ,
39
+ Some ( ref bval) if val. is_array ( ) && bval. is_array ( ) => wrap (
40
+ diff ( val, & bval) . expect ( "Invalid input" ) ,
41
+ & format ! ( "\" {}\" : " , key) ,
42
+ WrapperKind :: Array ,
37
43
) ,
38
44
Some ( bval) => vec ! [ Line :: new( '~' , format!( r#""{}": {} => {}"# , key, val, bval) ) ] ,
39
45
_ => vec ! [ Line :: new( '-' , format!( r#""{}": {}"# , key, val) ) ] ,
@@ -51,9 +57,9 @@ fn diff_array(a: &[Value], b: &[Value]) -> Vec<Line> {
51
57
let zip = zip_to_end ( a. to_vec ( ) , b. to_vec ( ) ) ;
52
58
zip. iter ( )
53
59
. flat_map ( |( a, b) | match ( a, b) {
54
- ( Some ( a) , Some ( b) ) => Line :: wrap ( diff ( a, b) . unwrap ( ) , "" ) ,
55
- ( Some ( a) , None ) => Line :: wrap ( diff ( a, & empty_map) . unwrap ( ) , "" ) ,
56
- ( None , Some ( b) ) => Line :: wrap ( diff ( & empty_map, b) . unwrap ( ) , "" ) ,
60
+ ( Some ( a) , Some ( b) ) => wrap ( diff ( a, b) . unwrap ( ) , "" , WrapperKind :: Object ) ,
61
+ ( Some ( a) , None ) => wrap ( diff ( a, & empty_map) . unwrap ( ) , "" , WrapperKind :: Object ) ,
62
+ ( None , Some ( b) ) => wrap ( diff ( & empty_map, b) . unwrap ( ) , "" , WrapperKind :: Object ) ,
57
63
_ => vec ! [ ] ,
58
64
} ) . collect ( )
59
65
} else {
0 commit comments