# RustDDS-Gen RustDDS-Gen 是一个用于将 IDL(接口定义语言)文件转换为 Rust 代码的工具。该工具专为 RustDDS 项目设计,支持解析 IDL 文件并生成相应的 Rust 结构体、枚举、常量等。 ## 项目概述 RustDDS-Gen 提供了一个完整的 IDL 到 Rust 代码的转换流程,主要包括: - IDL 文件解析(基于 pest 解析器) - 语法树(AST)构建和处理 - Rust 代码生成 - 命令行界面,支持多种选项 ## 功能特性 - 支持解析复杂的 IDL 文件,包括: - 模块(module)和嵌套模块 - 结构体(struct) - 枚举(enum) - 常量(const) - 类型定义(typedef) - 接口(interface) - 联合类型(union) - 序列(sequence) - 支持各种 IDL 数据类型,如 string、octet、long、double 等 - 支持参数方向(in、out、inout) - 提供详细的解析和代码生成日志 - 支持调试选项,如打印语法树、保存语法树到文件等 ## 项目结构 ``` RustDDS-Gen/ ├── Cargo.toml # 项目配置和依赖 ├── src/ # 源代码目录 │ ├── main.rs # 主程序入口 │ ├── parser/ # IDL 解析器 │ │ ├── mod.rs # 解析器主模块 │ │ ├── idl.pest # Pest 语法规则 │ │ ├── interface.rs # 接口解析 │ │ └── union.rs # 联合类型解析 │ └── codegen/ # 代码生成器 │ ├── mod.rs # 代码生成主模块 │ ├── interface.rs # 接口代码生成 │ ├── typedef.rs # 类型定义代码生成 │ └── union.rs # 联合类型代码生成 ├── test.idl # 测试用 IDL 文件 └── test_output.rs # 测试生成的 Rust 代码 ``` ## 依赖项 - pest (2.8): 用于解析 IDL 文件 - pest_derive (2.8): 用于派生 pest 解析器 - clap (4.4): 用于命令行参数解析 - serde (1.0): 用于序列化和反序列化 - serde_json (1.0): 用于 JSON 处理 - anyhow (1.0): 用于错误处理 - thiserror (2.0.12): 用于自定义错误类型 - regex (1.11.1): 用于正则表达式处理 ## 使用方法 ### 基本用法 ```bash rustdds-gen --input --output ``` ### 命令行选项 - `-i, --input <文件路径>`: 指定输入的 IDL 文件 - `-o, --output <文件路径>`: 指定输出的 Rust 文件 - `-d, --debug`: 启用调试输出 - `--parse-only`: 只解析语法,不生成代码 - `--verbose`: 打印详细的解析过程 - `--print-ast`: 打印语法树 - `--dump-ast <文件路径>`: 将解析结果保存到文件 ### 示例 ```bash # 基本用法 rustdds-gen --input test.idl --output test_output.rs # 调试模式 rustdds-gen --input test.idl --output test_output.rs --debug # 只解析不生成代码 rustdds-gen --input test.idl --output test_output.rs --parse-only # 保存语法树到文件 rustdds-gen --input test.idl --output test_output.rs --dump-ast ast.json ``` ## IDL 支持特性 RustDDS-Gen 支持以下 IDL 特性: - 基本数据类型:boolean, char, octet, short, long, float, double, string 等 - 自定义类型:struct, enum, typedef, union - 模块和嵌套模块 - 常量定义 - 接口和方法 - 参数方向(in, out, inout) - 序列(sequence) - 有限长度字符串(string) ## 开发指南 ### 构建项目 ```bash cargo build ``` ### 运行测试 ```bash cargo test ``` ### 添加新的 IDL 特性支持 1. 在 `src/parser/idl.pest` 中添加新的语法规则 2. 在 `src/parser/mod.rs` 中添加相应的解析函数 3. 在 `src/codegen/mod.rs` 中添加相应的代码生成函数 ## 许可证 [待定] ## 贡献指南 欢迎提交问题报告和拉取请求。对于重大更改,请先开启一个问题进行讨论。 ## 未来计划 - 支持更多 IDL 特性 - 改进错误处理和报告 - 添加更多单元测试和集成测试 - 支持生成序列化/反序列化代码 - 支持生成 DDS 相关代码