@@ -155,23 +155,21 @@ impl ShaderCrateTemplateCargoTomlWriter {
155155 }
156156
157157 /// Add or replace a dependency in the shader-crate-template
158- fn set_dependency (
159- & mut self ,
160- package : String ,
161- version : & DependencyVersion ,
162- ) -> anyhow:: Result < ( ) > {
163- if let Some ( version) = version. to_toml ( ) {
164- let dependencies = self . get_cargo_dependencies_table ( ) ;
165- dependencies. insert ( package, version) ;
158+ fn set_dependency ( & mut self , package : & str , version : & DependencyVersion ) -> anyhow:: Result < ( ) > {
159+ let dependencies = self . get_cargo_dependencies_table ( ) ;
160+ if let Some ( value) = dependencies. get_mut ( package) {
161+ version. modify_toml ( value) ;
166162 self . write_shader_crate_cargo_toml_changes ( ) ?;
163+ Ok ( ( ) )
164+ } else {
165+ anyhow:: bail!( "Crate `{package}` not found" )
167166 }
168- Ok ( ( ) )
169167 }
170168
171169 /// Replace the `spirv-std` dependency version
172170 fn set_spirv_std_version ( & mut self , version : & str ) -> anyhow:: Result < ( ) > {
173171 self . set_dependency (
174- "spirv-std" . into ( ) ,
172+ "spirv-std" ,
175173 & DependencyVersion :: parse (
176174 version. into ( ) ,
177175 Some ( "https://github.com/Rust-GPU/rust-gpu" . into ( ) ) ,
@@ -182,7 +180,7 @@ impl ShaderCrateTemplateCargoTomlWriter {
182180 /// Replace the `glam` dependency version
183181 fn set_dependency_glam ( & mut self , version : & str ) -> anyhow:: Result < ( ) > {
184182 self . set_dependency (
185- "glam" . into ( ) ,
183+ "glam" ,
186184 & DependencyVersion :: parse (
187185 version. into ( ) ,
188186 Some ( "https://github.com/bitshifter/glam-rs" . into ( ) ) ,
@@ -227,14 +225,33 @@ impl DependencyVersion {
227225
228226 /// Convert this version to a toml value, may fail if we want the latest version
229227 #[ must_use]
230- pub fn to_toml ( & self ) -> Option < toml:: Value > {
228+ pub fn to_toml ( & self ) -> Option < toml:: Table > {
231229 match self {
232230 Self :: Latest => None ,
233- Self :: Crates ( version) => Some ( toml:: Value :: String ( version. clone ( ) ) ) ,
234- Self :: Git { git, rev } => Some ( toml:: Value :: Table ( toml:: Table :: from_iter ( [
231+ Self :: Crates ( version) => Some ( toml:: Table :: from_iter ( [ (
232+ "version" . to_owned ( ) ,
233+ toml:: Value :: String ( version. clone ( ) ) ,
234+ ) ] ) ) ,
235+ Self :: Git { git, rev } => Some ( toml:: Table :: from_iter ( [
235236 ( "git" . to_owned ( ) , toml:: Value :: String ( git. clone ( ) ) ) ,
236237 ( "rev" . to_owned ( ) , toml:: Value :: String ( rev. clone ( ) ) ) ,
237- ] ) ) ) ,
238+ ] ) ) ,
239+ }
240+ }
241+
242+ /// Convert this version to a toml value, may fail if we want the latest version
243+ pub fn modify_toml ( & self , toml : & mut toml:: Value ) {
244+ if let Some ( mut table) = self . to_toml ( ) {
245+ let mut copy = |key : & str | {
246+ if let Some ( src_table) = toml. as_table_mut ( ) {
247+ if let Some ( value) = src_table. remove ( key) {
248+ table. insert ( key. to_owned ( ) , value) ;
249+ }
250+ }
251+ } ;
252+ copy ( "default-features" ) ;
253+ copy ( "features" ) ;
254+ * toml = toml:: Value :: Table ( table) ;
238255 }
239256 }
240257}
@@ -285,7 +302,7 @@ fn main() -> anyhow::Result<()> {
285302 } => {
286303 let mut overwriter = ShaderCrateTemplateCargoTomlWriter :: new ( true ) ;
287304 overwriter. set_dependency (
288- package. clone ( ) ,
305+ package,
289306 & DependencyVersion :: parse ( version. clone ( ) , git. clone ( ) ) ?,
290307 ) ?;
291308 }
0 commit comments