@@ -4,7 +4,7 @@ use serde_json::{self, Map, Value};
44
55use util:: zip_to_end;
66
7- use line:: Line ;
7+ use line:: { wrap , Line , WrapperKind } ;
88
99//
1010// Entrypoint function
@@ -31,9 +31,15 @@ fn diff_obj(a: &Map<String, Value>, b: &Map<String, Value>) -> Vec<Line> {
3131 . iter ( )
3232 . flat_map ( |( key, val) | match b2. remove ( key) {
3333 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 (
3535 diff ( val, & bval) . expect ( "Invalid input" ) ,
3636 & 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 ,
3743 ) ,
3844 Some ( bval) => vec ! [ Line :: new( '~' , format!( r#""{}": {} => {}"# , key, val, bval) ) ] ,
3945 _ => vec ! [ Line :: new( '-' , format!( r#""{}": {}"# , key, val) ) ] ,
@@ -51,9 +57,9 @@ fn diff_array(a: &[Value], b: &[Value]) -> Vec<Line> {
5157 let zip = zip_to_end ( a. to_vec ( ) , b. to_vec ( ) ) ;
5258 zip. iter ( )
5359 . 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 ) ,
5763 _ => vec ! [ ] ,
5864 } ) . collect ( )
5965 } else {
0 commit comments