Add http_driver from syndicate-nim

This commit is contained in:
Emery Hemingway 2024-03-18 19:31:45 +00:00
parent 1f099d6bd2
commit d40c29ecad
7 changed files with 65 additions and 4 deletions

View File

@ -1,2 +1,3 @@
include_rules include_rules
: lock.json |> !nim_cfg |> | ./<lock> : |> !nim_lk |> {lockfile}
: {lockfile} |> !nim_cfg |> | ./<lock>

View File

@ -26,6 +26,10 @@ UnixAddress = <unix @path string>.
SocketAddress = TcpAddress / UnixAddress . SocketAddress = TcpAddress / UnixAddress .
HttpDriverArguments = <http-driver {
dataspace: #:any
}>.
JsonSocketTranslatorArguments = <json-socket-translator { JsonSocketTranslatorArguments = <json-socket-translator {
dataspace: #:any dataspace: #:any
socket: SocketAddress socket: SocketAddress

View File

@ -2,9 +2,11 @@
pkgs.buildNimPackage { pkgs.buildNimPackage {
name = "syndicate_utils"; name = "syndicate_utils";
propagatedNativeBuildInputs = [ pkgs.pkg-config ]; propagatedNativeBuildInputs =
propagatedBuildInputs = builtins.attrValues { inherit (pkgs) pkg-config solo5; };
[ pkgs.postgresql pkgs.sqlite pkgs.libxml2 pkgs.libxslt ]; propagatedBuildInputs = builtins.attrValues {
inherit (pkgs) getdns postgresql solo5 sqlite libxml2 libxslt;
};
lockFile = ./lock.json; lockFile = ./lock.json;
src = pkgs.lib.sources.cleanSource ./.; src = pkgs.lib.sources.cleanSource ./.;
} }

View File

@ -50,6 +50,12 @@ type
XsltArguments* {.preservesRecord: "xslt".} = object XsltArguments* {.preservesRecord: "xslt".} = object
`field0`*: XsltArgumentsField0 `field0`*: XsltArgumentsField0
HttpDriverArgumentsField0* {.preservesDictionary.} = object
`dataspace`* {.preservesEmbedded.}: EmbeddedRef
HttpDriverArguments* {.preservesRecord: "http-driver".} = object
`field0`*: HttpDriverArgumentsField0
WebhooksArgumentsField0* {.preservesDictionary.} = object WebhooksArgumentsField0* {.preservesDictionary.} = object
`endpoints`*: Table[seq[string], EmbeddedRef] `endpoints`*: Table[seq[string], EmbeddedRef]
`listen`*: Tcp `listen`*: Tcp
@ -116,6 +122,7 @@ proc `$`*(x: WebsocketArguments | JsonTranslatorArguments | SocketAddress |
JsonTranslatorConnected | JsonTranslatorConnected |
JsonSocketTranslatorArguments | JsonSocketTranslatorArguments |
XsltArguments | XsltArguments |
HttpDriverArguments |
WebhooksArguments | WebhooksArguments |
FileSystemUsageArguments | FileSystemUsageArguments |
SqliteArguments | SqliteArguments |
@ -134,6 +141,7 @@ proc encode*(x: WebsocketArguments | JsonTranslatorArguments | SocketAddress |
JsonTranslatorConnected | JsonTranslatorConnected |
JsonSocketTranslatorArguments | JsonSocketTranslatorArguments |
XsltArguments | XsltArguments |
HttpDriverArguments |
WebhooksArguments | WebhooksArguments |
FileSystemUsageArguments | FileSystemUsageArguments |
SqliteArguments | SqliteArguments |

View File

@ -9,6 +9,7 @@ import ./syndesizer/[
base64_decoder, base64_decoder,
cache_actor, cache_actor,
file_system_usage, file_system_usage,
http_driver,
json_socket_translator, json_socket_translator,
json_translator, json_translator,
pulses, pulses,
@ -20,6 +21,7 @@ runActor("syndesizer") do (turn: var Turn):
discard spawnBase64Decoder(turn, ds) discard spawnBase64Decoder(turn, ds)
discard spawnCacheActor(turn, ds) discard spawnCacheActor(turn, ds)
discard spawnFileSystemUsageActor(turn, ds) discard spawnFileSystemUsageActor(turn, ds)
discard spawnHttpDriver(turn, ds)
discard spawnJsonSocketTranslator(turn, ds) discard spawnJsonSocketTranslator(turn, ds)
discard spawnJsonStdioTranslator(turn, ds) discard spawnJsonStdioTranslator(turn, ds)
discard spawnPulseActor(turn, ds) discard spawnPulseActor(turn, ds)

View File

@ -0,0 +1,42 @@
# SPDX-FileCopyrightText: ☭ Emery Hemingway
# SPDX-License-Identifier: Unlicense
## Thin wrapper over `syndicate/drivers/http_driver`.
import pkg/preserves, pkg/syndicate
import pkg/syndicate/drivers/http_driver
import pkg/taps
import ../schema/config
proc spawnHttpDriver*(turn: var Turn; ds: Cap): Actor {.discardable.}=
http_driver.spawnHttpDriver(turn, ds)
during(turn, ds, ?:HttpDriverArguments) do (ds: Cap):
http_driver.spawnHttpDriver(turn, ds)
when isMainModule:
import syndicate/relays
when defined(solo5):
import solo5
acquireDevices([("eth0", netBasic)], netAcquireHook)
proc envRoute: Route =
var pr = parsePreserves $solo5_start_info.cmdline
if result.fromPreserves pr:
return
elif pr.isSequence:
for e in pr:
if result.fromPreserves e:
return
quit("failed to parse command line for route to Syndicate gatekeeper")
runActor("main") do (turn: var Turn):
let ds = newDataspace(turn)
spawnRelays(turn, ds)
resolve(turn, ds, envRoute(), spawnHttpDriver)
else:
runActor("main") do (turn: var Turn):
resolveEnvironment(turn) do (turn: var Turn; ds: Cap):
spawnHttpDriver(turn, ds)

View File

@ -0,0 +1,2 @@
define:ipv6Enabled
include:"std/assertions"