@@ -861,23 +861,27 @@ impl Target {
861861            }  ) ; 
862862            ( $key_name: ident,  link_args)  => (  { 
863863                let  name = ( stringify!( $key_name) ) . replace( "_" ,  "-" ) ; 
864-                 if  let  Some ( obj)  = obj. find( & name[ ..] ) . and_then( |o| o. as_object( ) )  { 
864+                 if  let  Some ( val)  = obj. find( & name[ ..] )  { 
865+                     let  obj = val. as_object( ) . ok_or_else( || format!( "{}: expected a \  
866+ ,  name) ) ?; 
865867                    let  mut  args = LinkArgs :: new( ) ; 
866868                    for  ( k,  v)  in obj { 
867-                         let  k  = LinkerFlavor :: from_str( & k) . ok_or_else( || { 
869+                         let  flavor  = LinkerFlavor :: from_str( & k) . ok_or_else( || { 
868870                            format!( "{}: '{}' is not a valid value for linker-flavor. \  
869871,  name,  k) 
870872                        } ) ?; 
871873
872-                         let  v = v. as_array( ) . map( |a| { 
873-                             a
874-                                 . iter( ) 
875-                                 . filter_map( |o| o. as_string( ) ) 
876-                                 . map( |s| s. to_owned( ) ) 
877-                                 . collect:: <Vec <_>>( ) 
878-                         } ) . unwrap_or( vec![ ] ) ; 
879- 
880-                         args. insert( k,  v) ; 
874+                         let  v = v. as_array( ) . ok_or_else( ||
875+                             format!( "{}.{}: expected a JSON array" ,  name,  k) 
876+                         ) ?. iter( ) . enumerate( ) 
877+                             . map( |( i, s) | { 
878+                                 let  s = s. as_string( ) . ok_or_else( ||
879+                                     format!( "{}.{}[{}]: expected a JSON string" ,  name,  k,  i) ) ?; 
880+                                 Ok ( s. to_owned( ) ) 
881+                             } ) 
882+                             . collect:: <Result <Vec <_>,  String >>( ) ?; 
883+ 
884+                         args. insert( flavor,  v) ; 
881885                    } 
882886                    base. options. $key_name = args; 
883887                } 
0 commit comments