altium-format-derive 0.1.7

Proc-macro derives for the altium-format crate.
Documentation
# altium-format-derive

Procedural macros for the `altium-format` crate.

This crate provides three derive macros for generating serialization code for Altium Designer file format records.

## Macros

### AltiumRecord

Generates `FromParams`, `ToParams`, `FromBinary`, and `ToBinary` trait implementations for Altium record types.

**Container attributes:**
- `#[altium(record_id = N)]` - Schematic record type ID
- `#[altium(object_id = Variant)]` - PCB object ID enum variant
- `#[altium(format = "params"|"binary"|"both")]` - Serialization format

**Field attributes:**
- `#[altium(flatten)]` - Flatten a base type's fields
- `#[altium(param = "KEY")]` - Map field to parameter key
- `#[altium(param = "KEY", frac = "KEY_FRAC")]` - Integer with fractional part
- `#[altium(param = "KEY", default)]` - Use `Default::default()` if missing
- `#[altium(param = "KEY", default = value)]` - Use specific default value
- `#[altium(param = "KEY", optional)]` - Wrap in `Option<T>`
- `#[altium(binary, ty = "i32le")]` - Binary field type
- `#[altium(binary, coord_point)]` - Binary coordinate point
- `#[altium(unknown)]` - Store unknown parameters (non-destructive editing)
- `#[altium(unknown_binary)]` - Store unknown binary bytes
- `#[altium(skip)]` - Skip field entirely

**Example:**

```rust
use altium_format_derive::AltiumRecord;

#[derive(AltiumRecord)]
#[altium(record_id = 2, format = "params")]
pub struct SchPin {
    #[altium(flatten)]
    pub base: SchGraphicalBase,

    #[altium(param = "ELECTRICAL", default)]
    pub electrical: PinElectricalType,

    #[altium(param = "PINLENGTH", frac = "PINLENGTH_FRAC")]
    pub pin_length: Coord,

    #[altium(unknown)]
    pub unknown_params: UnknownFields,
}
```

### AltiumBase

Generates `HasXxxBase` traits for composition-based inheritance patterns.

**Attributes:**
- `#[altium(base_name = "Name")]` - Name for generated trait (default: struct name)
- `#[altium(extends = "ParentBase")]` - Parent base type for trait inheritance

**Example:**

```rust
use altium_format_derive::AltiumBase;

#[derive(AltiumBase)]
#[altium(base_name = "SchPrimitiveBase")]
pub struct SchPrimitiveBase {
    #[altium(param = "OWNERINDEX", default)]
    pub owner_index: i32,
}

#[derive(AltiumBase)]
#[altium(base_name = "SchGraphicalBase", extends = "SchPrimitiveBase")]
pub struct SchGraphicalBase {
    #[altium(flatten)]
    pub base: SchPrimitiveBase,

    #[altium(param = "LOCATION.X", frac = "LOCATION.X_FRAC")]
    pub location_x: i32,
}
```

### AltiumEnum

Generates integer conversion traits for enum types.

**Attributes:**
- `#[altium(repr = "i32"|"u8"|...)]` - Integer representation type
- `#[altium(value = N)]` - Map variant to specific integer value
- `#[altium(default)]` - Mark variant as default for unknown values

**Example:**

```rust
use altium_format_derive::AltiumEnum;

#[derive(AltiumEnum)]
#[altium(repr = "i32")]
pub enum PinElectricalType {
    #[altium(value = 0)]
    Input,
    #[altium(value = 1)]
    InputOutput,
    #[altium(value = 2)]
    Output,
    #[altium(default)]
    Passive = 4,
}
```

## Usage

This crate is automatically used when you depend on `altium-format`. You typically don't need to add it directly to your dependencies.

```toml
[dependencies]
altium-format = "0.1.0"  # Includes altium-format-derive
```

For detailed documentation, see [altium-format](../altium-format/CLAUDE.md).

## License

GPL-3.0-only