根据IDL文件生成RUST文件
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
苏志江 ac47f93dd5 初始git仓库 11 mesi fa
src 初始git仓库 11 mesi fa
.gitignore 初始git仓库 11 mesi fa
Cargo.toml 初始git仓库 11 mesi fa
README.md 初始git仓库 11 mesi fa
test.idl 初始git仓库 11 mesi fa

README.md

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): 用于正则表达式处理

使用方法

基本用法

rustdds-gen --input <IDL文件路径> --output <Rust文件输出路径>

命令行选项

  • -i, --input <文件路径>: 指定输入的 IDL 文件
  • -o, --output <文件路径>: 指定输出的 Rust 文件
  • -d, --debug: 启用调试输出
  • --parse-only: 只解析语法,不生成代码
  • --verbose: 打印详细的解析过程
  • --print-ast: 打印语法树
  • --dump-ast <文件路径>: 将解析结果保存到文件

示例

# 基本用法
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)

开发指南

构建项目

cargo build

运行测试

cargo test

添加新的 IDL 特性支持

  1. src/parser/idl.pest 中添加新的语法规则
  2. src/parser/mod.rs 中添加相应的解析函数
  3. src/codegen/mod.rs 中添加相应的代码生成函数

许可证

[待定]

贡献指南

欢迎提交问题报告和拉取请求。对于重大更改,请先开启一个问题进行讨论。

未来计划

  • 支持更多 IDL 特性
  • 改进错误处理和报告
  • 添加更多单元测试和集成测试
  • 支持生成序列化/反序列化代码
  • 支持生成 DDS 相关代码