aboutsummaryrefslogtreecommitdiff
path: root/rust/common/src/zeroable.rs
blob: fd056deb1f641fa1f825f5235f31b3df72f8cd0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// SPDX-License-Identifier: GPL-2.0-or-later

//! Defines a trait for structs that can be safely initialized with zero bytes.

/// Encapsulates the requirement that
/// `MaybeUninit::<Self>::zeroed().assume_init()` does not cause undefined
/// behavior.
///
/// # Safety
///
/// Do not add this trait to a type unless all-zeroes is a valid value for the
/// type.  In particular, raw pointers can be zero, but references and
/// `NonNull<T>` cannot.
pub unsafe trait Zeroable: Default {
    /// Return a value of Self whose memory representation consists of all
    /// zeroes, with the possible exclusion of padding bytes.
    const ZERO: Self = unsafe { ::core::mem::MaybeUninit::<Self>::zeroed().assume_init() };
}