extern crate self as kaptan_err_reportable; use kaptan_err_reportable_macros::KaptanError; #[derive(Clone, Copy)] pub struct ErrorId(u16); impl ErrorId { pub const fn new(id: u16) -> Self { Self(id) } pub const fn get(self) -> u16 { self.0 } } pub trait ReportableError { fn error_id(&self) -> ErrorId; } #[derive(Debug, KaptanError)] enum Generic<'a, T> where T: Copy, { #[kaptan_error(id = 65201)] Unit, #[kaptan_error(id = 65202)] Tuple(T, u8), #[kaptan_error(id = 65203)] Named { label: &'a str }, } fn main() { fn assert_error() {} assert_error::>(); assert_eq!(Generic::::Unit.error_id().get(), 65201); assert_eq!(Generic::Tuple(1_u8, 2).error_id().get(), 65202); let named: Generic<'_, u8> = Generic::Named { label: "test" }; assert_eq!(named.error_id().get(), 65203); assert_eq!(named.to_string(), "65203"); }