Rust插件库casey的使用:简化字符串大小写转换和格式化处理的实用工具
Rust插件库casey的使用:简化字符串大小写转换和格式化处理的实用工具
Casey是一个Rust宏库,专门用于转换标识符的大小写格式。它虽然功能比较专一,但在编写其他宏时可能非常有用。
基本用法
Casey提供了以下宏来转换标识符的大小写:
use casey::{pascal, lower, shouty, snake, upper};
lower!(ABC); // 转换为小写: `abc`
upper!(abc); // 转换为大写: `ABC`
snake!(ABC); // 转换为蛇形命名: `a_b_c`
pascal!(ab_c); // 转换为帕斯卡命名: `AbC`
shouty!(a_b_c); // 转换为大写下划线命名: `A_B_C`
完整示例代码
use casey::{pascal, lower, shouty, snake, upper};
fn main() {
// 基本大小写转换示例
println!("原始标识符: ABC");
println!("小写: {}", lower!(ABC)); // abc
println!("大写: {}", upper!(abc)); // ABC
println!("蛇形命名: {}", snake!(ABC)); // a_b_c
println!("帕斯卡命名: {}", pascal!(ab_c)); // AbC
println!("大写下划线: {}", shouty!(a_b_c)); // A_B_C
// 处理TokenStream的示例
snake!(
#[derive(PartialEq)]
struct MockStruct {}
impl MockStruct {
fn test() -> bool { true }
}
);
assert!(mock_struct::test());
assert!(mock_struct::test() == mock_struct::test());
// 注意:类型名称也会被转换
pascal!(let test: bool = true); // 转换为: `let Test: Bool = true;`
}
TokenStream处理
Casey宏可以操作TokenStream,例如:
snake!(
#[derive(PartialEq)]
struct MockStruct {}
impl MockStruct {
fn test() -> bool { true }
}
);
assert!(mock_struct::test());
assert!(mock_struct::test() == mock_struct::test())
TokenStream中的所有标识符(ident)都会应用大小写转换(关键字和属性宏会被忽略)。
注意事项
类型名称(包括内置类型)不被视为关键字,例如bool
、usize
、i32
等,它们也会被Casey转换:
pascal!(let test: bool = true); // 转换为: `let Test: Bool = true;`
安装
要在项目中使用casey,可以运行以下Cargo命令:
cargo add casey
或者在Cargo.toml中添加:
casey = "0.4.2"
casey是一个轻量级的库(仅4.89 KiB),采用MIT许可证发布。
1 回复
Rust插件库casey的使用:简化字符串大小写转换和格式化处理的实用工具
casey
是一个Rust库,专门用于简化字符串的大小写转换和格式化处理。它提供了多种常见的大小写格式转换功能,让字符串处理变得更加简单直观。
安装方法
在Cargo.toml中添加依赖:
[dependencies]
casey = "0.1"
主要功能
casey
提供了以下大小写转换功能:
camel
- 驼峰式 (camelCase)pascal
- 帕斯卡式 (PascalCase)snake
- 蛇形 (snake_case)kebab
- 烤肉串式 (kebab-case)screaming_snake
- 大写下划线式 (SCREAMING_SNAKE_CASE)title
- 标题式 (Title Case)train
- 火车式 (Train-Case)sentence
- 句子式 (Sentence case)
完整示例代码
use casey::{Case, CaseExt};
fn main() {
// 基本使用示例
let s = "hello_world";
println!("原始字符串: {}", s);
println!("驼峰式: {}", s.camel()); // helloWorld
println!("帕斯卡式: {}", s.pascal()); // HelloWorld
println!("蛇形: {}", s.snake()); // hello_world
println!("烤肉串式: {}", s.kebab()); // hello-world
println!("标题式: {}", s.title()); // Hello World
println!("大写下划线式: {}", s.screaming_snake()); // HELLO_WORLD
// 链式调用示例
let chain_result = "user login count"
.snake() // 先转为蛇形: user_login_count
.screaming_snake() // 再转为大写下划线式: USER_LOGIN_COUNT
.to_string();
println!("链式调用结果: {}", chain_result);
// 自定义分隔符示例
let custom_sep_str = "hello*world*rust";
println!("自定义分隔符(*)的驼峰式: {}", custom_sep_str.camel_with_sep('*')); // helloWorldRust
println!("自定义分隔符(*)的蛇形: {}", custom_sep_str.snake_with_sep('*')); // hello_world_rust
// 处理混合大小写字符串
let mixed_case = "HTTPResponseCode";
println!("混合大小写转蛇形: {}", mixed_case.snake()); // http_response_code
println!("混合大小写转烤肉串式: {}", mixed_case.kebab()); // http-response-code
// 自定义转换规则
let custom_rule_str = "userID";
let custom_result = custom_rule_str.to_case_with(|word| {
if word == "id" {
"ID".to_string() // 特殊处理ID保持大写
} else {
word.to_lowercase()
}
});
println!("自定义规则驼峰式: {}", custom_result.camel()); // userID
// 批量转换示例
let field_names = vec!["first_name", "last_name", "email_address"];
let camel_fields: Vec<String> = field_names
.iter()
.map(|s| s.camel())
.collect();
println!("批量转换结果: {:?}", camel_fields);
// 输出: ["firstName", "lastName", "emailAddress"]
// 句子式转换示例
let sentence = "this is a test sentence";
println!("句子式: {}", sentence.sentence()); // This is a test sentence
// 火车式转换示例
println!("火车式: {}", sentence.train()); // This-Is-A-Test-Sentence
}
性能考虑
casey
在设计时考虑了性能因素,所有转换操作都是零分配的(zero-allocation),对于性能敏感的应用场景也能表现良好。
总结
casey
库为Rust开发者提供了一套简单而强大的字符串大小写转换工具,特别适合处理代码生成、API交互、数据库字段映射等需要不同命名约定的场景。通过链式调用和灵活的配置选项,可以轻松实现各种复杂的大小写转换需求。