0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用Rust过程宏实现derive-with库呢?

jf_wN0SrCdH 来源:Rust语言中文社区 2024-01-25 09:51 次阅读

作用

通过派生宏 #[derive(With)] 给结构体字段生成 with_xxx 方法,通过链式调用 with_xxx 方法来构造结构体。

使用方法

1.给 named struct 每个字段生成 with_xxx 方法

#[derive(With)]
pubstructFoo{
puba:i32,
pubb:String,
}

宏生成代码

implFoo{
pubfnwith_a(mutself,a:implInto)->Self{
self.a=a.into();
self
}
pubfnwith_b(mutself,b:implInto)->Self{
self.b=b.into();
self
}
}

2.给 tuple struct 每个字段生成 with_xxx 方法

#[derive(With)]
pubstructBar(i32,String);

宏生成代码

implBar{
pubfnwith_0(mutself,field_0:implInto)->Self{
self.0=field_0.into();
self
}
pubfnwith_1(mutself,field_1:implInto)->Self{
self.1=field_1.into();
self
}
}

3.通过字段名给 named struct 指定字段实现 with_xxx 方法

#[derive(With)]
#[with(a)]
pubstructFoo{
puba:i32,
pubb:String,
}

宏生成代码

implFoo{
pubfnwith_a(mutself,a:implInto)->Self{
self.a=a.into();
self
}
}

4.通过下标给 tuple struct 指定字段生成 with_xxx 方法

#[derive(With)]
#[with(1)]
pubstructBar(i32,String);

宏生成代码

implBar{
pubfnwith_1(mutself,field_1:implInto)->Self{
self.1=field_1.into();
self
}
}

也支持结构体中含有泛型、生命周期、引用等。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • rust语言
    +关注

    关注

    0

    文章

    58

    浏览量

    2958

原文标题:【大家的项目】利用 Rust 过程宏实现的 derive-with 库

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Rust 语言中的 RwLock内部实现原理

    中的 RwLock 的内部实现原理、常用接口的使用技巧和最佳实践。 RwLock 的内部实现原理 基本概念 RwLock 是一种读写分离的锁,允许多个线程同时读取共享数据,但只允许一个线程写入数据。通过这种方式,可以避免读写操作之间的竞争,从而提高并发性能。 在
    的头像 发表于 09-20 11:23 484次阅读

    只会用Python?教你在树莓派上开始使用Rust

    rust_gpiozero条板箱由Rahul Thakdoor撰写。虽然这不是访问GPIO引脚的唯一方法,但此板条箱的设计类似于Python GPIO零。与其手动下载板条,还可以将其名称粘贴在Cargo.toml中的依赖
    发表于 05-20 08:00

    如何利用文件来实现IWDG独立看门狗操作

    如何利用文件来实现IWDG独立看门狗操作?怎样去配置IWDG独立看门的相关参数
    发表于 09-17 06:28

    如何利用DSP实现一种低通滤波的设计

    如何利用DSP实现一种低通滤波的设计?有哪些设计步骤
    发表于 11-19 08:03

    怎样去使用Rust进行嵌入式编程

    使用Rust进行嵌入式编程Use Rust for embedded development篇首语:Rust的高性能、可靠性和生产力使其适合于嵌入式系统。在过去的几年里,Rust在程序
    发表于 12-22 07:20

    如何利用PyAudio实现pzh-py-speech的音频播放和录制功能

    pzh-py-speech的主要功能是什么?如何利用PyAudio实现pzh-py-speech的音频播放和录制功能
    发表于 12-23 09:45

    如何对gcc编译过程中生成的进行调试

    如何对gcc编译过程中生成的进行调试?有哪几种形式?如何对一个函数进行gprof方式的剖析
    发表于 12-24 07:53

    RUST在嵌入式开发中的应用是什么

    Rust是一种编程语言,它使用户能够构建可靠、高效的软件,尤其是用于嵌入式开发的软件。它的特点是:高性能:Rust具有惊人的速度和高内存利用率。可靠性:在编译过程中可以消除内存错误。生
    发表于 12-24 08:34

    如何去实现一种基于Rust的单向链表设计

    利用结构体 (struct) 定义成员变量num 表示当前结点值,next 指向下一个结点的指针。#[derive(Debug)]pub struct List { pub num: i32
    发表于 04-27 15:11

    如何利用C语言去调用rust静态

    感觉比较合适。但如果把主要工作切过来,感觉Rust目前又太荒芜了,而且上面的问题也同样存在。尝试了解到Rust可以编译成静态,于是动了只用Rust
    发表于 06-21 10:27

    Rust代码中加载静态时,出现错误 ` rust-lld: error: undefined symbol: malloc `怎么解决?

    “ [i]malloc ”、“ [i]exit ”。我验证了使用 ` [i]nm ` 命令。 问题是我打算使用 ffi 在 rust 中使用这个静态。当我尝试在我的 Rust 代码中加载静态
    发表于 06-09 08:44

    Derive 12V From 8V to 15V Inpu

    Derive 12V
    发表于 04-29 11:11 627次阅读
    <b class='flag-5'>Derive</b> 12V From 8V to 15V Inpu

    Rust 1.15 引入自定义derive特性有什么做用

    Rust核心团队发布了Rust 1.15稳定版,新增了备受期待的自定义derive特性,让代码生成工具(如Serde和Diesel)能最大效能地工作。
    发表于 05-17 18:05 0次下载
    <b class='flag-5'>Rust</b> 1.15 引入自定义<b class='flag-5'>derive</b>特性有什么做用

    rust-analyzer Rust编译器前端实现

    ./oschina_soft/rust-analyzer.zip
    发表于 05-19 09:23 2次下载
    <b class='flag-5'>rust</b>-analyzer <b class='flag-5'>Rust</b>编译器前端<b class='flag-5'>实现</b>

    如何用Rust过程宏魔法简化SQL函数呢?

    这是 RisingWave 中一个 SQL 函数的实现。只需短短几行代码,通过在 Rust 函数上加一行过程宏,我们就把它包装成了一个 SQL 函数。
    的头像 发表于 01-23 09:43 308次阅读
    如何用<b class='flag-5'>Rust</b><b class='flag-5'>过程</b>宏魔法简化SQL函数呢?