#struct #sizeof #32-byte

macro pakr-assert-size

Compile-time checks of the size of structures

1 stable release

1.0.1 Dec 5, 2021

#250 in FFI

BSD-2-Clause

7KB

Examples

Success (real size matches expected):

use pakr_assert_size::*;

#[repr(C, packed)]
#[assert_size(16)]
struct A {
    field1: u64,
    field2: u64,
}

#[assert_size(24)]
#[repr(C, packed)]
struct B {
    field1: u64,
    field2: u64,
    field3: u64,
}

Failure (real size is 24 bytes, expected is 32 bytes):

use pakr_assert_size::*;

#[assert_size(32)]
#[repr(C, packed)]
struct C {
    field1: u64,
    field2: u64,
    field3: u64,
}

Examples assert_size_fits

Success (real size fits in expected size):

use pakr_assert_size::*;

// Exact match
#[repr(C, packed)]
#[assert_size_fits(16)]
struct A {
    field1: u64,
    field2: u64,
}

// Fits in match
#[assert_size_fits(32)]
#[repr(C, packed)]
struct B {
    field1: u64,
    field2: u64,
    field3: u64,
}

Failure (real size is 24 bytes, exceeding maximum of 16 bytes):

use pakr_assert_size::*;

#[assert_size_fits(16)]
#[repr(C, packed)]
struct C {
    field1: u64,
    field2: u64,
    field3: u64,
}

Dependencies

~1.5MB
~35K SLoC