Refactor config to JSON data class pattern

Refactor the Config and ConfigGroup classes to match the JSON data class
pattern with toJSON, toRemote and fromJSON methods replacing the load,
init, and serialize methods.  Since fromJSON requires extra information
the messages structures passes around the plain JSON representation of
the configs instead of serialising instances of the config classes
automatically.
This commit is contained in:
Hornwitser committed 2024-01-06 19:53:32 +01:00
1 parent 27af142a87
commit 001db4befe
24 files changed
+269 -334

No files matched your search

+7 -9
View File
@@ -169,8 +169,8 @@ export default class ControlConnection extends BaseConnection {
throw new Error("Should be unreachable");
}
async handleControllerConfigGetRequest(): Promise<lib.RawConfig> {
return new lib.RawConfig(this._controller.config.serialize("control"));
async handleControllerConfigGetRequest() {
return this._controller.config.toRemote("control");
}
async handleControllerConfigSetFieldRequest(request: lib.ControllerConfigSetFieldRequest) {
@@ -211,8 +211,7 @@ export default class ControlConnection extends BaseConnection {
}
async handleHostConfigCreateRequest(request: lib.HostConfigCreateRequest) {
let hostConfig = new lib.HostConfig("control");
hostConfig.init();
const hostConfig = new lib.HostConfig("host");
hostConfig.set("host.controller_url", this._controller.getControllerUrl());
if (request.id !== undefined) {
@@ -225,7 +224,7 @@ export default class ControlConnection extends BaseConnection {
this.user.checkPermission("core.host.generate_token");
hostConfig.set("host.controller_token", this._controller.generateHostToken(hostConfig.get("host.id")));
}
return new lib.RawConfig(hostConfig.serialize());
return hostConfig.toJSON();
}
async handleInstanceDetailsGetRequest(request: lib.InstanceDetailsGetRequest) {
@@ -236,10 +235,9 @@ export default class ControlConnection extends BaseConnection {
return [...this._controller.instances.values()].map(instance => instance.toInstanceDetails());
}
// XXX should probably add a hook for host reuqests?
async handleInstanceCreateRequest(request: lib.InstanceCreateRequest) {
let instanceConfig = new lib.InstanceConfig("controller");
instanceConfig.load(request.config as lib.SerializedConfig);
const instanceConfig = new lib.InstanceConfig("controller");
instanceConfig.update(request.config, false, "control");
await this._controller.instanceCreate(instanceConfig);
}
@@ -249,7 +247,7 @@ export default class ControlConnection extends BaseConnection {
async handleInstanceConfigGetRequest(request: lib.InstanceConfigGetRequest) {
let instance = this._controller.getRequestInstance(request.instanceId);
return new lib.InstanceConfigGetRequest.Response(instance.config.serialize("control"));
return instance.config.toRemote("control");
}
async handleInstanceConfigSetFieldRequest(request: lib.InstanceConfigSetFieldRequest) {