如何编写一个既是 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
// 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)
}
}
执行方式
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
社区学习交流平台订阅:
评论区
写评论还没有评论