OMG IDL 计划分析器
OMG IDL 解析( 去) 串行化信件定义
此软件包提供了分析原始文件的功能 .idl 切入解析,平整的信息定义.
输出定义可以和指定的根 schema 名称字符串一起传递给序列器 @foxglove/omgidl-serialization 以读取和写入 CDR、 XCDR1 和 XCDR2 信件.
示例
const schemaString = `
// Generated by https://github.com/foxglove/schemas
module foxglove {
// A vector in 3D space that represents a direction only
struct Vector3 {
double x;
double y;
double z;
};
};
module foxglove {
struct Quaternion {
double x;
double y;
double z;
@default(1.0)
double w;
};
};
module foxglove {
// A position and orientation for an object or reference frame in 3D space
struct Pose {
// Point denoting position in 3D space
Vector3 position;
// Quaternion denoting orientation in 3D space
Quaternion orientation;
};
};
`;
const definitions = parseIDL(schemaString);
definitions 结果是:
[
{
name: "foxglove::Vector3",
aggregatedKind: "struct",
definitions: [
{
name: "x",
isComplex: false,
type: "float64",
},
{
name: "y",
isComplex: false,
type: "float64",
},
{
name: "z",
isComplex: false,
type: "float64",
},
],
},
{
name: "foxglove::Quaternion",
aggregatedKind: "struct",
definitions: [
{
name: "x",
isComplex: false,
type: "float64",
},
{
name: "y",
isComplex: false,
type: "float64",
},
{
name: "z",
isComplex: false,
type: "float64",
},
{
name: "w",
annotations: {
default: {
name: "default",
type: "const-param",
value: 1,
},
},
defaultValue: 1,
isComplex: false,
type: "float64",
},
],
},
{
name: "foxglove::Pose",
aggregatedKind: "struct",
definitions: [
{
isComplex: true,
name: "position",
type: "foxglove::Vector3",
},
{
isComplex: true,
name: "orientation",
type: "foxglove::Quaternion",
},
],
},
]
API 密码
parseIDL(schema: string) - 粗浅的 .idl 用于解析,平分定义的策略字符串.
输出定义的TypeScript类型也可用.
OMG IDL 子集支持
注:数字类似 7.4.1 参照本节 OMG IDL 规格。 。 。 .
-
一般支持的特性
7.4.1构建块核心数据类型(下文除外)- 扩展数字类型的支持
uint8, (中文(简体) ),int8.uint64, (中文(简体) ),int64- 说明
7.4.13未完全支持构建块扩展数据类型
- 说明
- 字数(带有一些十六进制、字符和
wide- 类型例外) - 空白、 水平和垂直标签、 新行、 窗体种子、 注释( 集合、 “ 空白” ) 被忽略, 除非用于分隔符号
- 解析通用说明( 仅默认值读入 AST)
- 工会和案件
- 使用
@value注释 - 所有 XCDR 扩展类型 :
@final, (中文(简体) ),@appendable,以及@mutable const Color color = RED;财务报告和审定财务报表const Color color = Color::RED;被支持.
-
不支持的特性
native声明- 转发声明
- 常数表达式
- 无操作符(正数/负数之外)
- 默认值注释类型检查
- 标识符前缀
::范围 - 总计类型继承
- 注释定义
- 从注解( 如
@autoid是因为HASH财务报告和审定财务报表SEQUENTIAL缩略语) - 地图类型
@autoid(HASH)可变合计类型7.2.6.1- 八面体整数不支持(014(中文(简体) )7.2.6.2.1宽字符和宽字符串的支持有限- 可以读到计划,但只考虑
uint8 - 宽字符和字符串字元不支持(
L'X'(中文(简体) )
- 可以读到计划,但只考虑
7.2.6.3- 不支持宽字符串文字7.2.3.1- 我们没有明确检查相撞情况,我们使用对案件敏感的识别器,而IDL则要求识别器对案件不敏感。 警告: 这会导致消息读取不正确.7.4.2- 说吧7.4.16不支持扩展的 IDL 构件- 与其他阵列类型防御或struct成员节点组成可变大小的阵列类型防御.
-
不支持的引用和类型解析特性
- 数字类型检查是否持续使用 。 这意味着,如果使用一个打错的常数,它可能造成消息读取错误,或者不匹配的类型会在去序列化消息中出现.
- 我们不执行基于类型值范围 的常数在计划