From 9ec580ff79f52144c12c9efc712fa5e8620fb2c4 Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Fri, 5 May 2023 17:38:04 +0100 Subject: [PATCH] =?UTF-8?q?Use=20=20and=20=20schema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.prs | 12 +++++++++- mpv.config-example.pr | 41 +++++++++++++++++++++------------- src/json_socket_translator.nim | 37 ++++++++++++++++-------------- src/json_translator.nim | 7 +++--- src/schema/config.nim | 21 ++++++++++++----- syndicate_utils.nimble | 2 +- 6 files changed, 78 insertions(+), 42 deletions(-) diff --git a/config.prs b/config.prs index b00da70..775a49a 100644 --- a/config.prs +++ b/config.prs @@ -1,3 +1,13 @@ version 1 . -JsonSocket = . +Input = . +Output = . + +JsonTranslatorArguments = { + dataspace: #!any +}. + +JsonSocketTranslatorArguments = { + dataspace: #!any + socket: string +}. diff --git a/mpv.config-example.pr b/mpv.config-example.pr index 987e2e0..d0fc8e8 100644 --- a/mpv.config-example.pr +++ b/mpv.config-example.pr @@ -1,28 +1,39 @@ -let ?beepSpace = dataspace - +? $mpv [ + + ?? [ + ! + ] + + ?? [ $log ! ] + +] + +> + ready>> let ?socketPath = "/run/user/1000/mpv.sock" -> -> -? ?mpvSpace> [ - $mpvSpace - $beepSpace ?? [ - $mpvSpace ! - ] - +let ?mpvSpace = dataspace +? ?cap> [ + $cap { + dataspace: $mpvSpace + socket: $socketPath + } + ] diff --git a/src/json_socket_translator.nim b/src/json_socket_translator.nim index c01532d..9de24d7 100644 --- a/src/json_socket_translator.nim +++ b/src/json_socket_translator.nim @@ -7,27 +7,30 @@ import preserves, preserves/jsonhooks, syndicate, syndicate/patterns import ./schema/config -bootDataspace("main") do (ds: Ref; turn: var Turn): - connectStdio(ds, turn) - during(turn, ds, ?config.JsonSocket) do (label: Assertion, socketPath: string): +bootDataspace("main") do (root: Ref; turn: var Turn): + connectStdio(root, turn) + during(turn, root, ?JsonSocketTranslatorArguments) do (ds: Ref, socketPath: string): let socket = newAsyncSocket( - domain = AF_UNIX, - sockType = SOCK_STREAM, - protocol = cast[Protocol](0), - buffered = false) + domain = AF_UNIX, + sockType = SOCK_STREAM, + protocol = cast[Protocol](0), + buffered = false, + ) waitFor connectUnix(socket, socketPath) - onMessage(turn, ds, recordPattern(label, ?toPreserve(1), grab())) do (data: Assertion): + let f = turn.facet + proc processOutput(fut: Future[string]) {.gcsafe.} = + run(f) do (turn: var Turn): + var data = fut.read.parseJson.toPreserve + message(turn, ds, initRecord("recv-json", data)) + socket.recvLine.addCallback(processOutput) + socket.recvLine.addCallback(processOutput) + + onMessage(turn, ds, ?Input) do (data: Assertion): var js: JsonNode if fromPreserve(js, data): - asyncCheck socket.send($js & "\n") - - let f = turn.facet - proc processIncoming(fut: Future[string]) {.gcsafe.} = - var data = fut.read.parseJson.toPreserve(Ref) - run(f) do (turn: var Turn): - message(turn, ds, initRecord(label, 0.toPreserve(Ref), data)) - socket.recvLine.addCallback(processIncoming) - socket.recvLine.addCallback(processIncoming) + asyncCheck(turn, send(socket, $js & "\n")) + else: + writeLine(stderr, "cannot convert assertion to JSON - ", data) runForever() diff --git a/src/json_translator.nim b/src/json_translator.nim index 52402fd..fbd47ae 100644 --- a/src/json_translator.nim +++ b/src/json_translator.nim @@ -7,6 +7,8 @@ import syndicate from preserves/jsonhooks import toPreserveHook +import ./schema/config + proc runChild: string = let params = commandLineParams() if params.len < 1: @@ -31,10 +33,9 @@ proc translate(output: string): Assertion = quit 1 js.toPreserveHook(Ref) - bootDataspace("main") do (root: Ref; turn: var Turn): connectStdio(root, turn) - discard publish(turn, root, - initRecord[Ref]("output", runChild().translate())) + onPublish(turn, root, ?JsonTranslatorArguments) do (ds: Ref): + message(turn, ds, initRecord[Ref]("recv-json", runChild().translate())) runForever() diff --git a/src/schema/config.nim b/src/schema/config.nim index fb10f05..e06008f 100644 --- a/src/schema/config.nim +++ b/src/schema/config.nim @@ -3,12 +3,23 @@ import std/typetraits, preserves type - JsonSocket* {.preservesRecord: "json-socket".} = object - `label`*: Symbol - `path`*: string + Output* {.preservesRecord: "recv-json".} = object + `field0`*: Preserve[void] -proc `$`*(x: JsonSocket): string = + JsonTranslatorArguments* {.preservesDictionary.} = object + `dataspace`* {.preservesEmbedded.}: Preserve[void] + + JsonSocketTranslatorArguments* {.preservesDictionary.} = object + `dataspace`* {.preservesEmbedded.}: Preserve[void] + `socket`*: string + + Input* {.preservesRecord: "send-json".} = object + `field0`*: Preserve[void] + +proc `$`*(x: Output | JsonTranslatorArguments | JsonSocketTranslatorArguments | + Input): string = `$`(toPreserve(x)) -proc encode*(x: JsonSocket): seq[byte] = +proc encode*(x: Output | JsonTranslatorArguments | JsonSocketTranslatorArguments | + Input): seq[byte] = encode(toPreserve(x)) diff --git a/syndicate_utils.nimble b/syndicate_utils.nimble index fd76eb5..a590176 100644 --- a/syndicate_utils.nimble +++ b/syndicate_utils.nimble @@ -1,6 +1,6 @@ # Package -version = "20230410" +version = "20230505" author = "Emery Hemingway" description = "Utilites for Syndicated Actors and Synit" license = "unlicense"