Schema IDL 语法
本文档给出 Fory IDL 的语法与语义参考,覆盖文件结构、类型系统、字段规则、选项与类型注册策略。
编译器使用方式与构建集成请参见 Compiler Guide。 protobuf/FlatBuffers 前端映射请参见 Protocol Buffers IDL Support 与 FlatBuffers IDL Support。
文件结构
一个 Fory IDL 文件通常包含:
- 可选
package声明 - 可选文件级
option - 可选
import语句 - 类型定义(
enum、message、union)
// Optional package declaration
package com.example.models;
// Optional file-level options
option java_package = "com.example.models";
// Import statements
import "common/types.fdl";
// Type definitions
enum Color [id=100] { ... }
message User [id=101] { ... }
message Order [id=102] { ... }
union Event [id=103] { ... }
注释
支持单行注释与块注释:
// This is a single-line comment
/*
* This is a block comment
* that spans multiple lines
*/
message Example {
string name = 1; // Inline comment
}
Package 声明
package 定义文件中所有类型的命名空间。
package com.example.models;
也可以配置 alias(用于自动类型 ID 计算):
package com.example.models alias models_v1;
规则:
- 可选但 推荐
- 必须位于任何类型定义之前
- 每个文件最多一个
package - 用于命名空间注册
alias会参与 auto-ID 哈希
语言映射:
| 语言 | package 用法 |
|---|---|
| Java | Java package |
| Python | 模块名(. 转 _) |
| Go | 包名(通常取最后一段) |
| Rust | 模块名(. 转 _) |
| C++ | 命名空间(. 转 ::) |
| C# | 命名空间 |
| JavaScript | 模块名(取最后一段) |
| Dart | 库名(保留 package 各段) |
文件级选项
文件级选项用于控制语言定制代码生成。
语法
option option_name = value;