2 releases

0.1.1 Aug 15, 2021
0.1.0 Aug 9, 2021

#657 in Procedural macros

MIT license

890 lines

Strongly Typed ID types macro

A macro to simplify usage of srongly type ID types instead of plain String, u64 or Guid in Rust codebases.

use stidgen::{Id, id};

pub struct UserId(String);

#[id(NoDefaults, Format, Debug)]
pub struct UserId(u64);

While the derive macro can already be used to achieve most of what this macro proposes using it has the following advantages:

  • It's simplier to use for well known types, simply add #[id] to your struct
  • The defaults provide a lot of blanket implementations that might be missed when doing it manually
  • Some features provided don't have corresponding derive macros (AsBytes, AsRef, Borrow)
  • All trivial functions are marked inline


Default types

For unknown types all features are disabled by default but some types like String have smart defaults.

#[id(Clone, Hash, PartialEq, Eq, PartialOrd, Ord, Display, ToString, Debug, AsBytes, ...)]
pub struct Id(String);


~20K SLoC