10个版本

0.0.10 2023年12月29日
0.0.9 2023年12月23日
0.0.7 2023年1月7日
0.0.1 2022年12月30日

#640 in 解析器实现

每月50次下载

Apache-2.0 OR MIT

135KB
1K SLoC

Common (CMN) logo

Mini 函数

一个性能极高的实用和包装函数Rust库

Mini Functions

Made With Love Crates.io Lib.rs Docs.rs License Codecov

divider

网站文档报告错误请求功能贡献指南

概述

Mini Functions 是一个针对Rust设计的性能极高的实用和包装函数库,注重优化和效率。通过提供便捷的包装函数,我们的库旨在提供高级接口以完成常见任务,同时在底层利用Rust的性能优势。这些实用函数是任何Rust开发者的基本工具集,而库的设计抽象允许轻松集成到各种项目和应用程序中。

这些实用函数是任何Rust开发者的基本工具集,库的设计抽象允许轻松集成到各种项目和应用程序中。

目录

特性

  • 用Rust构建 — 一种适用于构建高性能、可靠和安全的系统的现代编程语言。
  • 高级实用函数 — 一组用于常见任务(如字符串操作、文件操作和数据解析)的高级抽象函数的集合。
  • 包装函数,便于访问 — 提供更便捷的接口来访问和使用底层Rust库或API的包装函数。
  • 优化和性能工具 — 用于优化和提升Rust代码性能的工具。
  • 多平台支持 — 支持包括桌面、移动和Web在内的多种平台。
  • 全面文档和示例 — 提供文档和示例,帮助开发者有效理解和使用库。
  • 定期维护和更新 — 定期更新和维护,确保库保持最新和可靠。

功能

Mini Functions 是一个为Rust提供的函数库,提供了一套用于处理Rust应用程序各个方面的工具。该 mini-functions 库包含以下 非详尽 函数

函数 描述
声明 ⧉ 声明函数 用于检索和操作关于声明的信息。这些函数用于在JSON Web Tokens (JWT) 和 JSON Web Signatures (JWS) 中创建和管理声明。
常用 ⧉ 常用函数 用于检索和操作关于常见数据类型的信息。
日期 ⧉ 日期和时间函数 用于检索和操作关于日期和时间的信息。
错误 ⧉ 错误函数 用于检索和操作关于错误的信息。
散列 ⧉ 散列函数 用于检索和操作关于散列的信息。
日志 ⧉ 日志函数 用于检索和操作关于日志的信息。
JWT ⧉ JOT函数 用于检索和操作关于JSON Object Tokens (JOT) 的信息。
MD5 ⧉ MD5函数 用于检索和操作关于MD5的信息。
二维码 ⧉ 二维码函数 用于检索和操作关于二维码的信息。
随机 ⧉ 随机函数 用于检索和操作关于随机数据的信息。

有关完整API详情,请参阅文档

divider

入门指南

使用 mini-functions 仅需几分钟即可开始使用。

需求

目前最低支持的Rust工具链版本是Rust 1.71.1 或更高版本(稳定版)。

安装

要安装 mini-functions,您需要在您的机器上安装Rust工具链。您可以通过访问Rust网站上的说明来安装Rust工具链。

安装Rust工具链后,您可以使用以下命令安装 mini-functions

cargo install mini-functions

Divider

使用

要在项目中使用 mini-functions 库,请将以下内容添加到您的 Cargo.toml 文件中

[dependencies]
mini-functions = "0.0.10"

将以下内容添加到您的 main.rs 文件中

extern crate mini_functions;
use mini_functions::*;

然后您可以在应用程序代码中使用这些函数。

divider

示例

mini-functions 库附带一组示例,展示了如何使用库。您可以在 examples 目录中找到这些示例。

要运行示例,请使用以下命令

cargo run --example <example-name>

divider

示例 1:处理JWT声明

mini_functions crate 提供了一个用于处理JWT声明的Claims结构体。

它包含以下函数

  • 使用 set_claim 设置声明以添加声明。
  • 使用 get_claim 获取声明以检索声明值。
  • 使用 remove_claim 移除声明。

以下是一个完整示例

let mut claims = Claims::new();

claims.set_claim("iss", "https://example.com");
claims.set_claim("admin", "true");

let admin = claims.get_claim("admin").unwrap();

claims.remove_claim("admin");

这允许方便地设置、检索和删除JWT声明。

要运行JWT Claims示例,请使用以下命令

cargo run --example example_claims

divider

示例 2:处理数学常数

mini_functions 库通过 Constants 结构体和 cmn_constants 宏提供对常用数学常数的访问。

