Skip to main content

Crate derive_defs

Crate derive_defs 

Source
Expand description

§derive-defs

Library for generating derive preset macros from TOML configuration.

This crate provides functionality to parse TOML configuration files and generate proc-macro code for derive attribute presets.

§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.

§Quick Start

  1. Create a derive_defs.toml configuration file:
[defs.serialization]
traits = ["Clone", "Serialize", "Deserialize"]
attrs = ['#[serde(rename_all = "camelCase")]']

[defs.model]
traits = ["Debug", "Clone", "PartialEq"]
  1. Add to your build.rs:
derive_defs::generate("derive_defs.toml")
    .expect("Failed to generate derive defs");
  1. Use the generated macros in your code:
use my_crate_macros::*;

#[serialization]
struct User {
    name: String,
    age: u32,
}

§Features

  • Declarative Configuration: Define derive 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/add to modify bundles at use site

§TOML Configuration

§Basic Syntax

[defs.<name>]
traits = ["Trait1", "Trait2"]  # List of derive traits
attrs = ["#[attr]"]             # Additional attributes
extends = "<parent>"            # Inheritance (optional)

§Inheritance

[defs.base]
traits = ["Debug", "Clone"]

[defs.value_object]
extends = "base"
traits = ["PartialEq", "Eq", "Hash"]
# Result: Debug, Clone, PartialEq, Eq, Hash

§Cross-file Imports

[includes]
common = "shared/common_defs.toml"

[defs.api_response]
extends = "common.serialization"
traits = ["Default"]

§API Usage

§Attribute Modifiers

// Basic usage
#[serialization]
struct User { ... }

// Exclude Clone from the bundle
#[serialization(omit(Clone))]
struct Session { ... }

// Add Default and Hash to the bundle
#[serialization(add(Default, Hash))]
struct Config { ... }

// Exclude serde attributes
#[serialization(omit_attrs(serde))]
struct Internal { ... }

// Combination
#[serialization(omit(Clone), add(Copy))]
struct Flags { ... }

§Error Handling

The crate provides clear error messages at build.rs time:

  • Circular inheritance detection
  • Undefined parent references
  • Missing include files
  • Duplicate definition names

Modules§

codegen
Proc-macro code generation.
includes
Cross-file include resolution.
parser
TOML configuration parser.
prelude
Common imports for convenience.
resolver
Definition resolver with inheritance support.
validation
Validation utilities for derive-defs configuration.

Enums§

Error
Errors that can occur during code generation.

Functions§

generate
Generate proc-macro code from a TOML configuration file.
generate_from_resolved
Generate proc-macro code from an already resolved configuration.
generate_to
Generate proc-macro code from a TOML configuration file with custom output path.

Type Aliases§

Result
Result type alias for this crate.