#applications #framework #cli-applications #error-logging #service #arguments-parser

bin+lib abscissa

支持命令行选项解析、配置、错误处理、日志记录和终端交互的应用程序微框架。本包包含一个 CLI 工具,用于生成新的应用程序

26 个版本

0.7.0 2022 年 12 月 14 日
0.6.0 2022 年 2 月 11 日
0.6.0-rc.02022 年 1 月 4 日
0.6.0-pre.22021 年 10 月 6 日
0.0.6 2018 年 10 月 12 日

#111 in 配置


用于 16 crates

Apache-2.0

155KB
3K SLoC

Rust 2.5K SLoC // 0.0% comments Handlebars 475 SLoC

Abscissa

Crate Docs Apache 2.0 Licensed MSRV Safety Dance Build Status Gitter Chat

Abscissa 是一个用于构建 Rust 应用程序(CLI 工具或网络/网页服务)的微框架,旨在提供大量功能,同时具有 最少的依赖,并且对 安全性 有强烈的关注。

文档

特性

  • 命令行选项解析:基于 [clap] 的简单声明式选项解析器。Abcissa 中的选项解析器包含许多改进,提供了更好的用户体验,并与框架的其他部分(例如,使用命令行选项覆盖配置设置)更紧密地集成。
  • 组件:Abscissa 使用组件架构(类似于 ECS)进行扩展/组合,具有简约实现,但仍提供诸如计算依赖顺序和提供应用程序生命周期钩子等特性。新生成的应用程序默认使用两个组件:terminallogging
  • 配置:简单的 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.mdCODE_OF_CONDUCT.md文件。

依赖项

~6.5–8.5MB
~170K SLoC