diff --git a/Cargo.lock b/Cargo.lock index 04069c9..e62de89 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,7 +50,7 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "filecaster" -version = "0.2.1" +version = "0.2.2" dependencies = [ "filecaster-derive", "merge", @@ -62,7 +62,7 @@ dependencies = [ [[package]] name = "filecaster-derive" -version = "0.2.1" +version = "0.2.2" dependencies = [ "claims", "filecaster", diff --git a/Cargo.toml b/Cargo.toml index 180bbe3..03ed55d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ members = ["filecaster", "filecaster-derive"] [workspace.dependencies] filecaster-derive = { version = "0.2", path = "filecaster-derive" } -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1.0", features = ["derive"], default-features = false } merge = "0.2" # dev-dependencies filecaster = { path = "filecaster" } diff --git a/README.md b/README.md index 8c07e24..0493061 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Procedural macro to derive configuration from files, with optional merging capab ```toml [dependencies] -filecaster = "0.1" +filecaster = "0.2" ``` ```rust diff --git a/filecaster-derive/Cargo.toml b/filecaster-derive/Cargo.toml index 1a9cf5d..0157309 100644 --- a/filecaster-derive/Cargo.toml +++ b/filecaster-derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "filecaster-derive" -version = "0.2.1" +version = "0.2.2" edition = "2024" authors = ["Kristofers Solo "] description = "Procedural derive macro for `filecaster`: automatically implement `FromFile` for your structs." diff --git a/filecaster-derive/src/from_file.rs b/filecaster-derive/src/from_file.rs index 5ac0ac4..e71671d 100644 --- a/filecaster-derive/src/from_file.rs +++ b/filecaster-derive/src/from_file.rs @@ -6,6 +6,7 @@ use syn::{ }; const WITH_MERGE: bool = cfg!(feature = "merge"); +const WITH_SERDE: bool = cfg!(feature = "serde"); /// Entry point: generate the shadow struct + `FromFile` impls. pub fn impl_from_file(input: &DeriveInput) -> Result { @@ -123,11 +124,16 @@ fn process_fields(fields: &FieldsNamed) -> Result<(Vec, Vec TokenStream { - quote! { - #[derive(Debug, Clone, Default)] - #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] - #[cfg_attr(feature = "merge", derive(merge::Merge))] + let mut traits = vec![quote! {Debug}, quote! {Clone}, quote! {Default}]; + if WITH_SERDE { + traits.extend([quote! { serde::Deserialize }, quote! { serde::Serialize }]); } + + if WITH_MERGE { + traits.push(quote! { merge::Merge }); + } + + quote! { #[derive( #(#traits),* )] } } /// Add Default bound to every generic parameter diff --git a/filecaster/Cargo.toml b/filecaster/Cargo.toml index d43ea7f..c17be3b 100644 --- a/filecaster/Cargo.toml +++ b/filecaster/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "filecaster" -version = "0.2.1" +version = "0.2.2" edition = "2024" authors = ["Kristofers Solo "] description = "Procedural macro to derive configuration from files, with optional merging capabilities."