Skip to main content

ZeroablePixel

Derive Macro ZeroablePixel 

Source
#[derive(ZeroablePixel)]
{
    // Attributes available to this derive:
    #[zero]
}
Expand description

Derive macro for ZeroablePixel trait.

Generates zero() by calling ZeroablePixel::zero() on each field’s type.

§Requirements

  • Must be a struct (not enum or union)
  • Must have at least one field
  • By default, all field types must implement ZeroablePixel

§Per-Field Control with #[zero(...)]

You can override the zero-initialization strategy for individual fields:

  • No attribute (default): uses <T as ZeroablePixel>::zero()
  • #[zero(default)]: uses <T as Default>::default()
  • #[zero(<expr>)]: uses the given expression verbatim

§Example

#[derive(Clone, Copy, PlainPixel, ZeroablePixel)]
#[repr(C)]
pub struct Rgb8 {
    pub r: Saturating<u8>,
    pub g: Saturating<u8>,
    pub b: Saturating<u8>,
}

§Example with #[zero(...)] attributes

#[derive(Clone, Copy, ZeroablePixel)]
#[repr(C)]
pub struct PixelWithMeta {
    pub r: u8,
    pub g: u8,
    pub b: u8,
    #[zero(default)]
    pub metadata: SomeDefaultType,
    #[zero(MyTag::new(42))]
    pub tag: MyTag,
}

§Generated Implementation

impl ZeroablePixel for Rgb8 {
    fn zero() -> Self {
        Rgb8 {
            r: <Saturating<u8> as ZeroablePixel>::zero(),
            g: <Saturating<u8> as ZeroablePixel>::zero(),
            b: <Saturating<u8> as ZeroablePixel>::zero(),
        }
    }
}