@foxglove/omgidl-parser
Version:
Parse OMG IDL to flattened definitions for serialization
51 lines (47 loc) • 1.8 kB
text/typescript
import { ReferenceTypeIDLNode } from "./ReferenceTypeIDLNode";
import { IStructMemberIDLNode } from "./interfaces";
import { StructMemberASTNode } from "../astTypes";
import { normalizeType } from "../primitiveTypes";
import { IDLMessageDefinitionField } from "../types";
export class StructMemberIDLNode
extends ReferenceTypeIDLNode<StructMemberASTNode>
implements IStructMemberIDLNode
{
/** Writes out ASTNode as a fully resolved IDL message definition */
toIDLMessageDefinitionField(): IDLMessageDefinitionField {
const msgDefinitionField: IDLMessageDefinitionField = {
name: this.name,
type: normalizeType(this.type),
isComplex: this.isComplex,
};
if (this.arrayLengths != undefined) {
msgDefinitionField.arrayLengths = this.arrayLengths;
}
if (this.arrayUpperBound != undefined) {
msgDefinitionField.arrayUpperBound = this.arrayUpperBound;
}
if (this.upperBound != undefined) {
msgDefinitionField.upperBound = this.upperBound;
}
if (this.annotations != undefined) {
msgDefinitionField.annotations = this.annotations;
}
if (this.isArray != undefined) {
msgDefinitionField.isArray = this.isArray;
}
if (this.enumType != undefined) {
msgDefinitionField.enumType = this.enumType;
}
const maybeDefault = this.annotations?.default;
if (maybeDefault && maybeDefault.type !== "no-params") {
const defaultValue =
maybeDefault.type === "const-param" ? maybeDefault.value : maybeDefault.namedParams.value;
if (typeof defaultValue !== "object") {
msgDefinitionField.defaultValue = defaultValue;
} else {
msgDefinitionField.defaultValue = this.getConstantNode(defaultValue.name).value;
}
}
return msgDefinitionField;
}
}