前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Rust日报】如何编写一个既是 bin 又是 lib 的项目

【Rust日报】如何编写一个既是 bin 又是 lib 的项目

作者头像
MikeLoveRust
发布2024-04-15 14:00:56
1110
发布2024-04-15 14:00:56
举报

如何编写一个既是 bin 又是 lib 的项目

这篇文章讨论了 Rust 项目的一个技巧,项目内同时包含 lib.rs 和 main.rs 两个文件,从而使得一个包既可以是库(lib) 又可以是二进制文件 (bin)。

为解决这个问题,文章介绍了可以通过Cargo的 optional dependencies 和 features 来尝试做依赖分离,但在实践中这种方法并不能如预期工作。然后进一步讨论了 default features 相关的问题,但它们可能会影响库的用户体验。

作者最终得出的结论是,虽然有多种方式能够通过修改 Cargo 配置来解决这些问题,但最终最合适的做法是创建两个独立的包,一个用于库,另一个用于二进制文件,这样可以为两者设置不同的特性和依赖。文章指出 Cargo 团队意识到这个问题,并且有一些提案正在准备中,不过作者建议,如果不是为了玩新花样,最好还是创建两个包。

ReadMore: https://blog.axo.dev/2024/03/its-a-lib-and-a-bin

Kameo: 基于 Tokio 构建的异步 Actor

使用宏的方式(也有不用宏的方式)定义一个 actor

代码语言:javascript
复制
// Define the actor state
#[derive(Actor)]
struct Counter {
    count: i64,
}

// Define messages
#[actor]
impl Counter {
    #[message]
    fn inc(&mut self, amount: u32) -> Result<i64, Infallible> {
        self.count += amount as i64;
        Ok(self.count)
    }
}

执行方式

代码语言:javascript
复制
use kameo::{Spawn, ActorRef};

let counter_ref: ActorRef<Counter> = Counter { count: 0 }.spawn();

let count = counter_ref.send(Inc(42)).await?;
println!("Count is {count}");

ReadMore: https://github.com/tqwewe/kameo

proxyfor 一个用于监控 HTTP、HTTPS 和 WebSocket 流量的轻量级代理

  • 支持正向代理
  • 支持反向代理
  • 支持过滤
  • 支持 HTTP/HTTPS/WS/WSS 协议
  • 集成网络界面
  • 集成证书安装 Web 应用程序
  • 以 Markdown、cURL 或 HAR 格式导出

ReadMore: https://github.com/sigoden/proxyfor

From 日报小组 Koalr

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-06,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Rust语言学习交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何编写一个既是 bin 又是 lib 的项目
  • Kameo: 基于 Tokio 构建的异步 Actor
  • proxyfor 一个用于监控 HTTP、HTTPS 和 WebSocket 流量的轻量级代理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com