A macro to simplify usage of srongly type ID types instead of plain
String, u64 or Guid in Rust codebases.
use stidgen::{Id, 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
Defaults/NoDefaults: Enable or disable defaults for known typesClone/NoClone: Enable or disable derivingstd::clone::CloneHash/NoHash: Enable or disable derivingstd::hash::HashPartialEq/NoPartialEq: Enable or disable derivingstd::cmp::PartialEqEq/NoEq: Enable or disable derivingstd::cmp::EqPartialOrd/NoPartialOrd: Enable or disable derivingstd::cmp::PartialOrdOrd/NoOrd: Enable or disable derivingstd::cmp::OrdDisplay/NoDisplay: Enable or disable derivingstd::fmt::Displayand adding ato_stringmethodDebug/NoDebug: Enable or disable derivingstd::fmt::DebugAsBytes/NoAsBytes: Enable or disable derivingstd::convert::AsRef<[u8]>and adding aas_bytesmethodBorrow/NoBorrow: Enable or disable derivingstd::borrow::BorrowAsRef/NoAsRef: Enable or disable derivingstd::convert::AsRef
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);