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)都会应用大小写转换(关键字和属性宏会被忽略)。

注意事项

类型名称(包括内置类型)不被视为关键字,例如boolusizei32等,它们也会被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交互、数据库字段映射等需要不同命名约定的场景。通过链式调用和灵活的配置选项,可以轻松实现各种复杂的大小写转换需求。

回到顶部