90 lines
2.1 KiB
TypeScript
Raw Normal View History

2018-09-02 02:57:55 -06:00
import {
createSimpleSchema,
deserialize,
ModelSchema,
primitive,
serialize
} from "serializr";
2018-08-31 21:59:06 -06:00
import * as requests from "@common/sprinklersRpc/deviceRequests";
import * as common from "./common";
export const withType: ModelSchema<requests.WithType> = createSimpleSchema({
2018-09-02 02:57:55 -06:00
type: primitive()
});
2018-09-02 02:57:55 -06:00
export const withProgram: ModelSchema<
requests.WithProgram
> = createSimpleSchema({
...withType.props,
programId: primitive()
});
2018-09-02 02:57:55 -06:00
export const withSection: ModelSchema<
requests.WithSection
> = createSimpleSchema({
...withType.props,
sectionId: primitive()
});
2018-09-02 02:57:55 -06:00
export const updateProgram: ModelSchema<
requests.UpdateProgramData
> = createSimpleSchema({
...withProgram.props,
data: {
serializer: data => data,
deserializer: (json, done) => {
done(null, json);
}
}
});
2018-09-02 02:57:55 -06:00
export const runSection: ModelSchema<
requests.RunSectionData
> = createSimpleSchema({
...withSection.props,
duration: common.duration
});
2018-09-02 02:57:55 -06:00
export const cancelSectionRunId: ModelSchema<
requests.CancelSectionRunIdData
> = createSimpleSchema({
...withType.props,
runId: primitive()
});
2018-09-02 02:57:55 -06:00
export const pauseSectionRunner: ModelSchema<
requests.PauseSectionRunnerData
> = createSimpleSchema({
...withType.props,
paused: primitive()
});
export function getRequestSchema(request: requests.WithType): ModelSchema<any> {
2018-09-02 02:57:55 -06:00
switch (request.type as requests.RequestType) {
case "runProgram":
case "cancelProgram":
return withProgram;
case "updateProgram":
return updateProgram;
case "runSection":
return runSection;
case "cancelSection":
return withSection;
case "cancelSectionRunId":
return cancelSectionRunId;
case "pauseSectionRunner":
return pauseSectionRunner;
default:
throw new Error(`Cannot serialize request with type "${request.type}"`);
}
}
export function seralizeRequest(request: requests.Request): any {
2018-09-02 02:57:55 -06:00
return serialize(getRequestSchema(request), request);
}
export function deserializeRequest(json: any): requests.Request {
2018-09-02 02:57:55 -06:00
return deserialize(getRequestSchema(json), json);
}