鸿蒙PC适配llvm-gcc-compat编译安装第三方库convert_case,打造Rust 第三方字符串命名风格互相转换

发布时间:2026/6/24 12:49:24
鸿蒙PC适配llvm-gcc-compat编译安装第三方库convert_case,打造Rust 第三方字符串命名风格互相转换 欢迎加入开源鸿蒙PC社区 https://harmonypc.csdn.net/欢迎在PC社区平台申请新建项目https://atomgit.com/OpenHarmonyPCDeveloperAtomGit 仓库地址https://atomgit.com/OpenHarmonyPCDeveloper/ohos_rust_cargo本文讲解鸿蒙 PC 端 Rust 开发环境搭建鸿蒙基于 musl 库、强制二进制签名无法直接使用通用 Linux 编译产物。需借助鸿蒙专属包管理器 Harmonybrew提供两套编译方案方案一安装 llvm-gcc-compat零配置开箱即用方案二仅安装 ohos-sdk需手动配置 Cargo 链接器二者都依托 ohos-sdk 完成自动签名编译。可以来参考一下这个文章搭建环境OpenHarmony 鸿蒙 PC CodeArts IDE 实现 Rust开发完整开发环境搭建指南一、库是什么 核心作用convert_case是专门做字符串命名风格互相转换的轻量 Rust 库开发中高频场景前后端字段命名转换、结构体字段驼峰/下划线互转、文件命名、数据库字段、路由名、常量名等。支持全部主流命名风格snake下划线小写user_name_info数据库、rust变量screaming_snake全大写下划线USER_NAME_INFO常量kebab短横线小写user-name-infoURL、文件名、csscamel小驼峰userNameInfoJS/前端JSONpascal大驼峰UserNameInfoRust/Java 结构体、类名lower纯小写、upper纯大写业务使用场景后端Rust结构体snake序列化JSON自动转小驼峰 camel数据库字段下划线 ↔ 前端JSON驼峰互转代码生成工具表名生成结构体、常量名路由路径、文件名统一格式转换日志、错误提示统一命名格式化二、安装依赖cargoaddconvert_caseCargo.toml[dependencies] convert_case 0.6三、完整无报错 main.rs覆盖所有常用格式、批量转换、混合大小写兼容useconvert_case::{Case,Casing};fnmain(){// 原始混合格式字符串letrawuserNameInfo_age-data;println!(原始字符串: {raw}\n);// 1. snake_case 小写下划线rust变量、数据库字段letsnakeraw.to_case(Case::Snake);println!(Snake(下划线小写): {snake});// 2. UpperSnake 全大写下划线常量替代不存在的 ScreamingSnakeletupper_snakeraw.to_case(Case::UpperSnake);println!(UpperSnake(常量大写): {upper_snake});// 3. kebab-case 短横线分隔letkebabraw.to_case(Case::Kebab);println!(Kebab(短横线): {kebab});// 4. camelCase 小驼峰前端JSONletcamelraw.to_case(Case::Camel);println!(Camel(小驼峰): {camel});// 5. PascalCase 大驼峰结构体/类名letpascalraw.to_case(Case::Pascal);println!(Pascal(大驼峰): {pascal});// 6. 纯小写、纯大写letlowerraw.to_case(Case::Lower);letupperraw.to_case(Case::Upper);println!(Lower(全小写): {lower});println!(Upper(全大写): {upper});println!(\n 多格式统一转换测试 );lettest_list[order_id,OrderId,order-id,ORDER_ID,orderId,];forsintest_list{letcamels.to_case(Case::Camel);letsnakes.to_case(Case::Snake);println!({s:15} → camel:{camel:12} snake:{snake});}println!(\n 业务场景数据库字段 ↔ JSON驼峰 );letdb_fielduser_phone_number;letjson_fielddb_field.to_case(Case::Camel);println!(数据库下划线字段: {db_field});println!(前端JSON驼峰字段: {json_field});// 代码生成示例表名转结构体、常量名println!(\n 代码生成示例 );lettable_nameorder_detail;letstruct_nametable_name.to_case(Case::Pascal);letconst_nametable_name.to_case(Case::UpperSnake);println!(数据表 {} → 结构体 struct {},table_name,struct_name);println!(数据表 {} → 常量 const {}: u64 1;,table_name,const_name);}运行cargorunconvert_case是专门用来字符串命名风格互相转换的轻量库后端开发、代码生成、数据库与JSON字段互转高频工具。能自动识别混合分隔符下划线_、短横线-、驼峰大小写分界统一转换成目标命名规范。一、依赖引入useconvert_case::{Case,Casing};convert_case是 Rust 专门做字符串命名风格互转的第三方 crate支持所有开发常用命名格式下划线、驼峰、短横线、常量大写等。使用前需要在Cargo.toml添加依赖[dependencies] convert_case 0.6Case枚举代表目标格式Snake / Camel / Pascal 等Casingtrait给字符串增加.to_case()转换方法二、main 入口基础转换演示letrawuserNameInfo_age-data;println!(原始字符串: {raw}\n);原始混合字符串同时包含小驼峰、下划线、短横线用来测试库自动分割单词的能力。1. Snake 小写下划线Rust变量、数据库字段letsnakeraw.to_case(Case::Snake);// 输出user_name_info_age_data所有单词小写单词之间用下划线分隔后端数据库表字段、rust普通变量标准格式。2. UpperSnake 全大写下划线常量letupper_snakeraw.to_case(Case::UpperSnake);// 输出USER_NAME_INFO_AGE_DATA全大写下划线Rust/Go/C 常量专用格式行业俗称 screaming snake case。3. Kebab 短横线分隔URL、前端css类名letkebabraw.to_case(Case::Kebab);// 输出user-name-info-age-data单词小写、横线隔开网页路由、CSS class、文件命名常用。4. Camel 小驼峰JSON、JS/TS接口字段letcamelraw.to_case(Case::Camel);// 输出userNameInfoAgeData第一个单词小写后续每个单词首字母大写前后端交互 JSON 标准字段格式。5. Pascal 大驼峰结构体、类、枚举名letpascalraw.to_case(Case::Pascal);// 输出UserNameInfoAgeData每个单词首字母全部大写Rust struct、enum、TypeScript class 命名规范。6. Lower / Upper 纯小写、纯大写letlowerraw.to_case(Case::Lower);letupperraw.to_case(Case::Upper);单纯把所有字符转小写/大写不做单词分隔简单文本统一大小写场景用。三、多格式统一标准化测试lettest_list[order_id,OrderId,order-id,ORDER_ID,orderId,];forsintest_list{letcamels.to_case(Case::Camel);letsnakes.to_case(Case::Snake);println!({s:15} → camel:{camel:12} snake:{snake});}核心作用无论输入是什么杂乱格式都能统一转换成指定格式。比如order_id/OrderId/order-id全部能标准化为统一的 camel、snake适合做参数统一、数据字段映射。四、业务场景数据库字段 ↔ JSON 驼峰letdb_fielduser_phone_number;letjson_fielddb_field.to_case(Case::Camel);println!(数据库下划线字段: {db_field});println!(前端JSON驼峰字段: {json_field});后端最常用场景数据库存储是下划线user_phone_number返回给前端 JSON 需要转小驼峰userPhoneNumber序列化/反序列化字段映射核心工具。五、代码生成场景代码脚手架、ORM工具lettable_nameorder_detail;letstruct_nametable_name.to_case(Case::Pascal);letconst_nametable_name.to_case(Case::UpperSnake);println!(数据表 {} → 结构体 struct {},table_name,struct_name);println!(数据表 {} → 常量 const {}: u64 1;,table_name,const_name);适合 ORM、代码生成器数据库表名order_detail转 Pascal 作为结构体名称OrderDetail转 UpperSnake 作为表ID常量ORDER_DETAIL整体核心能力总结自动识别混合分隔符下划线、横线、驼峰拆分单词不用自己分割字符串一行代码完成任意命名格式互相转换覆盖后端开发高频场景数据库映射、JSON序列化、常量定义、结构体生成、URL命名无复杂正则性能稳定Rust项目做字段转换首选库。运行输出示例原始字符串: userNameInfo_age-data Snake(下划线小写): user_name_info_age_data UpperSnake(常量大写): USER_NAME_INFO_AGE_DATA Kebab(短横线): user-name-info-age-data Camel(小驼峰): userNameInfoAgeData Pascal(大驼峰): UserNameInfoAgeData Lower(全小写): usernameinfo_age-data Upper(全大写): USERNAMEINFO_AGE-DATA 多格式统一转换测试 order_id → camel:orderId snake:order_id OrderId → camel:orderId snake:order_id order-id → camel:orderId snake:order_id ORDER_ID → camel:orderId snake:order_id orderId → camel:orderId snake:order_id 业务场景数据库字段 ↔ JSON驼峰 数据库下划线字段: user_phone_number 前端JSON驼峰字段: userPhoneNumber 代码生成示例 数据表 order_detail → 结构体 struct OrderDetail 数据表 order_detail → 常量 const ORDER_DETAIL: u64 1;一、Cargo 依赖配置[dependencies] convert_case 0.6导入核心类型useconvert_case::{Case,Casing};Casingtrait给所有str / String挂载.to_case(Case)转换方法Case枚举所有支持的命名风格常量二、基础转换部分逐段解析原始字符串userNameInfo_age-data混合了小驼峰、下划线、短横线三种分隔符库会自动拆分单词列表拆分单词序列[user, name, info, age, data]所有转换都是基于这套拆分后的单词重新拼接。1. Case::Snake — snake_case 小写下划线letsnakeraw.to_case(Case::Snake);println!(Snake(下划线小写): {snake});输出user_name_info_age_data适用场景Rust 变量、函数名、数据库表字段、SQL 列名。2. Case::UpperSnake — SCREAMING_SNAKE 全大写下划线letupper_snakeraw.to_case(Case::UpperSnake);println!(UpperSnake(常量大写): {upper_snake});输出USER_NAME_INFO_AGE_DATA适用场景Rust / C / Java 全局常量、枚举标识。3. Case::Kebab — kebab-case 短横线小写letkebabraw.to_case(Case::Kebab);println!(Kebab(短横线): {kebab});输出user-name-info-age-data适用场景URL路径、前端CSS class、文件名、接口路由。4. Case::Camel — camelCase 小驼峰首字母小写letcamelraw.to_case(Case::Camel);println!(Camel(小驼峰): {camel});输出userNameInfoAgeData适用场景JavaScript/TypeScript JSON 对象字段、前端变量。5. Case::Pascal — PascalCase 大驼峰首字母大写letpascalraw.to_case(Case::Pascal);println!(Pascal(大驼峰): {pascal});输出UserNameInfoAgeData适用场景Rust struct / enum、Java Class、TS Interface。6. Case::Lower / Case::Upper 纯大小写letlowerraw.to_case(Case::Lower);letupperraw.to_case(Case::Upper);println!(Lower(全小写): {lower});println!(Upper(全大写): {upper});Lowerusernameinfo_age-data仅全部小写不删除分隔符UpperUSERNAMEINFO_AGE-DATA仅全部大写保留原有符号和 Snake/Kebab 区别不会重新拆分重组单词只改字母大小写。三、多格式统一转换测试lettest_list[order_id,OrderId,order-id,ORDER_ID,orderId,];forsintest_list{letcamels.to_case(Case::Camel);letsnakes.to_case(Case::Snake);println!({s:15} → camel:{camel:12} snake:{snake});}核心特性输入任意风格输出统一结果无论输入是下划线、大驼峰、短横线、常量大写、小驼峰底层都会拆分成[order, id]再生成目标格式所有输入转 camel 统一得到orderId所有输入转 snake 统一得到order_id输出结果order_id → camel:orderId snake:order_id OrderId → camel:orderId snake:order_id order-id → camel:orderId snake:order_id ORDER_ID → camel:orderId snake:order_id orderId → camel:orderId snake:order_id业务价值数据库同步JSON、代码生成时不用兼容各种输入格式统一转换即可。四、业务场景1数据库字段 ↔ JSON 前端字段letdb_fielduser_phone_number;letjson_fielddb_field.to_case(Case::Camel);println!(数据库下划线字段: {db_field});println!(前端JSON驼峰字段: {json_field});输出数据库下划线字段: user_phone_number 前端JSON驼峰字段: userPhoneNumber配套 serde 经典联用场景配合序列化自动转换字段名不用手写大量#[serde(rename)]// 数据库 snake → JSON camel 自动映射#[serde(rename_all camelCase)]structUser{user_phone_number:String}开发CRUD工具、ORM框架、代码生成器必备组合。五、业务场景2数据库表名生成 Rust 代码lettable_nameorder_detail;letstruct_nametable_name.to_case(Case::Pascal);letconst_nametable_name.to_case(Case::UpperSnake);println!(数据表 {} → 结构体 struct {},table_name,struct_name);println!(数据表 {} → 常量 const {}: u64 1;,table_name,const_name);输出数据表 order_detail → 结构体 struct OrderDetail 数据表 order_detail → 常量 const ORDER_DETAIL: u64 1;使用场景数据库代码生成工具读取表名order_detail生成实体结构体struct OrderDetailPascal生成表名常量const ORDER_DETAIL_TABLEUpperSnake字段转小驼峰用于接口返回Camel字段转下划线用于SQL查询Snake六、底层核心原理为什么混合字符串也能正确转换分词规则下划线_、短横线-、空格 直接作为单词分隔大小写交界处拆分userName→ user Name全部拆分后得到纯单词数组无视原有分隔符根据目标Case规则重新拼接单词Snake单词小写_连接Camel首单词小写其余首字母大写无分隔符Pascal全部单词首字母大写无分隔符Kebab单词小写-连接七、各 Case 场景速查表Case 枚举样式典型用途Snakeuser_infoRust变量、数据库字段UpperSnakeUSER_INFO常量、枚举值CameluserInfoJS/JSON字段、前端变量PascalUserInfostruct、类名、接口Kebabuser-infoURL、CSS、文件名Lower / Upper仅改大小写简单文本格式化八、常见搭配库实战场景serde convert_caseORM 实体自动转换数据库/JSON字段sqlx convert_case数据库表名自动生成Rust结构体代码生成工具build.rs批量转换命名规范HTTP接口统一入参驼峰 ↔ 数据库下划线互转配置文件解析不同命名风格配置标准化四、核心API说明1. trait Casing自动给 str/String 增加方法.to_case(Case::X)一键转为目标命名风格.to_words()把字符串拆分为单词 Vec可自定义拼接2. Case 枚举全部变体枚举值输出示例使用场景Snakeuser_infoRust变量、数据库表字段ScreamingSnakeUSER_INFO常量定义const MAX_SIZE: u32 100Kebabuser-infoURL路径、文件名称、CSS类名CameluserInfoJS/TS、JSON前端返回字段PascalUserInfoRust struct / enum、Java ClassLoweruserinfo全小写无分隔UpperUSERINFO全大写无分隔3. 核心特性自动分词无论输入是驼峰、下划线、横线混合库内部自动分割单词不用手动清洗字符串输入userName_age-id统一拆分为[user, name, age, data]再重新拼接为目标格式。五、高频实战拓展场景场景1配合serde全局结构体驼峰序列化代码生成常用不需要手动每个字段加rename批量转换所有字段名useconvert_case::{Case,Casing};fndb_to_json_field(db_name:str)-String{db_name.to_case(Case::Camel)}fnjson_to_db_field(json_name:str)-String{json_name.to_case(Case::Snake)}fnmain(){letdb_cols[user_id,order_price,create_time];forcolindb_cols{println!(db:{col} → json:{},db_to_json_field(col));}}场景2代码生成工具ORM/表生成结构体// 数据库表名 order_detail → Pascal 结构体 OrderDetaillettable_nameorder_detail;letstruct_nametable_name.to_case(Case::Pascal);println!(表 {table_name} 对应结构体 struct {struct_name});场景3生成常量名letfieldmax_page_size;letconst_namefield.to_case(Case::ScreamingSnake);println!(const {const_name}: u32 100;);六、库优势零依赖、体积极小、编译速度快自动兼容各种混合分隔符输入容错性强API极简只需要.to_case()一行转换支持所有行业标准命名规范覆盖前后端、数据库、代码生成全场景无运行时开销纯编译期逻辑性能极高