[−][src]Crate type_layout
type-layout is a type layout debugging aid, providing a #[derive]
able trait
that reports:
- The type's name, size, and minimum alignment
- Each field's name, type, offset, and size
- Padding due to alignment requirements
type-layout currently only functions on structs with named fields. This is a temporary limitation.
Examples
The layout of types is only defined if they're #[repr(C)]
. This crate works on
non-#[repr(C)]
types, but their layout is unpredictable.
use type_layout::TypeLayout; #[derive(TypeLayout)] #[repr(C)] struct Foo { a: u8, b: u32, } println!("{}", Foo::type_layout()); // prints: // Foo (size 8, alignment 4) // | Offset | Name | Size | // | ------ | --------- | ---- | // | 0 | a | 1 | // | 1 | [padding] | 3 | // | 4 | b | 4 |
Over-aligned types have trailing padding, which can be a source of bugs in some FFI scenarios:
use type_layout::TypeLayout; #[derive(TypeLayout)] #[repr(C, align(128))] struct OverAligned { value: u8, } println!("{}", OverAligned::type_layout()); // prints: // OverAligned (size 128, alignment 128) // | Offset | Name | Size | // | ------ | --------- | ---- | // | 0 | value | 1 | // | 1 | [padding] | 127 |
Minimum Supported Rust Version (MSRV)
type-layout supports Rust 1.34.1 and newer. Until type-layout reaches 1.0, changes to the MSRV will require major version bumps. After 1.0, MSRV changes will only require minor version bumps, but will need significant justification.
Structs
TypeLayoutInfo |
Enums
Field |
Traits
TypeLayout |
Derive Macros
TypeLayout |