@@ -122,33 +122,18 @@ pub struct CrossToml {
122122}
123123
124124impl CrossToml {
125- /// Parses the [`CrossToml`] from all of the config sources
126- pub fn parse (
127- cargo_toml : & str ,
128- cross_toml : & str ,
129- msg_info : & mut MessageInfo ,
130- ) -> Result < ( Self , BTreeSet < String > ) > {
131- let ( cross_toml, mut unused) = Self :: parse_from_cross ( cross_toml, msg_info) ?;
132-
133- if let Some ( ( cargo_toml, u_cargo) ) = Self :: parse_from_cargo ( cargo_toml, msg_info) ? {
134- unused. extend ( u_cargo) ;
135- Ok ( ( cargo_toml. merge ( cross_toml) ?, unused) )
136- } else {
137- Ok ( ( cross_toml, unused) )
138- }
139- }
140-
141125 /// Parses the [`CrossToml`] from a string
142- pub fn parse_from_cross (
126+ pub fn parse_from_cross_str (
143127 toml_str : & str ,
128+ source : Option < & str > ,
144129 msg_info : & mut MessageInfo ,
145130 ) -> Result < ( Self , BTreeSet < String > ) > {
146131 let tomld = toml:: Deserializer :: new ( toml_str) ;
147- Self :: parse_from_deserializer ( tomld, msg_info)
132+ Self :: parse_from_deserializer ( tomld, source , msg_info)
148133 }
149134
150135 /// Parses the [`CrossToml`] from a string containing the Cargo.toml contents
151- pub fn parse_from_cargo (
136+ pub fn parse_from_cargo_package_str (
152137 cargo_toml_str : & str ,
153138 msg_info : & mut MessageInfo ,
154139 ) -> Result < Option < ( Self , BTreeSet < String > ) > > {
@@ -161,6 +146,7 @@ impl CrossToml {
161146 if let Some ( cross_meta) = cross_metadata_opt {
162147 Ok ( Some ( Self :: parse_from_deserializer (
163148 cross_meta. clone ( ) ,
149+ None ,
164150 msg_info,
165151 ) ?) )
166152 } else {
@@ -169,8 +155,9 @@ impl CrossToml {
169155 }
170156
171157 /// Parses the [`CrossToml`] from a [`Deserializer`]
172- fn parse_from_deserializer < ' de , D > (
158+ pub fn parse_from_deserializer < ' de , D > (
173159 deserializer : D ,
160+ source : Option < & str > ,
174161 msg_info : & mut MessageInfo ,
175162 ) -> Result < ( Self , BTreeSet < String > ) >
176163 where
@@ -184,7 +171,8 @@ impl CrossToml {
184171
185172 if !unused. is_empty ( ) {
186173 msg_info. warn ( format_args ! (
187- "found unused key(s) in Cross configuration:\n > {}" ,
174+ "found unused key(s) in Cross configuration{}:\n > {}" ,
175+ source. map( |s| format!( " at {s}" ) ) . unwrap_or_default( ) ,
188176 unused. clone( ) . into_iter( ) . collect:: <Vec <_>>( ) . join( ", " )
189177 ) ) ?;
190178 }
@@ -598,7 +586,7 @@ mod tests {
598586 targets : HashMap :: new ( ) ,
599587 build : CrossBuildConfig :: default ( ) ,
600588 } ;
601- let ( parsed_cfg, unused) = CrossToml :: parse_from_cross ( "" , & mut m ! ( ) ) ?;
589+ let ( parsed_cfg, unused) = CrossToml :: parse_from_cross_str ( "" , None , & mut m ! ( ) ) ?;
602590
603591 assert_eq ! ( parsed_cfg, cfg) ;
604592 assert ! ( unused. is_empty( ) ) ;
@@ -633,7 +621,7 @@ mod tests {
633621 volumes = ["VOL1_ARG", "VOL2_ARG"]
634622 passthrough = ["VAR1", "VAR2"]
635623 "# ;
636- let ( parsed_cfg, unused) = CrossToml :: parse_from_cross ( test_str, & mut m ! ( ) ) ?;
624+ let ( parsed_cfg, unused) = CrossToml :: parse_from_cross_str ( test_str, None , & mut m ! ( ) ) ?;
637625
638626 assert_eq ! ( parsed_cfg, cfg) ;
639627 assert ! ( unused. is_empty( ) ) ;
@@ -705,7 +693,7 @@ mod tests {
705693 version = "2.17"
706694 image = "zig:local"
707695 "# ;
708- let ( parsed_cfg, unused) = CrossToml :: parse_from_cross ( test_str, & mut m ! ( ) ) ?;
696+ let ( parsed_cfg, unused) = CrossToml :: parse_from_cross_str ( test_str, None , & mut m ! ( ) ) ?;
709697
710698 assert_eq ! ( parsed_cfg, cfg) ;
711699 assert ! ( unused. is_empty( ) ) ;
@@ -791,7 +779,7 @@ mod tests {
791779 [target.aarch64-unknown-linux-gnu.env]
792780 volumes = ["VOL"]
793781 "# ;
794- let ( parsed_cfg, unused) = CrossToml :: parse_from_cross ( test_str, & mut m ! ( ) ) ?;
782+ let ( parsed_cfg, unused) = CrossToml :: parse_from_cross_str ( test_str, None , & mut m ! ( ) ) ?;
795783
796784 assert_eq ! ( parsed_cfg, cfg) ;
797785 assert ! ( unused. is_empty( ) ) ;
@@ -810,7 +798,7 @@ mod tests {
810798 cross = "1.2.3"
811799 "# ;
812800
813- let res = CrossToml :: parse_from_cargo ( test_str, & mut m ! ( ) ) ?;
801+ let res = CrossToml :: parse_from_cargo_package_str ( test_str, & mut m ! ( ) ) ?;
814802 assert ! ( res. is_none( ) ) ;
815803
816804 Ok ( ( ) )
@@ -846,7 +834,9 @@ mod tests {
846834 xargo = true
847835 "# ;
848836
849- if let Some ( ( parsed_cfg, _unused) ) = CrossToml :: parse_from_cargo ( test_str, & mut m ! ( ) ) ? {
837+ if let Some ( ( parsed_cfg, _unused) ) =
838+ CrossToml :: parse_from_cargo_package_str ( test_str, & mut m ! ( ) ) ?
839+ {
850840 assert_eq ! ( parsed_cfg, cfg) ;
851841 } else {
852842 panic ! ( "Parsing result is None" ) ;
@@ -873,7 +863,7 @@ mod tests {
873863 zig = "2.17"
874864 "# ;
875865
876- let ( cfg, _) = CrossToml :: parse_from_cross ( cfg, & mut m ! ( ) ) ?;
866+ let ( cfg, _) = CrossToml :: parse_from_cross_str ( cfg, None , & mut m ! ( ) ) ?;
877867 serde_json:: from_value :: < CrossToml > ( serde_json:: to_value ( cfg) ?) ?;
878868 Ok ( ( ) )
879869 }
@@ -977,9 +967,9 @@ mod tests {
977967 "# ;
978968
979969 // Parses configs
980- let ( cfg1, _) = CrossToml :: parse_from_cross ( cfg1_str, & mut m ! ( ) ) ?;
981- let ( cfg2, _) = CrossToml :: parse_from_cross ( cfg2_str, & mut m ! ( ) ) ?;
982- let ( cfg_expected, _) = CrossToml :: parse_from_cross ( cfg_expected_str, & mut m ! ( ) ) ?;
970+ let ( cfg1, _) = CrossToml :: parse_from_cross_str ( cfg1_str, None , & mut m ! ( ) ) ?;
971+ let ( cfg2, _) = CrossToml :: parse_from_cross_str ( cfg2_str, None , & mut m ! ( ) ) ?;
972+ let ( cfg_expected, _) = CrossToml :: parse_from_cross_str ( cfg_expected_str, None , & mut m ! ( ) ) ?;
983973
984974 // Merges config and compares
985975 let cfg_merged = cfg1. merge ( cfg2) ?;
@@ -1036,7 +1026,7 @@ mod tests {
10361026 [build]
10371027 pre-build = ["echo Hello World"]
10381028 "# ;
1039- let ( toml, unused) = CrossToml :: parse_from_cross ( toml_str, & mut m ! ( ) ) ?;
1029+ let ( toml, unused) = CrossToml :: parse_from_cross_str ( toml_str, None , & mut m ! ( ) ) ?;
10401030 assert ! ( unused. is_empty( ) ) ;
10411031 assert ! ( matches!(
10421032 toml. pre_build( & Target :: new_built_in( "aarch64-unknown-linux-gnu" ) ) ,
0 commit comments