Rust插件库cruet的使用:高效扩展功能与工具集,提升Rust开发效率

Rust插件库cruet的使用:高效扩展功能与工具集,提升Rust开发效率

cruet是一个Rust字符串变形库,提供了多种字符串转换功能,可以高效扩展Rust开发中的字符串处理能力。

安装

在Cargo.toml中添加依赖:

[dependencies]
cruet = "*"

使用示例

方法1:使用Inflector trait

// 使用类似String.to_lower_case()的方法
use cruet::Inflector;
fn main() {
  let camel_case_string: String = "some_string".to_camel_case();
}

方法2:直接使用函数

// 使用类似to_snake_case(&str)的函数
use cruet;

fn main() {
  let camel_case_string: String = cruet::to_camel_case("some_string");
}

完整示例代码

// 演示cruet库的各种字符串转换功能
use cruet::Inflector;

fn main() {
    // 转换为驼峰命名法
    let camel = "foo_bar".to_camel_case();
    println!("驼峰命名: {}", camel);  // 输出: fooBar
    
    // 转换为帕斯卡命名法
    let pascal = "foo_bar".to_pascal_case();
    println!("帕斯卡命名: {}", pascal);  // 输出: FooBar
    
    // 转换为蛇形命名法
    let snake = "FooBar".to_snake_case();
    println!("蛇形命名: {}", snake);  // 输出: foo_bar
    
    // 转换为短横线命名法
    let kebab = "FooBar".to_kebab_case();
    println!("短横线命名: {}", kebab);  // 输出: foo-bar
    
    // 转换为标题大小写
    let title = "foo bar".to_title_case();
    println!("标题大小写: {}", title);  // 输出: Foo Bar
    
    // 单复数转换
    let plural = cruet::to_plural("child");
    println!("复数形式: {}", plural);  // 输出: children
    
    let singular = cruet::to_singular("apples");
    println!("单数形式: {}", singular);  // 输出: apple
    
    // 序号处理
    let ordinal = cruet::ordinalize(21);
    println!("序数词: {}", ordinal);  // 输出: 21st
}

主要功能

cruet支持以下字符串转换功能:

  • 大小写转换:

    • 蛇形命名法(snake_case)
    • 驼峰命名法(camelCase)
    • 帕斯卡命名法(PascalCase)
    • 短横线命名法(kebab-case)
    • 标题大小写(Title Case)
    • 句子大小写(Sentence case)
    • 表命名法(table_case)
  • 其他转换:

    • 序数词转换(ordinalize)
    • 反序数词转换(deordinalize)
    • 模块名提取(demodulize)
    • 常量名提取(deconstantize)
    • 外键名转换(to_foreign_key)
    • 单复数转换(to_plural/to_singular)

项目状态

该项目最初是从whatisinternet/Inflector分叉而来,原项目已不再维护。


1 回复

Rust插件库cruet的使用:高效扩展功能与工具集

完整示例demo

1. 高级集合操作完整示例

use cruet::collections::EnhancedVec;

fn main() {
    // 创建增强型向量
    let mut vec = EnhancedVec::new();
    
    // 批量添加元素
    vec.push_all(&[1, 2, 3, 4, 5]);
    
    // 分块处理示例
    let chunks = vec.chunked(2);
    println!("分块结果: {:?}", chunks); // 输出: [[1, 2], [3, 4], [5]]
    
    // 快速过滤示例
    let evens = vec.filtered(|x| x % 2 == 0);
    println!("偶数过滤结果: {:?}", evens); // 输出: [2, 4]
    
    // 其他操作示例
    let sum = vec.sum();
    println!("元素总和: {}", sum); // 输出: 15
    
    let exists = vec.exists(|x| *x == 3);
    println!("是否包含3: {}", exists); // 输出: true
}

2. 并发工具完整示例

use cruet::concurrent::parallel_map;
use std::time::Duration;

fn process_item(x: i32) -> i32 {
    // 模拟耗时操作
    std::thread::sleep(Duration::from_millis(100));
    x * 2
}

fn main() {
    let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
    println!("开始并行处理...");
    
    // 并行处理数据
    let results = parallel_map(data, |x| {
        process_item(x)
    });
    
    println!("处理结果: {:?}", results); 
    // 输出: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
    
    // 错误处理示例
    let data_with_error = vec![1, 2, 0, 4];
    let results = parallel_map(data_with_error, |x| {
        if x == 0 {
            Err("除零错误".to_string())
        } else {
            Ok(10 / x)
        }
    });
    
    println!("带错误处理的结果: {:?}", results);
}

3. 实用宏完整示例

use cruet::macros::{quick_hashmap, quick_vec};

fn main() {
    // 快速创建HashMap
    let config = quick_hashmap! {
        "timeout" => 30,
        "retries" => 3,
        "debug" => true
    };
    
    println!("配置项: {:?}", config);
    println!("超时设置: {:?}", config.get("timeout")); // Some(30)
    
    // 快速创建向量
    let numbers = quick_vec![1, 2, 3, 4, 5];
    println!("数字向量: {:?}", numbers);
    
    // 带条件的快速创建
    let filtered = quick_vec![x * 2 for x in 1..6 if x % 2 == 0];
    println!("过滤后向量: {:?}", filtered); // [4, 8]
}

4. 算法扩展完整示例

use cruet::algorithms::{sort::quick_sort, search::binary_search};

fn main() {
    // 排序示例
    let mut numbers = vec![9, 2, 7, 4, 5, 1, 3, 8, 6];
    println!("排序前: {:?}", numbers);
    
    quick_sort(&mut numbers);
    println!("排序后: {:?}", numbers); 
    // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    // 搜索示例
    let target = 5;
    match binary_search(&numbers, &target) {
        Some(index) => println!("找到 {} 在位置 {}", target, index),
        None => println!("未找到 {}", target),
    }
    
    // 自定义比较函数
    let mut words = vec!["banana", "apple", "pear", "orange"];
    quick_sort_by(&mut words, |a, b| a.len().cmp(&b.len()));
    println!("按长度排序: {:?}", words); 
    // 输出: ["pear", "apple", "banana", "orange"]
}
回到顶部