| Crates.io | yimi-rutool |
| lib.rs | yimi-rutool |
| version | 0.2.5 |
| created_at | 2025-09-12 17:16:46.222984+00 |
| updated_at | 2025-09-15 14:29:46.80974+00 |
| description | A comprehensive Rust utility library inspired by Hutool |
| homepage | |
| repository | https://github.com/ViewWay/yimi-rutool |
| max_upload_size | |
| id | 1835998 |
| size | 934,089 |
yimi-rutool 是一个受 Hutool 启发的综合性 Rust 工具库,为日常开发任务提供丰富的工具函数。
| 模块 | 状态 | 描述 | 功能特性 |
|---|---|---|---|
core |
✅ | 核心工具类 | 字符串处理、日期时间、类型转换、集合操作 |
crypto |
✅ | 加密解密 | 对称/非对称加密、摘要算法、数字签名 |
http |
✅ | HTTP客户端 | 同步/异步请求、连接池、SSL/TLS支持 |
json |
✅ | JSON处理 | 序列化/反序列化、JSON Path、流式处理 |
cache |
✅ | 缓存 | 内存缓存、持久化缓存、LRU算法 |
db |
✅ | 数据库操作 | SQL执行、连接池、事务管理 |
cron |
✅ | 定时任务 | Cron表达式解析、任务调度 |
extra |
✅ | 扩展工具 | 二维码生成、图片处理、压缩解压 |
jwt |
✅ | JWT认证 | 令牌创建/验证、多算法支持、Claims管理 |
algorithms |
✅ | 算法库 | 布隆过滤器、位图、多种哈希函数 |
text |
✅ | 文本处理 | DFA敏感词过滤、多种替换策略、批量处理 |
重要: 当前版本使用的RSA库存在已知的时序侧信道漏洞 (RUSTSEC-2023-0071):
如果你的应用场景涉及网络RSA操作,建议:
在你的 Cargo.toml 中添加依赖:
[dependencies]
yimi-rutool = "0.2.4"
use yimi_rutool::core::{StrUtil, DateUtil};
// 字符串工具
let result = StrUtil::is_blank(" ");
assert_eq!(result, true);
let formatted = StrUtil::format("Hello, {}!", &["World"]);
assert_eq!(formatted, "Hello, World!");
// 日期时间工具
let now = DateUtil::now();
println!("Current time: {}", now);
let tomorrow = DateUtil::offset_day(now, 1);
println!("Tomorrow: {}", tomorrow);
use yimi_rutool::crypto::{AesUtil, Md5Util};
#[cfg(feature = "crypto")]
{
// AES 加密
let key = "my-secret-key-16"; // 16字节密钥
let encrypted = AesUtil::encrypt_str("Hello, World!", key)?;
let decrypted = AesUtil::decrypt_str(&encrypted, key)?;
assert_eq!(decrypted, "Hello, World!");
// MD5 摘要
let hash = Md5Util::digest_hex("password");
println!("MD5 hash: {}", hash);
}
use yimi_rutool::jwt::{JwtUtil, Claims};
#[cfg(feature = "jwt")]
{
// 创建 JWT Token
let mut claims = Claims::new();
claims.subject = Some("user123".to_string());
claims.expires_at = Some(chrono::Utc::now().timestamp() + 3600); // 1小时后过期
let secret = "your-secret-key";
let token = JwtUtil::create_token(&claims, secret)?;
println!("JWT Token: {}", token);
// 验证 Token
let decoded_claims = JwtUtil::validate_token(&token, secret)?;
println!("Subject: {:?}", decoded_claims.subject);
// 创建刷新令牌
let refresh_token = JwtUtil::create_refresh_token("user123", secret, 24 * 7)?; // 7天
}
use yimi_rutool::http::HttpUtil;
#[cfg(feature = "http")]
async fn example() -> Result<(), Box<dyn std::error::Error>> {
// 简单的 GET 请求
let response = HttpUtil::get("https://httpbin.org/get").await?;
println!("Status: {}", response.status());
// POST 请求
let json_data = serde_json::json!({"key": "value"});
let response = HttpUtil::post_json("https://httpbin.org/post", &json_data).await?;
println!("Response: {:?}", response.json().await?);
Ok(())
}
use yimi_rutool::json::JsonUtil;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u32,
}
#[cfg(feature = "json")]
{
let person = Person {
name: "Alice".to_string(),
age: 30,
};
// 序列化为 JSON 字符串
let json_str = JsonUtil::to_string(&person)?;
println!("JSON: {}", json_str);
// 从 JSON 字符串反序列化
let parsed: Person = JsonUtil::from_str(&json_str)?;
assert_eq!(parsed.name, "Alice");
assert_eq!(parsed.age, 30);
}
Rutool 使用 Cargo 的功能标志来控制启用哪些模块:
[dependencies]
yimi-rutool = { version = "0.1", features = ["core", "crypto"] }
core: 核心工具类(默认启用)crypto: 加密解密功能http: HTTP 客户端功能json: JSON 处理功能cache: 缓存功能db: 数据库操作功能cron: 定时任务功能extra: 扩展工具功能full: 启用所有功能(默认)欢迎贡献代码!请查看 贡献指南 了解详细信息。
git clone https://github.com/ViewWay/yimi-rutool.git
cd yimi-rutool
cargo test
cargo doc --open
cargo bench
运行完整的测试套件:
# 运行所有测试
cargo test
# 运行特定模块的测试
cargo test --features crypto
# 运行基准测试
cargo bench
text::sensitive模块中的无用比较警告no_run避免CI环境超时SECURITY_AUDIT_REPORT.md)serde和serde_json到最新版本详细的安全评估和缓解建议请参考项目根目录的SECURITY_AUDIT_REPORT.md文件。
本项目采用 MIT OR Apache-2.0 双许可证。
让 Rust 开发变得更加简单和愉快! 🚀