5 个不稳定版本
0.3.1 | 2024 年 5 月 18 日 |
---|---|
0.3.0 | 2024 年 3 月 21 日 |
0.2.1 | 2023 年 12 月 24 日 |
0.2.0 | 2023 年 12 月 10 日 |
0.1.0 | 2023 年 1 月 20 日 |
483 在 Rust 模式 中排名
每月下载量 70
98KB
2K SLoC
const-type-layout
是一个类型布局比较工具,提供可推导的 #[derive]
TypeLayout
特性,报告
- 类型的名称、大小和最小对齐方式
- 类型的结构,即结构体、联合体或枚举
- 每个字段的名称和偏移量
- 每个变体的名称和区分符
通过自动实现的 TypeGraphLayout
特性,还将深层类型布局以图的形式报告。
此软件包在 Lucien Greathouse 的原始运行时 type-layout 软件包的基础上进行了大量开发。
示例
类型的布局只有在它们被定义为 #[repr(C)]
时才定义。此软件包适用于非 #[repr(C)]
类型,但它们的布局是不可预测的。
use const_type_layout::TypeLayout;
#[derive(TypeLayout)]
#[repr(C)]
struct Foo {
a: u8,
b: u32,
}
assert_eq!(
format!("{:#?}", Foo::TYPE_LAYOUT),
r#"TypeLayoutInfo {
name: "mycrate::mymodule::Foo",
size: 8,
alignment: 4,
structure: Struct {
repr: "C",
fields: [
Field {
name: "a",
offset: Inhabited(
0,
),
ty: "u8",
},
Field {
name: "b",
offset: Inhabited(
4,
),
ty: "u32",
},
],
},
}"#
);
对齐方式过宽的类型具有尾部填充,这可能在某些 FFI 场景中成为错误的来源
use const_type_layout::TypeLayout;
#[derive(TypeLayout)]
#[repr(C, align(128))]
struct OverAligned {
value: u8,
}
assert_eq!(
format!("{:#?}", OverAligned::TYPE_LAYOUT),
r#"TypeLayoutInfo {
name: "mycrate::mymodule::OverAligned",
size: 128,
alignment: 128,
structure: Struct {
repr: "C,align(128)",
fields: [
Field {
name: "value",
offset: Inhabited(
0,
),
ty: "u8",
},
],
},
}"#
)
许可协议
以下任一许可协议下许可:
- Apache 许可协议,版本 2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确表示否则,根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献都应作为上述双重许可,不附加任何额外条款或条件。
依赖项
~175KB