Skip to main content

impl_spec_display

Macro impl_spec_display 

Source
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’s Display is exactly name(). Use when there is no byte-bearing catch-all (or its byte need not be shown), e.g. a unit Reserved variant.
  • impl_spec_display!(Ty, Var1, Var2, …) — each named variant is a single-field tuple binding a byte; Display renders 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 to name().
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)");