Releases: greyblake/kinded
Releases · greyblake/kinded
Kinded v0.5.0 Release Notes
What is kinded?
Kinded is a Rust procedural macro that generates a companion "kind" enum with the same variants as your original enum but without the associated data.
New Features
skip_derive attribute
Opt out of default trait implementations when you need custom behavior or want to avoid conflicts with other derives.
use kinded::Kinded;
#[derive(Kinded)]
#[kinded(skip_derive(Display, FromStr))]
enum Status {
Active,
Inactive,
}
// Now you can implement Display and FromStr manuallyAvailable traits to skip: Display, FromStr, From, Clone, Copy, Debug, PartialEq, Eq.
attrs attribute for generated enum
Pass extra attributes to the generated kind enum, useful for integrating with serde and other derive macros.
use kinded::Kinded;
use serde::{Serialize, Deserialize};
#[derive(Kinded)]
#[kinded(attrs(derive(Serialize, Deserialize), serde(rename_all = "snake_case")))]
enum Beverage {
Coffee(String),
Tea { flavor: String },
Water,
}
// BeverageKind now has Serialize/Deserialize with snake_case namingPer-variant attrs attribute
Apply attributes to individual kind variants for fine-grained control.
use kinded::Kinded;
use serde::{Serialize, Deserialize};
#[derive(Kinded)]
#[kinded(attrs(derive(Serialize, Deserialize)))]
enum Priority {
#[kinded(attrs(serde(rename = "p0")))]
Critical,
#[kinded(attrs(serde(rename = "p1")))]
High,
Normal,
Low,
}const fn kind() method
The kind() method is now const fn, enabling use in const contexts.
use kinded::Kinded;
#[derive(Kinded)]
enum Direction {
North,
South,
East,
West,
}
const NORTH_KIND: DirectionKind = Direction::North.kind();
const fn is_vertical(dir: &Direction) -> bool {
matches!(dir.kind(), DirectionKind::North | DirectionKind::South)
}Upgrading
Update your Cargo.toml:
[dependencies]
kinded = "0.5"