altium-format-derive 0.1.5

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:

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:

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:

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.

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

For detailed documentation, see altium-format.

License

GPL-3.0-only