Introducing derive_aliases - a crate that allows you to define aliases for `#[derive]`, because I wasn't satisfied with any of the existing options

⚓ Rust    📅 2025-09-15    👤 surdeus    👁️ 2      

surdeus

Here is a little crate I've developed today because I wasn't satisfied with existing options for derive aliases

crate: derive_aliases
docs.rs: crates.io: Rust Package Registry
github: GitHub - nik-rev/derive-aliases: Very elegant #[derive] aliases for Rust 💖

Advantages it offers over the other options (alternatives are listed in README.md)

  • When you hover over aliases, you get documentation for them. I.e. what it expands to
  • Error messages are better, e.g. if you mispell an alias Copy as Cop you get a suggestion: "Did you mean: Copy". it also shows a list of all available aliases
  • These aliases are defined in a custom, very small DSL. This DSL is in a separate file. This means you can import derive aliases from other files, and share them across multiple crates
  • Arguably, syntax is more intuitive, I think ..Alias makes more sense than Alias!. In another derive alias crate, you had to write #[derive(...)] to define each alias. This is not needed here
  • If you have 2 aliases that share some derives, the derives will be merged. It won't be a compile error! This is really useful if you have some pre-requisite traits. For example, you might alias FastHash to zerocopy::ByteHash which will also derive IntoBytes and AsBytes, which are required. You might want an alias FastEq that derives zerocopy::ByteEq and those 2 pre-requisite traits. With other crates, you won't be able to do this. With my crate, you can have both of them at once and the derives will be merged!
  • At compile-time, I parse all the derive aliases into a Map<Derive Alias => List of derives it expands to>. This is done once across the compilation session. I really wanted the performance of my derive macro to be fast, because I'm using it hundreds+ times. hence I don't even pull any dependencies such as quote or syn. I manually parse TokenStream

1 post - 1 participant

Read full topic

🏷️ Rust_feed