它包含以下函数

  • Constants::new() - 创建一个新的 Constants 实例
  • constants() - 获取常数的完整列表
  • constant(name) - 通过名称查找常数
  • cmn_constants! - 将常数导入作用域

以下是一个完整示例

use cmn::{constants::{Constant, ConstantValue}, cmn_constants};

let c = Constants::new();
let euler = c.constant("EULER").unwrap();

cmn_constants! {
    PI = cmn::constants::PI,
}

println!("Euler's constant: {euler}"); 
println!("Pi: {PI}");

这允许方便地访问数学常数。

运行 constants 示例

cargo run --example example_constants

divider

示例 3:处理日期和时间

mini_functions 库提供了一个 DateTime 结构体,用于处理日期和时间。

它包含以下函数

  • DateTime::now - 获取当前日期/时间
  • DateTime::new - 创建一个具有默认(UTC)时区的 DateTime
  • DateTime::new_with_tz - 创建一个具有自定义时区的 DateTime
  • is_valid_day - 检查日期值是否有效
  • next_day/previous_day - 获取下一个/上一个日期
  • from_str - 解析日期/时间字符串
  • relative_delta - 将 delta 应用到 DateTime

以下是一个示例

let now = DateTime::now();

let tomorrow = now + chrono::Duration::days(1);
let yesterday = now - chrono::Duration::days(1);

println!("Today: {now}");
println!("Tomorrow: {tomorrow}"); 
println!("Yesterday: {yesterday}");

这允许方便地处理日期和时间。

运行日期/时间示例

cargo run --example example_date

divider

示例 4:错误处理

mini_functions 库通过 ErrorType 枚举提供错误处理功能。

它包含以下函数

  • ErrorType::new - 创建新的错误类型
  • new_subtype - 创建错误子类型

以下是一个示例

use mini_functions::errors::common::ErrorType;

let error = ErrorType::new("illegal_argument");
let sub_error = error.new_subtype("invalid_value");

println!("Main error: {error:?}");
println!("Sub-error: {sub_error:?}");

这允许使用自定义类型和子类型进行简单的错误处理。

运行错误示例

cargo run --example example_errors

divider

示例 5:密码散列

mini_functions 库通过 Hash 结构体提供密码哈希和验证函数。

它包含以下函数

  • Hash::new_{algo} - 为密码生成哈希
  • set_password - 更新哈希的密码
  • verify - 验证密码与哈希是否匹配
  • to_string - 将哈希转换为字符串

以下是一个示例

use mini_functions::hash::Hash;

let hash = Hash::new_argon2i("mypassword");
let is_valid = hash.verify("mypassword");

let updated_hash = hash.set_password("newpassword");
let new_is_valid = updated_hash.verify("newpassword");

这允许方便地生成和验证密码哈希。

运行密码哈希示例

cargo run --example example_hash

divider

示例 7:日志记录

mini_functions 库通过 Log 结构体提供应用程序日志功能。

它包含如下函数:

  • Log::new - 创建一个新的日志条目
  • LogFormat - 支持的日志格式

以下是一个以不同格式记录事件的示例

use mini_functions::logs::{Log, LogFormat, LogLevel};

let log_json = Log::new(
    "message-id", 
    "2023-01-01T12:00:00Z",
    LogLevel::Info,
    "AppEvent",
    "User logged in",
    LogFormat::JSON
);

let log_clf = Log::new(
    "message-id",
    "2023-01-01T12:00:00Z",
    LogLevel::Info,
    "AuthEvent",
    "User login successful",
    LogFormat::CLF
);

这允许以各种文本和 JSON 格式进行灵活的日志记录。

运行日志示例

cargo run --example example_logs

divider

示例 8:MD5散列

mini_functions 库通过 MD5 结构体提供 MD5 哈希生成功能。

它包含如下函数:

  • MD5::hexdigest - 为输入生成 MD5 哈希
  • MD5::new - 创建 MD5 哈希器实例
  • update - 使用新的输入更新哈希器
  • finalize - 获取最终哈希

以下是一个哈希不同输入源的示例

use mini_functions::md5::MD5;

let digest = MD5::hexdigest("input string");

let mut hasher = MD5::new();
hasher.update(&[1, 2, 3]);
let hash = hasher.finalize();

这允许灵活地哈希字符串、字节数组、文件。

运行 MD5 示例

cargo run --example example_md5

divider

示例 9:QR码

《mini_functions》crate 通过 QRCode 结构体提供 QR 码生成和操作功能。

它包含如下函数:

  • QRCode::from_string - 从文本生成 QR 码
  • to_png - 转换为 PNG 图像
  • colorize - 为 QR 码着色
  • resize - 调整图像大小

并提供如下的宏

  • qr_code_to! - QR 码生成宏

以下是一个示例

