@@ -74,7 +74,7 @@ fn almost_equals(a: &Json, b: &Json) -> bool {
74
74
fn normalize ( json : & mut Json ) {
75
75
match * json {
76
76
Json :: Array ( ref mut list) => {
77
- match find_url ( list. as_mut_slice ( ) ) {
77
+ match find_url ( list) {
78
78
Some ( Ok ( url) ) => * list = vec ! [ "url" . to_json( ) , Json :: String ( url) ] ,
79
79
Some ( Err ( ( ) ) ) => * list = vec ! [ "error" . to_json( ) , "bad-url" . to_json( ) ] ,
80
80
None => {
@@ -94,25 +94,17 @@ fn normalize(json: &mut Json) {
94
94
}
95
95
96
96
fn find_url ( list : & mut [ Json ] ) -> Option < Result < String , ( ) > > {
97
- if let [ Json :: String ( ref a1) , Json :: String ( ref a2) , ..] = list. as_mut_slice ( ) {
98
- if !( * a1 == "function" && * a2 == "url" ) {
99
- return None
100
- }
101
- } else {
97
+ if list. len ( ) < 2 ||
98
+ list[ 0 ] . as_string ( ) != Some ( "function" ) ||
99
+ list[ 1 ] . as_string ( ) != Some ( "url" ) {
102
100
return None
103
- } ;
104
- let args = & mut list[ 2 ..] ;
105
-
106
- let args = if !args. is_empty ( ) && args[ 0 ] == " " . to_json ( ) {
107
- & mut args[ 1 ..]
108
- } else {
109
- & mut args[ ..]
110
- } ;
101
+ }
111
102
112
- if let [ Json :: Array ( ref mut arg1) , ref rest..] = args. as_mut_slice ( ) {
113
- if let [ Json :: String ( ref a11) , Json :: String ( ref mut a12) ] = arg1. as_mut_slice ( ) {
114
- if * a11 == "string" && rest. iter ( ) . all ( |a| a == & " " . to_json ( ) ) {
115
- return Some ( Ok ( mem:: replace ( a12, String :: new ( ) ) ) )
103
+ let mut args = list[ 2 ..] . iter_mut ( ) . filter ( |a| a. as_string ( ) != Some ( " " ) ) ;
104
+ if let ( Some ( & mut Json :: Array ( ref mut arg) ) , None ) = ( args. next ( ) , args. next ( ) ) {
105
+ if arg. len ( ) == 2 && arg[ 0 ] . as_string ( ) == Some ( "string" ) {
106
+ if let & mut Json :: String ( ref mut value) = & mut arg[ 1 ] {
107
+ return Some ( Ok ( mem:: replace ( value, String :: new ( ) ) ) )
116
108
}
117
109
}
118
110
}
0 commit comments