26 个版本
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.0.6 | 2018 年 10 月 12 日 |
#111 in 配置
用于 16 crates
155KB
3K SLoC
Abscissa 是一个用于构建 Rust 应用程序(CLI 工具或网络/网页服务)的微框架,旨在提供大量功能,同时具有 最少的依赖,并且对 安全性 有强烈的关注。
特性
- 命令行选项解析:基于 [clap] 的简单声明式选项解析器。Abcissa 中的选项解析器包含许多改进,提供了更好的用户体验,并与框架的其他部分(例如,使用命令行选项覆盖配置设置)更紧密地集成。
- 组件:Abscissa 使用组件架构(类似于 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:加密且去重的备份
crate结构
Abcissa目前由三个crate组成
- abscissa:CLI应用程序和应用程序生成器 -
cargo install abscissa
- abscissa_core:主要框架库
- abscissa_derive:自定义derive支持 -
abscissa_core
的实现细节 - abscissa_tokio:在Abcissa应用程序中启动Tokio运行时的支持
最低支持的Rust版本
需要Rust 1.60或更高版本。
安装
要生成新的Abcissa应用程序,请安装abscissa
CLI工具
$ cargo install abscissa
创建新的Abcissa应用程序
以下命令将生成一个Abcissa应用程序骨架
$ cargo install abscissa
$ abscissa new my_cool_app
生成的应用程序是一个Cargo项目。以下文件特别值得关注
src/application.rs
:您的应用程序的Abcissa应用程序类型src/commands*
:应用程序入口点和子命令。请确保查看hello.rs
示例,了解如何创建子命令。src/config.rs
:应用程序配置src/error.rs
:错误类型
Abcissa应用程序作为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测试一对剪刀……带有态度。
测试框架更改
测试框架更改的主要方式是通过使用Abcissa内置的应用程序生成器生成应用程序,并对生成的应用程序运行测试(也包括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
的新Abcissa应用程序,该应用程序引用您的本地Abcissa副本。
之后,切换到新创建的应用目录并运行测试以确保一切仍然正常工作(测试,以及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版(“许可证”);除非适用法律要求或经书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证副本:
https://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或经书面同意,否则在许可证下分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证中规定的权限和限制的具体语言,请参阅许可证。
贡献
如果您有兴趣为这个存储库做出贡献,请确保首先阅读CONTRIBUTING.md和CODE_OF_CONDUCT.md文件。
依赖项
~6.5–8.5MB
~170K SLoC