41 lines
1.0 KiB
Nim
41 lines
1.0 KiB
Nim
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
|
# SPDX-License-Identifier: Unlicense
|
|
|
|
import std/[json, os, osproc]
|
|
import preserves # , preserves/jsonhooks,
|
|
import syndicate
|
|
|
|
from preserves/jsonhooks import toPreserveHook
|
|
|
|
import ./schema/config
|
|
|
|
proc runChild: string =
|
|
let params = commandLineParams()
|
|
if params.len < 1:
|
|
stderr.writeLine "not enough parameters"
|
|
quit 1
|
|
let
|
|
cmd = params[0]
|
|
args = params[1..params.high]
|
|
try: result = execProcess(command=cmd, args=args, options={poUsePath})
|
|
except:
|
|
stderr.writeLine "execProcess failed"
|
|
quit 1
|
|
if result == "":
|
|
stderr.writeLine "no ouput"
|
|
quit 1
|
|
|
|
proc translate(output: string): Assertion =
|
|
var js: JsonNode
|
|
try: js = parseJson output
|
|
except:
|
|
stderr.writeLine "parseJson failed"
|
|
quit 1
|
|
js.toPreserveHook(Ref)
|
|
|
|
runActor("main") do (root: Ref; turn: var Turn):
|
|
connectStdio(root, turn)
|
|
during(turn, root, ?JsonTranslatorArguments) do (ds: Ref):
|
|
message(turn, ds, initRecord[Ref]("recv-json", runChild().translate()))
|
|
|