@lichtblick/message-definition
Version:
Defines common types for message definition schemas (ROS .msg, Protobuf, FlatBuffers, IDL, PX4 ULog, JSON Schema, etc)
182 lines • 5.48 kB
TypeScript
/**
* Valid JavaScript types for constants.
*/
export type ConstantValue = string | number | bigint | boolean | undefined;
/**
* Valid JavaScript types for default field values.
*/
export type DefaultValue = string | number | bigint | boolean | string[] | number[] | bigint[] | boolean[] | undefined;
/**
* A single field in a message definition.
*
* Example:
* In the protobufs programming guide (https://protobuf.dev/programming-guides/proto3), the
* following message definition is given:
*
* ```protobuf
* syntax = "proto3";
*
* message SearchRequest {
* string query = 1;
* int32 page_number = 2;
* int32 result_per_page = 3;
* }
* ```
*
* The three fields in this message definition would be represented as follows:
* ```typescript
* { type: "string", name: "query" }
* { type: "int32", name: "page_number" }
* { type: "int32", name: "result_per_page" }
* ```
*/
export type MessageDefinitionField = {
/**
* Type name of this field. Valid primitive type names will differ across each
* interface definition language, and complex types are often user-defined.
* Examples: "string", "int32", "geometry_msgs/Point", "foxglove.Grid".
*/
type: string;
/**
* Name of this field.
*/
name: string;
/**
* Set to true if this field's type is a user-defined type (i.e. not a
* primitive type, a custom struct).
*/
isComplex?: boolean;
/**
* Set to true if this field is an array. For example, the following Protobuf
* field:
*
* ```protobuf
* repeated Result results = 1;
* ```
*
* Would be represented as:
* ```typescript
* { type: "Result", name: "results", isArray: true }
* ```
*/
isArray?: boolean;
/**
* Defines the array length of this field for fixed-length arrays. Only set if
* `isArray` is true. For example, the following ROS 1 message definition
* field:
*
* ```
* float64[12] projection_matrix
* ```
*
* Would be represented as:
* ```typescript
* { type: "float64", name: "projection_matrix", isArray: true, arrayLength: 12 }
* ```
*/
arrayLength?: number | undefined;
/**
* Set to true if this field defines a constant and is not directly part of
* the message definition (i.e. it is not a field in the message definition
* and does not affect serialization or deserialization). For example, the
* following ROS 1 message definition field:
*
* ```
* float64 PI = 3.14159
* ```
*
* Would be represented as:
* ```typescript
* { type: "float64", name: "PI", isConstant: true, value: 3.14159, valueText: "3.14159" }
* ```
*/
isConstant?: boolean;
/**
* The value of this constant. Only set if `isConstant` is true. The set of
* allowed types for constants will differ across each interface definition
* language.
*/
value?: ConstantValue;
/**
* The original text representation of this constant's value. Only set if
* `isConstant` is true. For example, the following ROS 1 message definition
* field:
*
* ```
* bool ALIVE=True
* ```
*
* Would be represented as:
* ```typescript
* { type: "bool", name: "ALIVE", isConstant: true, value: true, valueText: "True" }
*/
valueText?: string;
/**
* If set, this defines a maximum upper bound on string length of this field.
* Only set if `type` is "string". For example, the following ROS 2 message
* definition field:
*
* ```
* string<=5 bar
* ```
*
* Would be represented as:
*
* ```typescript
* { type: "string", name: "bar", upperBound: 5 }
* ```
*/
upperBound?: number;
/**
* If set, this defines a maximum upper bound on array length of this field.
* Only set if `isArray` is true. For example, the following ROS 2 message
* definition field:
*
* ```
* int32[<=5] foo
* ```
*
* Would be represented as:
*
* ```typescript
* { type: "int32", name: "foo", isArray: true, arrayUpperBound: 5 }
* ```
*/
arrayUpperBound?: number;
/**
* If set, this defines a default value for this field. For example, the
* following ROS 2 message definition field:
*
* ```
* int32 foo=42
* ```
*
* Would be represented as:
* ```typescript
* { type: "int32", name: "foo", defaultValue: 42 }
* ```
*
* And would only effect serialization if the field is not set, having no
* effect on deserialization. The effect this field has on serialization or
* deserialization will differ across each interface definition language.
*/
defaultValue?: DefaultValue;
};
/**
* A message definition, i.e. a struct definition containing fields in some
* interface definition language. Examples: Protobuf .proto, ROS 1 .msg,
* ROS 2 .msg, IDL .idl, JSON Schema .json, etc.
*/
export type MessageDefinition = {
/**
* An optional name for this message definition. It's common for top-level
* message definitions to be unnamed, and nested message definitions (custom
* complex types) to be named.
*/
name?: string;
/**
* The ordered list of fields in this message definition.
*/
definitions: MessageDefinitionField[];
};
//# sourceMappingURL=types.d.ts.map