#原始类型 #proc-macro #强类型化 #创建 #默认 #结构体 #派生

无 std 强烈类型化

用于创建强类型原始类型的 proc 宏

2 个不稳定版本

0.1.1 2024年4月16日
0.0.1 2024年4月5日

#1422 in Rust 模式

MIT/Apache

52KB
1.5K SLoC

#[strongly::typed]

用于创建强类型原始类型的 proc 宏。

[!警告] 开发中。请勿使用。更多详情即将推出。

用法

#[strongly::typed] 属性添加到您的新类型结构体中,将其转换为强类型原始类型。支持所有整数和浮点数,以及 boolchar

#[strongly::typed]
struct MyType(u8);

该属性还将添加所有九种可能的默认派生(CopyCloneDefault 等)并设置 #[repr(transparent)]

参数

  • convert:生成内类型和外类型之间的 From/Into 实现。同时添加所有内原始类型(除浮点数外)的 Borrow 实现。提供 const 辅助方法来访问内原始类型。如果没有此选项,则无法访问包装的原始类型(除了 mem::transmute 或通过 Display/FromStr 等)。
  • serde:生成到和从原始类型表示的 SerializeDeserialize 实现。
  • deref:生成 DerefDerefMut 实现。
#[strongly::typed(convert, serde)]
pub struct MyType(pub usize);

目的

此 crate 生成的类型旨在填补未类型化原始类型和专用新类型结构体之间的差距。它们旨在用作原始类型的直接替代品,同时提供与新类型结构体相同的隔离。

生成的类型实现了所有特性和提供了(几乎)所有包装原始类型的常量、函数和方法。它们是一个非常薄的层,将在编译期间消失。

注意事项

  • 由于 Step 特性不稳定,因此无法对强类型整数范围进行循环。相反,宏生成辅助方法以创建(强类型)迭代器。
  • 强类型 bool 不能直接用作 if 条件表达式,也不能直接用于 &&||(短路)操作,因为这些运算符无法实现。(待办事项:通过功能提供 Deref<Target=bool> 以方便使用。)
  • 文档注释大部分缺失,除了特性实现。 (待办事项:生成到原始文档注释的链接。)

箱子特性

  • 默认: std
  • std:目前没有任何操作。生成的代码都不需要 std

依赖关系

~275–720KB
~17K SLoC