use mini_functions::qr;

let qr_code = qr::QRCode::from_string("https://example.com");
let img = qr_code.to_png(512);

qr::save_png(&img, "qr.png");

这允许方便地创建、操作和保存 QR 码。

运行 QR 码示例

cargo run --example example_qr

divider

示例 10:随机数生成

《mini_functions》crate 通过 Random 结构体和相关函数提供随机数生成功能。

它包含如下函数:

  • Random::new - 创建随机数生成器
  • bool - 随机布尔值
  • int - 随机整数
  • float - 随机浮点数
  • bytes - 随机字节向量

并提供如下的宏

  • rand_int! - 范围内的随机整数
  • rand_bool! - 概率下的随机布尔值

以下是一个示例

use mini_functions::random::{Random, rand_int};

let mut rng = Random::new();

let rand_num = rand_int!(rng, 0, 10);
let rand_bool = rand_bool!(rng, 0.5);

这允许方便地生成随机数。

运行随机数示例

cargo run --example example_random

divider

平台支持

《mini-functions》在以下平台上得到支持并进行了测试

一级平台

操作系统 目标 描述
Linux aarch64-unknown-linux-gnu ARM 架构的 64 位 Linux 系统
Windows i686-pc-windows-gnu 使用 GNU 工具链的 32 位 Windows 系统
Windows i686-pc-windows-msvc 使用 Microsoft Visual C 工具链的 32 位 Windows 系统
Linux i686-unknown-linux-gnu 32 位 Linux 系统(内核 3.2+, glibc 2.17+)
macOS x86_64-apple-darwin 64 位 macOS 系统(10.7 狮子或更高版本)
Windows x86_64-pc-windows-gnu 使用 GNU 工具链的 64 位 Windows 系统
Windows x86_64-pc-windows-msvc 使用 Microsoft Visual C 工具链的 64 位 Windows 系统
Linux x86_64-unknown-linux-gnu 64 位 Linux 系统(内核 2.6.32+, glibc 2.11+)

二级平台

操作系统 目标 描述
Linux aarch64-apple-darwin Apple Silicon 上的 64 位 macOS
Windows aarch64-pc-windows-msvc 使用 Microsoft Visual C 工具链的 ARM 架构 64 位 Windows 系统
Linux aarch64-unknown-linux-musl 使用 musl libc 的 ARM 架构 64 位 Linux 系统
Linux arm-unknown-linux-gnueabi ARMv6 Linux 系统(内核 3.2,glibc 2.17)
Linux arm-unknown-linux-gnueabihf ARMv7 Linux 系统,硬浮点(内核 3.2,glibc 2.17)
Linux armv7-unknown-linux-gnueabihf ARMv7 Linux 系统,硬浮点(内核 3.2,glibc 2.17)
Linux powerpc-unknown-linux-gnu PowerPC Linux 系统(内核 3.2,glibc 2.17)
Linux powerpc64-unknown-linux-gnu PowerPC64 Linux 系统(内核 3.2,glibc 2.17)
Linux powerpc64le-unknown-linux-gnu PowerPC64le Linux 系统(内核 3.2,glibc 2.17)
Linux riscv64gc-unknown-linux-gnu RISC-V Linux 系统(内核 3.2,glibc 2.17)
Linux s390x-unknown-linux-gnu s390x Linux 系统(内核 3.2,glibc 2.17)
Linux x86_64-unknown-freebsd x86-64 架构上的 64 位 FreeBSD 系统
Linux x86_64-unknown-linux-musl 64 位 Linux 系统(内核 2.6.32+, musl libc)

GitHub Actions ⧉ 展示了在哪些平台上运行了《mini-functions》库的测试。

divider

文档

信息:请访问我们的 网站 ⧉ 获取更多信息。您可以在 docs.rs ⧉lib.rs ⧉crates.io ⧉ 上找到我们的文档。

语义版本控制策略

为了使发布周期透明,并努力保持向后兼容性,mini-functions遵循语义版本控制⧉

divider

许可证

该项目受Apache许可证2.0版和MIT许可证的条款约束。

divider

贡献

我们欢迎所有希望贡献的人。请参阅贡献说明⧉以获取更多信息。

对该项目的任何形式(问题、拉取请求等)的贡献必须遵守Rust 的行为准则⧉

除非您明确说明,否则根据Apache-2.0许可证定义的,您提交给作品以供包含的任何贡献,将按照上述方式双许可,不附加任何额外条款或条件。

divider

致谢

感谢所有mini-functions⧉的杰出贡献者,感谢他们的帮助和支持。

特别感谢Rust Reddit⧉社区为如何改进该项目提供了许多有用的建议。

依赖项

~26–37MB
~473K SLoC