macro_rules! impl_spec_display {
($ty:ty) => { ... };
($ty:ty, $($resv:ident),+ $(,)?) => { ... };
}Expand description
Generate a core::fmt::Display impl for a spec/field enum that delegates
to an inherent fn name(&self) -> &'static str.
This is the project-wide convention for every public spec/field enum across
the dvb-* crates (see issue #204): name() is the hand-written,
zero-alloc static spec token (lossy on the reserved/unknown arm, which
returns "reserved"), and Display is the lossless, composable view that
delegates to it. The labels themselves live in name() in source — never in
this macro — so they sit next to the variant docs and stay greppable. This
macro carries no labels; it only removes the otherwise-identical Display
boilerplate and keeps the two in lockstep.
§Forms
impl_spec_display!(Ty)— every variant’sDisplayis exactlyname(). Use when there is no byte-bearing catch-all (or its byte need not be shown), e.g. a unitReservedvariant.impl_spec_display!(Ty, Var1, Var2, …)— each named variant is a single-field tuple binding a byte;Displayrenders it as"{name}(0x{:02X})"so the value is preserved (e.g.Reserved(0x1A)→reserved(0x1A),UserDefined(0x1A)→user defined(0x1A)). All other variants delegate toname().
pub enum Mode { Normal, HighEfficiency, Reserved(u8) }
impl Mode {
pub fn name(&self) -> &'static str {
match self {
Self::Normal => "normal",
Self::HighEfficiency => "high efficiency",
Self::Reserved(_) => "reserved",
}
}
}
dvb_common::impl_spec_display!(Mode, Reserved);
assert_eq!(Mode::Normal.to_string(), "normal");
assert_eq!(Mode::Reserved(0x1A).to_string(), "reserved(0x1A)");