Source code

Revision control

Copy as Markdown

Other Tools

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
var { Request } = require("resource://devtools/shared/protocol/Request.js");
const { Response } = require("resource://devtools/shared/protocol/Response.js");
var {
types,
registeredTypes,
} = require("resource://devtools/shared/protocol/types.js");
/**
* Generates an actor specification from an actor description.
*/
var generateActorSpec = function (actorDesc) {
const actorSpec = {
typeName: actorDesc.typeName,
methods: [],
};
// Find additional method specifications
if (actorDesc.methods) {
for (const name in actorDesc.methods) {
const methodSpec = actorDesc.methods[name];
const spec = {};
spec.name = methodSpec.name || name;
spec.request = new Request(
Object.assign({ type: spec.name }, methodSpec.request || undefined)
);
spec.response = new Response(methodSpec.response || undefined);
spec.release = methodSpec.release;
spec.oneway = methodSpec.oneway;
actorSpec.methods.push(spec);
}
}
// Find event specifications
if (actorDesc.events) {
actorSpec.events = new Map();
for (const name in actorDesc.events) {
const eventRequest = actorDesc.events[name];
Object.freeze(eventRequest);
actorSpec.events.set(
name,
new Request(Object.assign({ type: name }, eventRequest))
);
}
}
if (!registeredTypes.has(actorSpec.typeName)) {
types.addActorType(actorSpec.typeName);
}
registeredTypes.get(actorSpec.typeName).actorSpec = actorSpec;
return actorSpec;
};
exports.generateActorSpec = generateActorSpec;