xiot-core-spec-ts
Version:
XIOT Specification Codec
68 lines (67 loc) • 3.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServiceTemplateCodec = void 0;
const ServiceTemplate_1 = require("../../typedef/template/ServiceTemplate");
const Spec_1 = require("../../typedef/constant/Spec");
const ServiceType_1 = require("../../typedef/definition/urn/ServiceType");
const DescriptionCodec_1 = require("../definition/DescriptionCodec");
const PropertyTemplateCodec_1 = require("./PropertyTemplateCodec");
const ActionTemplateCodec_1 = require("./ActionTemplateCodec");
const EventTemplateCodec_1 = require("./EventTemplateCodec");
class ServiceTemplateCodec {
static decodeArray(array) {
const list = [];
if (array != null) {
for (const o of array) {
list.push(ServiceTemplateCodec.decode(o));
}
}
return list;
}
static decode(o) {
const iid = o[Spec_1.Spec.IID];
const required = o[Spec_1.Spec.X_REQUIRED];
const propertyAddable = o[Spec_1.Spec.X_PROPERTY_ADDABLE];
const actionAddable = o[Spec_1.Spec.X_ACTION_ADDABLE];
const eventAddable = o[Spec_1.Spec.X_ACTION_ADDABLE];
const source = o[Spec_1.Spec.X_SOURCE];
const type = new ServiceType_1.ServiceType(o[Spec_1.Spec.TYPE]);
const description = DescriptionCodec_1.DescriptionCodec.decode(o[Spec_1.Spec.DESCRIPTION]);
const properties = PropertyTemplateCodec_1.PropertyTemplateCodec.decodeArray(o[Spec_1.Spec.PROPERTIES]);
const actions = ActionTemplateCodec_1.ActionTemplateCodec.decodeArray(o[Spec_1.Spec.ACTIONS]);
const events = EventTemplateCodec_1.EventTemplateCodec.decodeArray(o[Spec_1.Spec.EVENTS]);
return new ServiceTemplate_1.ServiceTemplate(iid, required, type, description, properties, actions, events, propertyAddable, actionAddable, eventAddable, source);
}
static encode(service) {
const o = {
iid: service.iid,
type: service.type.toString(),
description: DescriptionCodec_1.DescriptionCodec.encode(service.description)
};
if (service.properties.size > 0) {
o[Spec_1.Spec.PROPERTIES] = PropertyTemplateCodec_1.PropertyTemplateCodec.encodeArray(service.properties);
}
if (service.actions.size > 0) {
o[Spec_1.Spec.ACTIONS] = ActionTemplateCodec_1.ActionTemplateCodec.encodeArray(service.actions);
}
if (service.events.size > 0) {
o[Spec_1.Spec.EVENTS] = EventTemplateCodec_1.EventTemplateCodec.encodeArray(service.events);
}
o[Spec_1.Spec.X_REQUIRED] = service.required;
o[Spec_1.Spec.X_PROPERTY_ADDABLE] = service.propertyAddable;
o[Spec_1.Spec.X_ACTION_ADDABLE] = service.actionAddable;
o[Spec_1.Spec.X_EVENT_ADDABLE] = service.eventAddable;
if (service.source) {
o[Spec_1.Spec.X_SOURCE] = service.source;
}
return o;
}
static encodeArray(services) {
const array = [];
services.forEach(service => {
array.push(ServiceTemplateCodec.encode(service));
});
return array;
}
}
exports.ServiceTemplateCodec = ServiceTemplateCodec;