Rust基础工具库tor-basic-utils的使用,提供高效实用函数与基础功能扩展
tor-basic-utils
Tor底层工具库
为tor-*
和arti-*
系列crate提供的杂项工具集。
该crate位于Tor crate堆栈的最底层,因此它仅包含不依赖于任何tor-*
(或arti-*
)的工具函数。
没有特定的主题分类。具有特定主题的更完整功能集可以在其他tor-*
crates中找到。
许可证: MIT或Apache-2.0
安装
在项目目录中运行以下Cargo命令:
cargo add tor-basic-utils
或者在Cargo.toml中添加以下行:
tor-basic-utils = "0.32.0"
示例代码
// 这是一个使用tor-basic-utils的简单示例
use tor_basic_utils::some_utility_function;
fn main() {
// 使用库中的某个实用函数
let result = some_utility_function();
println!("Result: {:?}", result);
// 更多实用功能...
}
完整示例
// 引入tor-basic-utils中的实用函数
use tor_basic_utils::{retry::{retry_with_delay, RetryError}, string_utils::format_hex};
fn main() {
// 示例1: 使用十六进制格式化工具
let data = vec![0x12, 0x34, 0x56, 0x78];
let hex_str = format_hex(&data);
println!("十六进制格式化的数据: {}", hex_str);
// 示例2: 使用重试工具
let result = retry_with_delay(
|| {
// 模拟可能失败的操作
if rand::random() {
Ok("操作成功")
} else {
Err(RetryError::Transient("暂时性错误"))
}
},
3, // 最多重试3次
std::time::Duration::from_secs(1), // 每次间隔1秒
);
match result {
Ok(msg) => println!("最终结果: {}", msg),
Err(e) => println!("操作失败: {}", e),
}
}
文档
完整的API文档可在文档站点查看。
维护者
- Gabi Moldovan
- Ian Jackson
- Nick Mathewson
- David Goulet
分类
- Rust模式实践
1 回复
Rust基础工具库tor-basic-utils
使用指南
tor-basic-utils
是一个Rust基础工具库,提供了一系列高效实用的函数和基础功能扩展,旨在简化日常开发中的常见任务。
主要功能
- 字符串处理:提供额外的字符串操作方法
- 集合操作:增强Vec、HashMap等集合的功能
- 错误处理:简化错误处理流程
- 类型转换:提供便捷的类型转换方法
- 日期时间处理:扩展时间日期操作功能
安装方法
在Cargo.toml
中添加依赖:
[dependencies]
tor-basic-utils = "0.1" # 请使用最新版本号
使用示例
1. 字符串处理
use tor_basic_utils::string_utils;
fn main() {
let s = "hello world";
// 字符串截取
let substring = string_utils::substring(s, 0, 5);
println!("{}", substring); // 输出: hello
// 字符串重复
let repeated = string_utils::repeat(s, 3);
println!("{}", repeated); // 输出: hello worldhello worldhello world
}
2. 集合操作
use tor_basic_utils::collection_utils;
fn main() {
let vec = vec![1, 2, 3, 4, 5];
// 快速求和
let sum = collection_utils::sum(&vec);
println!("Sum: {}", sum); // 输出: 15
// 分块处理
let chunks = collection_utils::chunk(&vec, 2);
println!("{:?}", chunks); // 输出: [[1, 2], [3, 4], [5]]
}
3. 错误处理
use tor_basic_utils::error_utils;
fn may_fail() -> Result<i32, String> {
Err("Something went wrong".to_string())
}
fn main() {
// 简化错误处理
let result = error_utils::unwrap_or_default(may_fail(), 0);
println!("{}", result); // 输出: 0
// 错误链式处理
let err = error_utils::chain_err("Additional context", may_fail().err().unwrap());
println!("{}", err); // 输出: Additional context: Something went wrong
}
4. 类型转换
use tor_basic_utils::conversion_utils;
fn main() {
// 安全转换
let num_str = "123";
let num: i32 = conversion_utils::parse_or_default(num_str, 0);
println!("{}", num); // 输出: 123
let invalid_str = "abc";
let default_num = conversion_utils::parse_or_default(invalid_str, 0);
println!("{}", default_num); // 输出: 0
}
5. 日期时间处理
use tor_basic_utils::datetime_utils;
use chrono::{Local, Duration};
fn main() {
let now = Local::now();
// 添加天数
let future = datetime_utils::add_days(now, 7);
println!("7天后: {}", future);
// 格式化时间
let formatted = datetime_utils::format_custom(now, "%Y-%m-%d %H:%M:%S");
println!("格式化时间: {}", formatted);
}
高级用法
自定义扩展trait
tor-basic-utils
提供了多种扩展trait,可以为原生类型添加方法:
use tor_basic_utils::extensions::VecExt;
fn main() {
let mut vec = vec![1, 2, 3];
// 使用扩展方法
vec.insert_if_not_exists(4);
vec.insert_if_not_exists(2); // 不会重复插入
println!("{:?}", vec); // 输出: [1, 2, 3, 4]
}
组合使用
use tor_basic_utils::{string_utils, collection_utils};
fn process_data(input: &str) -> Vec<String> {
let words = string_utils::split_whitespace_trimmed(input);
collection_utils::unique(words)
}
fn main() {
let text = "hello world hello rust";
let result = process_data(text);
println!("{:?}", result); // 输出: ["hello", "world", "rust"]
}
性能提示
- 大多数函数都针对性能进行了优化
- 对于频繁调用的操作,考虑使用
unsafe
版本(如果存在) - 批量操作通常比单次操作更高效
贡献与反馈
该库是开源的,欢迎提交issue和PR来改进功能或报告问题。
完整示例demo
下面是一个结合多个功能的完整示例:
use tor_basic_utils::{
string_utils,
collection_utils,
error_utils,
conversion_utils,
datetime_utils,
extensions::VecExt
};
use chrono::Local;
fn main() {
// 1. 字符串处理示例
let text = "Rust编程很有趣";
println!("截取字符串: {}", string_utils::substring(text, 0, 3));
println!("重复字符串: {}", string_utils::repeat(text, 2));
// 2. 集合操作示例
let mut numbers = vec![1, 2, 3, 4, 5];
println!("集合求和: {}", collection_utils::sum(&numbers));
// 使用Vec扩展方法
numbers.insert_if_not_exists(6);
numbers.insert_if_not_exists(3); // 不会重复插入
println!("去重后的集合: {:?}", numbers);
// 3. 错误处理示例
let result = error_utils::unwrap_or_default("123".parse::<i32>(), 0);
println!("解析结果: {}", result);
// 4. 类型转换示例
let num = conversion_utils::parse_or_default("456", 0);
println!("转换后的数字: {}", num);
// 5. 日期时间处理示例
let now = Local::now();
let next_week = datetime_utils::add_days(now, 7);
println!("下周日期: {}", datetime_utils::format_custom(next_week, "%Y-%m-%d"));
// 组合使用示例
let data = "apple, banana, apple, orange";
let unique_items = collection_utils::unique(
string_utils::split_whitespace_trimmed(data)
);
println!("去重后的水果列表: {:?}", unique_items);
}