#macro-derive #uuid #identifier #id #snowflake #cuid

macro tagid-derive

Defines a derive macro for the tagid newtype labeled tagging for different types of ids

1 unstable release

new 0.2.0 Feb 12, 2025

#2087 in Procedural macros


Used in tagid

MIT license

5KB

tagid-derive - Procedural macro for deriving Label in the tagid crate

The tagid-derive crate provides a procedural macro to derive the Label trait from the tagid crate. This simplifies the implementation of label-based type identification.

Installation

Add the following to your Cargo.toml:

[dependencies]
tagid = "0.2"
tagid-derive = "0.2"

Usage

Deriving Label

The Label trait provides a compile-time string label for a type. To derive it, simply annotate your struct or enum with #[derive(Label)]:

use tagid::Label;

#[derive(Label)]
struct Order;

assert_eq!(Order::label(), "Order");

Now, Order::label() will return a unique string label for the type:

This is useful for logging, serialization, or any scenario where type-based labeling is needed.

License

This project is licensed under the MIT License. See LICENSE for details.


lib.rs:

Provides the Label derive macro for implementing the tagid::Label trait.

Overview

The Label derive macro automatically implements the Label trait for a given type, defining an associated Labeler type and a default labeling function.

Example

use tagid::Label;

#[derive(Label)]
struct MyType;

The derived implementation generates:

impl tagid::Label for MyType {
    type Labeler = tagid::MakeLabeling<Self>;
    fn labeler() -> Self::Labeler { tagid::MakeLabeling::default() }
}

Dependencies

This macro relies on the syn, quote, and proc_macro crates to parse the input, generate Rust code, and interact with the procedural macro system.

Dependencies

~1.5MB
~37K SLoC