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基础工具库,提供了一系列高效实用的函数和基础功能扩展,旨在简化日常开发中的常见任务。

主要功能

  1. 字符串处理:提供额外的字符串操作方法
  2. 集合操作:增强Vec、HashMap等集合的功能
  3. 错误处理:简化错误处理流程
  4. 类型转换:提供便捷的类型转换方法
  5. 日期时间处理:扩展时间日期操作功能

安装方法

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"]
}

性能提示

  1. 大多数函数都针对性能进行了优化
  2. 对于频繁调用的操作,考虑使用unsafe版本(如果存在)
  3. 批量操作通常比单次操作更高效

贡献与反馈

该库是开源的,欢迎提交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);
}
回到顶部