yimi-rutool 是一个受 Hutool 启发的综合性 Rust 工具库,为日常开发任务提供丰富的工具函数。
- 🚀 高性能: 利用 Rust 的零成本抽象和内存安全特性
- 🧰 功能丰富: 涵盖字符串处理、加密、网络请求、JSON处理等多个领域
- 🛡️ 类型安全: 充分利用 Rust 类型系统保证代码安全性
- 🔧 模块化: 按功能划分模块,可选择性启用
- 📚 双语文档: 中英文双语API文档和使用示例
- 🧪 测试充分: 250+ 单元测试,100%通过率
- ⚡ 现代化: Rust 1.89 + Edition 2024,使用最新语言特性
- 🌍 国际化: 支持中英文开发团队协作
| 模块 | 状态 | 描述 | 功能特性 |
|---|---|---|---|
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操作,建议:
- 等待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模块中的无用比较警告 - 网络测试优化:
- HTTP doctest超时时间从30秒增加到60秒
- 将依赖网络的doctest标记为
no_run避免CI环境超时 - 添加网络依赖说明注释
- 测试稳定性: 修复release模式下的测试时序问题
- 文档完善: 创建详细的安全审计报告(
SECURITY_AUDIT_REPORT.md) - 依赖更新: 更新
serde和serde_json到最新版本
- 单元测试: 316个测试全部通过 ✅
- 文档测试: 370个doctest全部通过 ✅
- 编译检查: Release和Debug模式编译无警告 ✅
- RUSTSEC-2023-0071: RSA时序侧信道漏洞(中危,官方未修复)
- RUSTSEC-2024-0436: paste crate不再维护(低危,间接依赖)
详细的安全评估和缓解建议请参考项目根目录的SECURITY_AUDIT_REPORT.md文件。
本项目采用 MIT OR Apache-2.0 双许可证。
- 受 Hutool Java 工具库启发
- 感谢 Rust 社区和所有贡献者
- 感谢所有开源项目的支持
- 项目主页: https://github.com/ViewWay/yimi-rutool
- 问题反馈: GitHub Issues
- 邮箱: [email protected]
让 Rust 开发变得更加简单和愉快! 🚀