@@ -861,23 +861,27 @@ impl Target {
861
861
} ) ;
862
862
( $key_name: ident, link_args) => ( {
863
863
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
+ JSON object with fields per linker-flavor.", name) ) ?;
865
867
let mut args = LinkArgs :: new( ) ;
866
868
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( || {
868
870
format!( "{}: '{}' is not a valid value for linker-flavor. \
869
871
Use 'em', 'gcc', 'ld' or 'msvc'", name, k)
870
872
} ) ?;
871
873
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) ;
881
885
}
882
886
base. options. $key_name = args;
883
887
}
0 commit comments