< 返回版块

Koalr 发表于 2024-04-03 00:17

Tags:rust,日报

如何编写一个既是 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

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页