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