#repr #traits #derive

repr-trait

用于表示 Rust repr 的特质

1 个稳定版本

1.0.0 2021年1月1日

1439Rust 模式

MIT 许可证

6KB
75 代码行

repr-trait

用于表示 Rust repr 的特质

如果泛型参数需要特定的 repr,可以使用此crate中的特质来确保它具有所需的 repr

例如,如果你有一个需要特定 reprunsafe 函数,你可以使用这些特质来创建一个围绕它的安全包装。

use repr_trait::Packed;

// Safety: Only safe to call when T has #[repr(packed)]
unsafe fn safe_when_packed<T>(_param: T) {
    unimplemented!()
}

fn safe_wrapper<T: Packed>(param: T) {
    // Safety: Safe because T is guaranteed to be #[repr(packed)]
    unsafe {
        safe_when_packed(param)
    }
}

使用 derive 宏实现此crate中的特质很简单。为每个包含的特质都有一个 derive 宏。

#[derive(Packed, Default)]
#[repr(packed)]
struct PackedData(u32, u8);

safe_wrapper(PackedData(123, 45));

如果没有指定适当的 repr,derive 宏将拒绝编译。

#[derive(Packed)]
struct NotPacked(u32, u8);

结构

此仓库包含两个crate:repr-trait 包含特质并导出 derive 宏。它是应该普遍使用的唯一特质。repr-trait-derive 包含 derive 宏的实现。它是实现细节,通常不应直接依赖。

依赖项

~1.5MB
~34K SLoC