2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
import
|
2023-05-18 10:20:44 +00:00
|
|
|
preserves
|
2021-10-06 09:30:38 +00:00
|
|
|
|
|
|
|
type
|
2022-03-07 23:53:05 +00:00
|
|
|
StateKind* {.pure.} = enum
|
|
|
|
`started`, `ready`, `failed`, `complete`, `userDefined`
|
2022-12-08 08:15:01 +00:00
|
|
|
StateUserDefined*[Cap] = Preserve[Cap]
|
|
|
|
`State`*[Cap] {.preservesOr.} = object
|
2022-03-07 23:53:05 +00:00
|
|
|
case orKind*: StateKind
|
|
|
|
of StateKind.`started`:
|
|
|
|
`started`* {.preservesLiteral: "started".}: bool
|
|
|
|
|
|
|
|
of StateKind.`ready`:
|
|
|
|
`ready`* {.preservesLiteral: "ready".}: bool
|
|
|
|
|
|
|
|
of StateKind.`failed`:
|
|
|
|
`failed`* {.preservesLiteral: "failed".}: bool
|
|
|
|
|
|
|
|
of StateKind.`complete`:
|
|
|
|
`complete`* {.preservesLiteral: "complete".}: bool
|
|
|
|
|
|
|
|
of StateKind.`userDefined`:
|
2022-12-08 08:15:01 +00:00
|
|
|
`userdefined`*: StateUserDefined[Cap]
|
2022-03-07 23:53:05 +00:00
|
|
|
|
|
|
|
|
2022-12-08 08:15:01 +00:00
|
|
|
ServiceObject*[Cap] {.preservesRecord: "service-object".} = object
|
|
|
|
`serviceName`*: Preserve[Cap]
|
|
|
|
`object`*: Preserve[Cap]
|
|
|
|
|
|
|
|
RequireService*[Cap] {.preservesRecord: "require-service".} = object
|
|
|
|
`serviceName`*: Preserve[Cap]
|
|
|
|
|
|
|
|
RestartService*[Cap] {.preservesRecord: "restart-service".} = object
|
|
|
|
`serviceName`*: Preserve[Cap]
|
|
|
|
|
|
|
|
RunService*[Cap] {.preservesRecord: "run-service".} = object
|
|
|
|
`serviceName`*: Preserve[Cap]
|
|
|
|
|
|
|
|
ServiceState*[Cap] {.preservesRecord: "service-state".} = object
|
|
|
|
`serviceName`*: Preserve[Cap]
|
|
|
|
`state`*: State[Cap]
|
|
|
|
|
|
|
|
ServiceDependency*[Cap] {.preservesRecord: "depends-on".} = object
|
|
|
|
`depender`*: Preserve[Cap]
|
|
|
|
`dependee`*: ServiceState[Cap]
|
|
|
|
|
|
|
|
proc `$`*[Cap](x: State[Cap] | ServiceObject[Cap] | RequireService[Cap] |
|
|
|
|
RestartService[Cap] |
|
|
|
|
RunService[Cap] |
|
|
|
|
ServiceState[Cap] |
|
|
|
|
ServiceDependency[Cap]): string =
|
|
|
|
`$`(toPreserve(x, Cap))
|
|
|
|
|
|
|
|
proc encode*[Cap](x: State[Cap] | ServiceObject[Cap] | RequireService[Cap] |
|
|
|
|
RestartService[Cap] |
|
|
|
|
RunService[Cap] |
|
|
|
|
ServiceState[Cap] |
|
|
|
|
ServiceDependency[Cap]): seq[byte] =
|
|
|
|
encode(toPreserve(x, Cap))
|