@statechart/scpb
Version:
151 lines (144 loc) • 8.99 kB
JavaScript
import { Writer as $Writer } from 'protobufjs/minimal';
import { encode as encodeBitset } from '@statechart/scpb-bitset';
import {
state as stateTypes,
transition as transitionTypes,
expression as expressionTypes,
} from './types';
export default function encodeDocument(message, writer) {
if (!writer)
writer = $Writer.create();
if (message.name != null && message.hasOwnProperty("name"))
writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);
var states = message.states || [];
var stateSize = states.length;
var transitions = message.transitions || [];
var transitionSize = transitions.length;
if (states.length)
for (let i = 0; i < states.length; ++i)
encodeState(states[i], writer.uint32(/* id 2, wireType 2 =*/18).fork(), stateSize, transitionSize).ldelim();
if (transitions.length)
for (let i = 0; i < transitions.length; ++i)
encodeTransition(transitions[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), stateSize, transitionSize).ldelim();
if (message.datamodel != null && message.hasOwnProperty("datamodel"))
writer.uint32(/* id 4, wireType 2 =*/34).string(message.datamodel);
if (message.meta != null && message.hasOwnProperty("meta"))
for (let keys = Object.keys(message.meta), i = 0; i < keys.length; ++i)
writer.uint32(/* id 5, wireType 2 =*/42).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.meta[keys[i]]).ldelim();
return writer;
}
function encodeState(message, writer, stateSize, transitionSize) {
if (!writer)
writer = $Writer.create();
if (message.type != null && message.hasOwnProperty("type"))
writer.uint32(/* id 1, wireType 0 =*/8).uint32(stateTypes.indexOf(message.type));
if (message.idx != null && message.hasOwnProperty("idx"))
writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.idx);
if (message.id != null && message.hasOwnProperty("id"))
writer.uint32(/* id 3, wireType 2 =*/26).string(message.id);
if (message.onEnter != null && message.onEnter.length)
for (let i = 0; i < message.onEnter.length; ++i)
encodeExpression(message.onEnter[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
if (message.onExit != null && message.onExit.length)
for (let i = 0; i < message.onExit.length; ++i)
encodeExpression(message.onExit[i], writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
if (message.invocations != null && message.invocations.length)
for (let i = 0; i < message.invocations.length; ++i)
encodeInvocation(message.invocations[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
if (message.data != null && message.data.length)
for (let i = 0; i < message.data.length; ++i)
encodeData(message.data[i], writer.uint32(/* id 7, wireType 2 =*/58).fork()).ldelim();
if (message.parent != null && message.hasOwnProperty("parent"))
writer.uint32(/* id 8, wireType 0 =*/64).uint32(message.parent);
if (message.children != null && message.hasOwnProperty("children"))
writer.uint32(/* id 9, wireType 2 =*/74).bytes(encodeBitset(message.children, stateSize));
if (message.ancestors != null && message.hasOwnProperty("ancestors"))
writer.uint32(/* id 10, wireType 2 =*/82).bytes(encodeBitset(message.ancestors, stateSize));
if (message.completion != null && message.hasOwnProperty("completion"))
writer.uint32(/* id 11, wireType 2 =*/90).bytes(encodeBitset(message.completion, stateSize));
if (message.transitions != null && message.hasOwnProperty("transitions"))
writer.uint32(/* id 12, wireType 2 =*/98).bytes(encodeBitset(message.transitions, transitionSize));
if (message.hasHistory != null && message.hasOwnProperty("hasHistory"))
writer.uint32(/* id 13, wireType 0 =*/104).bool(message.hasHistory);
if (message.name != null && message.hasOwnProperty("name"))
writer.uint32(/* id 14, wireType 2 =*/114).string(message.name);
return writer;
}
function encodeTransition(message, writer, stateSize, transitionSize) {
if (!writer)
writer = $Writer.create();
if (message.type != null && message.hasOwnProperty("type"))
writer.uint32(/* id 1, wireType 0 =*/8).uint32(transitionTypes.indexOf(message.type));
if (message.idx != null && message.hasOwnProperty("idx"))
writer.uint32(/* id 2, wireType 0 =*/16).uint32(message.idx);
if (message.source != null && message.hasOwnProperty("source"))
writer.uint32(/* id 3, wireType 0 =*/24).uint32(message.source);
if (message.events != null && message.events.length)
for (let i = 0; i < message.events.length; ++i)
writer.uint32(/* id 4, wireType 2 =*/34).string(message.events[i]);
if (message.condition != null && message.hasOwnProperty("condition"))
encodeExpression(message.condition, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
if (message.onTransition != null && message.onTransition.length)
for (let i = 0; i < message.onTransition.length; ++i)
encodeExpression(message.onTransition[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
if (message.targets != null && message.hasOwnProperty("targets"))
writer.uint32(/* id 7, wireType 2 =*/58).bytes(encodeBitset(message.targets, stateSize));
if (message.conflicts != null && message.hasOwnProperty("conflicts"))
writer.uint32(/* id 8, wireType 2 =*/66).bytes(encodeBitset(message.conflicts, transitionSize));
if (message.exits != null && message.hasOwnProperty("exits"))
writer.uint32(/* id 9, wireType 2 =*/74).bytes(encodeBitset(message.exits, stateSize));
if (message.name != null && message.hasOwnProperty("name"))
writer.uint32(/* id 10, wireType 2 =*/82).string(message.name);
return writer;
}
function encodeExpression(message, writer) {
if (!writer)
writer = $Writer.create();
if (message.type != null && message.hasOwnProperty("type"))
writer.uint32(/* id 1, wireType 0 =*/8).uint32(expressionTypes.indexOf(message.type));
if (message.value != null && message.hasOwnProperty("value"))
writer.uint32(/* id 2, wireType 2 =*/18).string(message.value);
if (message.props != null && message.hasOwnProperty("props"))
for (let keys = Object.keys(message.props), i = 0; i < keys.length; ++i) {
let value = message.props[keys[i]];
if (value == null) continue;
writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]);
encodeExpression(value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim().ldelim();
}
if (message.children != null && message.children.length)
for (let i = 0; i < message.children.length; ++i)
encodeExpression(message.children[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
return writer;
}
function encodeInvocation(message, writer) {
if (!writer)
writer = $Writer.create();
if (message.type != null && message.hasOwnProperty("type"))
encodeExpression(message.type, writer.uint32(/* id 1, wireType 2 =*/10).fork()).ldelim();
if (message.src != null && message.hasOwnProperty("src"))
encodeExpression(message.src, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
if (message.id != null && message.hasOwnProperty("id"))
encodeExpression(message.id, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim();
if (message.params != null && message.params.length)
for (let i = 0; i < message.params.length; ++i)
encodeExpression(message.params[i], writer.uint32(/* id 4, wireType 2 =*/34).fork()).ldelim();
if (message.content != null && message.hasOwnProperty("content"))
encodeExpression(message.content, writer.uint32(/* id 5, wireType 2 =*/42).fork()).ldelim();
if (message.onExit != null && message.onExit.length)
for (let i = 0; i < message.onExit.length; ++i)
encodeExpression(message.onExit[i], writer.uint32(/* id 6, wireType 2 =*/50).fork()).ldelim();
if (message.autoforward != null && message.hasOwnProperty("autoforward"))
writer.uint32(/* id 7, wireType 0 =*/56).bool(message.autoforward);
return writer;
}
function encodeData(message, writer) {
if (!writer)
writer = $Writer.create();
if (message.id != null && message.hasOwnProperty("id"))
writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);
if (message.value != null && message.hasOwnProperty("value"))
encodeExpression(message.value, writer.uint32(/* id 2, wireType 2 =*/18).fork()).ldelim();
if (message.src != null && message.hasOwnProperty("src"))
writer.uint32(/* id 3, wireType 2 =*/26).string(message.src);
return writer;
}