16 个版本
0.7.0 | 2022 年 12 月 14 日 |
---|---|
0.6.0 | 2022 年 2 月 11 日 |
0.6.0-rc.0 | 2022 年 1 月 4 日 |
0.6.0-pre.2 | 2021 年 10 月 6 日 |
0.2.1 | 2019 年 7 月 27 日 |
#869 在 配置
44,964 每月下载量
在 48 个crate中使用 (21 个直接使用)
100KB
2K SLoC
Abscissa 是一个用于构建 Rust 应用程序的微框架(无论是 CLI 工具还是网络/Web 服务),旨在提供大量功能,同时具有最少的依赖,并且对安全性非常关注。
功能
- 命令行选项解析:基于 [clap] 的简单声明性选项解析器。Abcissa 中的选项解析器包含许多改进,提供了更好的用户体验和与框架其他部分的更紧密集成(例如,使用命令行选项覆盖配置设置)。
- 组件:Abcissa 使用类似 ECS 的组件架构进行扩展/可组合性,具有最小化实现,同时仍提供诸如计算依赖顺序和提供应用程序生命周期钩子等功能。新创建的应用程序默认使用两个组件:
terminal
和logging
。 - 配置:简单的 TOML 配置解析到
serde
解析的配置类型,这些类型可以在运行时动态更新。 - 错误处理:具有通用错误类型的统一错误处理子系统。
- 日志记录:基于
log
提供应用程序级日志记录。 - 密钥管理:可选的
secrets
模块包含一个Secret
类型,该类型派生自 serde 的Deserialize
,可用于表示从配置文件或其他地方(例如从环境或网络请求加载的凭据)解析的密钥值。 - 终端交互:支持彩色终端输出(带有自动检测的色彩支持)。适用于像Cargo那样的状态消息,具有易于使用的宏。
使用Abscissa的项目
- Canister:用于“distroless”容器/微虚拟机的部署工具
- cargo-audit:审计Cargo项目以发现安全漏洞
- cargo-rpm:从Cargo项目构建RPM
- cosmon:用于Tendermint应用的观测性工具
- ibc-rs:区块链间通信(IBC)模块和中继器的Rust实现
- OpenLibra:开放平台,旨在促进金融包容性。并非由Facebook运营
- Synchronicity:提供BFT可重复性证明的分布式构建系统
- Tendermint KMS:用于Tendermint应用的密钥管理系统
- Zebra:Zcash节点的Rust实现
- Zerostash:加密且去重的备份
包结构
Abscissa目前由三个包组成
- abscissa:CLI应用和应用程序生成器 -
cargo install abscissa
- abscissa_core:主框架库
- abscissa_derive:自定义派生支持 -
abscissa_core
的实现细节 - abscissa_tokio:在Abscissa应用程序中启动Tokio运行时的支持
支持的最小Rust版本
需要Rust 1.60或更高版本。
安装
要生成一个新的Abscissa应用程序,请安装abscissa
CLI实用程序
$ cargo install abscissa
创建一个新的Abscissa应用程序
以下命令将生成一个Abscissa应用程序骨架
$ cargo install abscissa
$ abscissa new my_cool_app
生成的应用程序是一个Cargo项目。以下文件尤其值得关注
src/application.rs
:您的应用程序的Abscissa应用程序类型src/commands*
:应用程序入口点和子命令。请确保查看如何创建子命令的hello.rs
示例。src/config.rs
:应用程序配置src/error.rs
:错误类型
Abscissa应用程序作为Rust库实现,但在src/bin
子目录中有二进制入口点。这意味着您可以在新创建的应用程序中运行以下命令
$ cargo run -- hello world
这将调用您应用程序的hello
子命令(您可能希望在实际应用程序中将其重命名),将打印以下内容
Hello, world!
您还可以运行以下命令来打印基本帮助信息
$ cargo run -- --help
状态宏
// Print a Cargo-like justified status to STDOUT
status_ok!("Loaded", "app loaded successfully");
// Print an error message
status_err!("something bad happened");
// Print an indented attribute to STDOUT
status_attr_ok!("good", "yep");
// Print an error attribute to STDERR
status_attr_err!("error", "yep");
常见问题解答(FAQ)
Q1:为什么它叫“abscissa”?
A1:“abscissa”一词是Kryptos K2面板的关键。
Q2:“abscissa”这个名字很难记住!有什么建议吗?
A2:想象你正在用带态度的两把剪刀进行A-B测试。
测试框架更改
测试框架更改的主要方式是使用Abscissa内置的应用程序生成器生成应用程序,并对生成的应用程序运行测试(包括rustfmt和clippy)。
要生成测试应用程序并自动测试它,您可以简单地进行以下操作
$ cargo test
然而,在调试针对生成的应用程序的测试失败时,了解如何手动驱动应用程序生成和测试过程是有帮助的。以下是相关说明。
如果您已经运行
$ git clone https://github.com/iqlusioninc/abscissa/
...并且位于 abscissa
目录中,并且想测试您的更改,可以通过运行以下命令来生成应用程序
$ cargo run -- new /tmp/example_app --patch-crates-io='abscissa = { path = "$PWD" }'
这将生成一个位于 /tmp/example_app
的新 Abscissa 应用程序,该程序引用了您的本地 Abscissa 复制。
之后,切换到新生成的应用程序目录并运行测试以确保一切仍然正常工作(测试,包括 rustfmt 和 clippy,都是 CI 过程的一部分)
$ cd /tmp/example_app # or 'pushd /tmp/example_app' and 'popd' to return
$ cargo test
$ cargo fmt -- --check # generated app is expected to pass rustfmt
$ cargo clippy
行为准则
我们遵守 贡献者契约,并要求您也这样做。
有关更多信息,请参阅 CODE_OF_CONDUCT.md。
许可证
abscissa 软件包是在 Apache 许可证(版本 2.0)的条款下分发的。
版权所有 © 2018-2022 iqlusion
根据 Apache 许可证 2.0 版(“许可证”);除非根据适用法律或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证副本:
https://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言,请参阅许可证。
贡献
如果您有兴趣为此存储库做出贡献,请务必首先阅读 CONTRIBUTING.md 和 CODE_OF_CONDUCT.md 文件。
依赖关系
~4–15MB
~175K SLoC