| Crates.io | knife-util |
| lib.rs | knife-util |
| version | 0.2.0 |
| created_at | 2025-10-27 14:56:46.947903+00 |
| updated_at | 2025-10-30 17:43:21.216824+00 |
| description | 一个为 knife 项目提供通用工具和功能的 Rust 库 |
| homepage | |
| repository | https://gitee.com/ocaso1987/knife-util-rust |
| max_upload_size | |
| id | 1903079 |
| size | 263,594 |
一个为 knife 项目提供通用工具和功能的 Rust 库,专注于 JSON 数据处理、路径管理和配置转换。
AppError 统一错误处理机制std::io::Error 等标准错误类型互转_override_ 字段强制覆盖在 Cargo.toml 中添加依赖:
[dependencies]
knife-util = "0.2.0"
use knife_util::{AppError, merge_json};
use serde_json::json;
fn main() -> Result<(), AppError> {
let target = json!({
"user": {"name": "Alice", "age": 30},
"settings": {"theme": "light"}
});
let source = json!({
"user": {"email": "alice@example.com"},
"settings": {"language": "en"}
});
let merged = merge_json(&target, &source)?;
println!("合并结果: {}", serde_json::to_string_pretty(&merged).unwrap());
Ok(())
}
use knife_util::merge_json;
use serde_json::json;
let target = json!({"age": 25});
let source = json!({
"age": 30,
"age._override_": 35 // 强制覆盖为 35
});
let result = merge_json(&target, &source).unwrap();
assert_eq!(result["age"], 35);
use knife_util::{AppError, get_work_dir, build_work_path, is_dev_mode};
fn main() -> Result<(), AppError> {
// 获取工作目录
let work_dir = get_work_dir()?;
println!("工作目录: {:?}", work_dir);
// 检查环境
if is_dev_mode() {
println!("当前在开发模式");
}
// 构建配置文件路径
let config_path = build_work_path("config/app.toml")?;
println!("配置文件路径: {:?}", config_path);
Ok(())
}
use knife_util::{AppError, toml_to_json, json_to_toml};
use serde_json::json;
fn main() -> Result<(), AppError> {
// TOML 到 JSON
let toml_str = r#"
title = "My App"
[database]
host = "localhost"
port = 5432
"#;
let json_value = toml_to_json(toml_str)?;
println!("JSON: {}", serde_json::to_string_pretty(&json_value).unwrap());
// JSON 到 TOML
let json_data = json!({
"app": {"name": "MyApp", "version": "1.0.0"},
"database": {"host": "localhost", "port": 5432}
});
let toml_str = json_to_toml(&json_data)?;
println!("TOML:\n{}", toml_str);
Ok(())
}
use knife_util::AppError;
use std::fs;
fn read_config() -> Result<String, AppError> {
let content = fs::read_to_string("config.toml")?; // 自动转换为 AppError
Ok(content)
}
fn main() -> Result<(), AppError> {
match read_config() {
Ok(content) => println!("配置内容: {}", content),
Err(e) => {
println!("错误: {}", e);
if let Some(detail) = e.message_detail() {
println!("详细信息: {}", detail);
}
}
}
Ok(())
}
MergeJsonTrait: JSON 数据合并 traitMergeFromTrait: 同类型对象合并 traitmerge_json(target, source): 深度合并两个 JSON 值get_work_dir(): 获取工作目录is_dev_mode(): 检查是否为开发模式build_work_path(path): 构建工作路径toml_to_json(toml_str): TOML 字符串转 JSONtoml_file_to_json(file_path): TOML 文件转 JSONjson_to_toml(json_value): JSON 转 TOML 字符串AppError::new(code, message): 创建新错误AppError::from_error(code, message, err): 从其他错误创建AppError::with_attribute(key, value): 添加上下文信息cargo test
cargo doc --open
本项目采用 Apache-2.0 许可证。详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
详见 CHANGELOG.md