derive-defs
Declarative derive preset configuration via TOML with proc-macro generation.
Overview
derive-defs allows you to define named sets of derive attributes through a
declarative TOML configuration. This is useful when you have common derive
patterns that you use repeatedly across your codebase.
Why not macro_rules_attribute?
Existing solutions require defining aliases directly in code. derive-defs offers:
- External Configuration: Define presets in TOML, not code
- Inheritance: Bundles can extend other bundles via
extends - Cross-file Imports: Split configuration across multiple files
- Runtime Modification: Use
omit/addto modify bundles at use site
Quick Start
1. Create derive_defs.toml
[]
= ["Clone", "Serialize", "Deserialize"]
= ['#[serde(rename_all = "camelCase")]']
[]
= ["Debug", "Clone", "PartialEq"]
[]
= "model"
= ["Serialize", "Deserialize"]
= ['#[serde(rename_all = "camelCase")]']
2. Set up build.rs
Add to Cargo.toml:
[]
= "0.1"
3. Use in your code
use *;
// Modify at use site
TOML Configuration
Basic Syntax
[<name>]
= ["Trait1", "Trait2"] # List of derive traits
= ["#[attr]"] # Additional attributes
= "<parent>" # Inheritance (optional)
Inheritance (extends)
[]
= ["Debug", "Clone"]
[]
= "base"
= ["PartialEq", "Eq", "Hash"]
# Result: Debug, Clone, PartialEq, Eq, Hash
Cross-file Imports (includes)
[]
= "shared/common_defs.toml"
[]
= "common.serialization"
= ["Default"]
API Usage
Attribute Modifiers
// Basic usage
// Exclude Clone from the bundle
// Add Default and Hash to the bundle
// Exclude serde attributes
// Combination
Error Handling
The crate provides clear error messages at build.rs time:
- Circular inheritance:
error: circular extends detected: a → b → c → a - Undefined parent:
error: def "child" extends "parent" which is not defined - Missing include:
error: include file "common.toml" not found - Duplicate name:
error: def "model" is defined multiple times
License
MIT OR Apache-2.0