#applications #framework #abscissa #cli-applications #service #error-logging

abscissa_core

支持命令行选项解析、配置、错误处理、日志记录和终端交互的应用程序微框架。此crate包含框架的核心功能

16 个版本

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.2.1 2019 年 7 月 27 日

#869配置

Download history 11470/week @ 2024-03-14 11574/week @ 2024-03-21 9199/week @ 2024-03-28 10664/week @ 2024-04-04 10229/week @ 2024-04-11 10306/week @ 2024-04-18 10547/week @ 2024-04-25 11259/week @ 2024-05-02 10529/week @ 2024-05-09 10367/week @ 2024-05-16 9799/week @ 2024-05-23 10104/week @ 2024-05-30 10863/week @ 2024-06-06 10390/week @ 2024-06-13 10086/week @ 2024-06-20 11600/week @ 2024-06-27

44,964 每月下载量
48 个crate中使用 (21 个直接使用)

Apache-2.0

100KB
2K SLoC

Abscissa

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

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

文档

功能

  • 命令行选项解析:基于 [clap] 的简单声明性选项解析器。Abcissa 中的选项解析器包含许多改进,提供了更好的用户体验和与框架其他部分的更紧密集成(例如,使用命令行选项覆盖配置设置)。
  • 组件:Abcissa 使用类似 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:加密且去重的备份

包结构

Abscissa目前由三个包组成

支持的最小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.mdCODE_OF_CONDUCT.md 文件。

依赖关系

~4–15MB
~175K SLoC