size-of 0.1.5

A crate for measuring the total memory usage of an object
Documentation
use core::mem::size_of;
use size_of::{SizeOf, TotalSize};
#[cfg(not(feature = "derive"))]
use size_of_derive::SizeOf;

#[derive(SizeOf)]
struct Zst;

#[derive(SizeOf)]
struct TupleStruct(usize, usize, bool, #[size_of(skip)] Vec<u8>);

#[derive(SizeOf)]
struct NestedTupleStruct(usize, usize, bool, Vec<u8>);

#[derive(SizeOf)]
struct BracketStruct {
    foo: usize,
    bar: usize,
    tuple: NestedTupleStruct,
    #[size_of(skip)]
    nothing: Vec<u8>,
}

fn main() {
    assert_eq!(Zst.size_of(), TotalSize::zero());

    let tuple = TupleStruct(10, 10, false, Vec::with_capacity(200));
    assert_eq!(tuple.size_of(), TotalSize::total(size_of::<TupleStruct>()));

    let bracket = BracketStruct {
        foo: 10,
        bar: 200,
        tuple: NestedTupleStruct(10, 10, false, Vec::with_capacity(200)),
        nothing: Vec::with_capacity(1000),
    };
    assert_eq!(
        bracket.size_of(),
        TotalSize::new(size_of::<BracketStruct>() + 200, 200, 0, 1),
    );
}