macro_rules! assert_fields {
    ($t:ident::$v:ident: $($f:ident),+) => { ... };
    ($t:path: $($f:ident),+) => { ... };
Expand description

Asserts that the type has the given fields.


One common use case is when types have fields defined multiple times as a result of #[cfg]. This can be an issue when exposing a public API.

pub struct Ty {
    pub val1: u8,
    pub val1: usize,

    pub val2: u32,
    pub val2: usize,

// Always have `val2` regardless of OS
assert_fields!(Ty: val2);

This macro even works with enum variants:

enum Data {
    Val {
        id: i32,
        name: String,
        bytes: [u8; 128],
    Ptr(*const u8),

assert_fields!(Data::Val: id, bytes);

The following example fails to compile because Range does not have a field named middle:

use std::ops::Range;

assert_fields!(Range<u32>: middle);