根据IDL文件生成RUST文件
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

4.0KB

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 相关代码