2024-01-08 20:10:55 +00:00
|
|
|
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
|
|
|
# SPDX-License-Identifier: Unlicense
|
|
|
|
|
|
|
|
import std/[json, osproc]
|
|
|
|
import preserves
|
2024-04-05 13:18:47 +00:00
|
|
|
import syndicate
|
2024-01-08 20:10:55 +00:00
|
|
|
|
|
|
|
import ../schema/config
|
|
|
|
import ../json_messages
|
|
|
|
|
|
|
|
proc runChild(params: seq[string]): string =
|
|
|
|
if params.len < 1:
|
|
|
|
stderr.writeLine "not enough parameters"
|
|
|
|
let
|
|
|
|
cmd = params[0]
|
|
|
|
args = params[1..params.high]
|
|
|
|
try: result = execProcess(command=cmd, args=args, options={poUsePath})
|
|
|
|
except CatchableError as err:
|
|
|
|
quit("execProcess failed: " & err.msg)
|
|
|
|
if result == "":
|
|
|
|
stderr.writeLine "no ouput"
|
|
|
|
|
|
|
|
proc spawnJsonStdioTranslator*(turn: var Turn; root: Cap): Actor {.discardable.} =
|
2024-04-05 13:18:47 +00:00
|
|
|
spawnActor(turn, "json-stdio-translator") do (turn: var Turn):
|
2024-01-08 20:10:55 +00:00
|
|
|
during(turn, root, ?:JsonTranslatorArguments) do (argv: seq[string], ds: Cap):
|
|
|
|
var js = parseJson(runChild(argv))
|
|
|
|
message(turn, ds, RecvJson(data: js))
|
|
|
|
discard publish(turn, ds, RecvJson(data: js))
|
|
|
|
|
|
|
|
when isMainModule:
|
2024-04-05 13:18:47 +00:00
|
|
|
import syndicate/relays
|
|
|
|
runActor("main") do (turn: var Turn):
|
|
|
|
resolveEnvironment(turn) do (turn: var Turn; ds: Cap):
|
|
|
|
spawnJsonStdioTranslator(turn, ds)
|