fix: feature derive clause

This commit is contained in:
Kristofers Solo 2025-07-15 17:32:33 +03:00
parent 32ad6514ab
commit dabacf02df
Signed by: kristoferssolo
GPG Key ID: 8687F2D3EEE6F0ED
6 changed files with 16 additions and 10 deletions

4
Cargo.lock generated
View File

@ -50,7 +50,7 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]] [[package]]
name = "filecaster" name = "filecaster"
version = "0.2.1" version = "0.2.2"
dependencies = [ dependencies = [
"filecaster-derive", "filecaster-derive",
"merge", "merge",
@ -62,7 +62,7 @@ dependencies = [
[[package]] [[package]]
name = "filecaster-derive" name = "filecaster-derive"
version = "0.2.1" version = "0.2.2"
dependencies = [ dependencies = [
"claims", "claims",
"filecaster", "filecaster",

View File

@ -4,7 +4,7 @@ members = ["filecaster", "filecaster-derive"]
[workspace.dependencies] [workspace.dependencies]
filecaster-derive = { version = "0.2", path = "filecaster-derive" } 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" merge = "0.2"
# dev-dependencies # dev-dependencies
filecaster = { path = "filecaster" } filecaster = { path = "filecaster" }

View File

@ -12,7 +12,7 @@ Procedural macro to derive configuration from files, with optional merging capab
```toml ```toml
[dependencies] [dependencies]
filecaster = "0.1" filecaster = "0.2"
``` ```
```rust ```rust

View File

@ -1,6 +1,6 @@
[package] [package]
name = "filecaster-derive" name = "filecaster-derive"
version = "0.2.1" version = "0.2.2"
edition = "2024" edition = "2024"
authors = ["Kristofers Solo <dev@kristofers.xyz>"] authors = ["Kristofers Solo <dev@kristofers.xyz>"]
description = "Procedural derive macro for `filecaster`: automatically implement `FromFile` for your structs." description = "Procedural derive macro for `filecaster`: automatically implement `FromFile` for your structs."

View File

@ -6,6 +6,7 @@ use syn::{
}; };
const WITH_MERGE: bool = cfg!(feature = "merge"); const WITH_MERGE: bool = cfg!(feature = "merge");
const WITH_SERDE: bool = cfg!(feature = "serde");
/// Entry point: generate the shadow struct + `FromFile` impls. /// Entry point: generate the shadow struct + `FromFile` impls.
pub fn impl_from_file(input: &DeriveInput) -> Result<TokenStream> { pub fn impl_from_file(input: &DeriveInput) -> Result<TokenStream> {
@ -123,11 +124,16 @@ fn process_fields(fields: &FieldsNamed) -> Result<(Vec<TokenStream>, Vec<TokenSt
/// Derive clause for the shadow struct /// Derive clause for the shadow struct
fn build_derive_clause() -> TokenStream { fn build_derive_clause() -> TokenStream {
quote! { let mut traits = vec![quote! {Debug}, quote! {Clone}, quote! {Default}];
#[derive(Debug, Clone, Default)] if WITH_SERDE {
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] traits.extend([quote! { serde::Deserialize }, quote! { serde::Serialize }]);
#[cfg_attr(feature = "merge", derive(merge::Merge))]
} }
if WITH_MERGE {
traits.push(quote! { merge::Merge });
}
quote! { #[derive( #(#traits),* )] }
} }
/// Add Default bound to every generic parameter /// Add Default bound to every generic parameter

View File

@ -1,6 +1,6 @@
[package] [package]
name = "filecaster" name = "filecaster"
version = "0.2.1" version = "0.2.2"
edition = "2024" edition = "2024"
authors = ["Kristofers Solo <dev@kristofers.xyz>"] authors = ["Kristofers Solo <dev@kristofers.xyz>"]
description = "Procedural macro to derive configuration from files, with optional merging capabilities." description = "Procedural macro to derive configuration from files, with optional merging capabilities."