#newtype #class #value

rvs_derive

Rust 中值类辅助宏的实现

11 个版本

0.3.2 2022 年 12 月 11 日
0.3.1 2022 年 12 月 11 日
0.3.0 2021 年 11 月 4 日
0.2.3 2020 年 6 月 19 日
0.1.1 2020 年 4 月 30 日

59#newtype

Download history 6101/week @ 2024-03-30 5730/week @ 2024-04-06 7725/week @ 2024-04-13 7466/week @ 2024-04-20 5916/week @ 2024-04-27 5910/week @ 2024-05-04 6172/week @ 2024-05-11 6497/week @ 2024-05-18 6212/week @ 2024-05-25 5955/week @ 2024-06-01 8217/week @ 2024-06-08 8371/week @ 2024-06-15 8828/week @ 2024-06-22 8371/week @ 2024-06-29 9136/week @ 2024-07-06 6454/week @ 2024-07-13

34,163 每月下载量
20 个 crate 中使用 (通过 rvstruct)

Apache-2.0

9KB
137 行(不包括注释)

Cargo

Rust 的值结构 derive 宏,支持 newtype 模式

动机

一个非常简单的 derive 宏,用于支持强类型系统和 newtype 模式。Newtypes 是一种零成本的抽象:它们为现有类型引入了一个新的、独特的名称,在两种类型之间转换时没有运行时开销。这与 Haskell 的 newtype 关键字 类似。

例如

#[derive(ValueStruct)]
struct UserId(String);

let uid : UserId = "my-uid".into();

宏概述

ValueStruct 会为您自动生成

  • std::convert::From<> 实例,以帮助您创建结构体。
  • ValueStruct::value() 函数实现,以直接访问您的字段而无需使用 .0。

对于不同类型的字段,有不同的行为

  • 对于 std::string::String,它生成 From<String>From<&String>From<&str>

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
rvstruct = "0.3"
// Import it
use rvstruct::ValueStruct;

// And use it on your structs
#[derive(ValueStruct)]
struct UserId(String);

许可证

Apache 软件许可证 (ASL)

作者

Abdulla Abdurakhmanov

依赖项

~1.5MB
~35K SLoC