Compare commits
2 Commits
2dde9d75ed
...
043c916f99
Author | SHA1 | Date |
---|---|---|
Emery Hemingway | 043c916f99 | |
Emery Hemingway | d03d8f9db0 |
|
@ -0,0 +1 @@
|
||||||
|
/nim.cfg
|
|
@ -0,0 +1,3 @@
|
||||||
|
include_rules
|
||||||
|
: |> !nim_lk |> lock.json
|
||||||
|
: lock.json |> !nim_cfg |> | ./<lock>
|
|
@ -1,2 +1,4 @@
|
||||||
include ../syndicate-nim/depends.tup
|
include ../syndicate-nim/depends.tup
|
||||||
|
NIM = $(DIRENV) $(NIM)
|
||||||
NIM_FLAGS += --path:$(TUP_CWD)/../syndicate-nim/src
|
NIM_FLAGS += --path:$(TUP_CWD)/../syndicate-nim/src
|
||||||
|
NIM_GROUPS += $(TUP_CWD)/<lock>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
bin = @["icalendar_actor"]
|
bin = @["icalendar_actor"]
|
||||||
license = "Unlicense"
|
license = "Unlicense"
|
||||||
requires: "nim", "syndicate"
|
|
||||||
srcDir = "src"
|
srcDir = "src"
|
||||||
version = "20230825"
|
version = "20230825"
|
||||||
|
requires "nim", "syndicate"
|
||||||
|
|
|
@ -7,4 +7,4 @@ Property = [@label string @parameters Parameters @type string @values any ...].
|
||||||
|
|
||||||
Parameters = {symbol: string ...:...}.
|
Parameters = {symbol: string ...:...}.
|
||||||
|
|
||||||
CalendarDataspace = <calendar @url string @dataspace #!any>.
|
CalendarDataspace = <calendar @url string @dataspace #:any>.
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
{
|
||||||
|
"depends": [
|
||||||
|
{
|
||||||
|
"method": "fetchzip",
|
||||||
|
"packages": [
|
||||||
|
"bigints"
|
||||||
|
],
|
||||||
|
"path": "/nix/store/jvrm392g8adfsgf36prgwkbyd7vh5jsw-source",
|
||||||
|
"rev": "86ea14d31eea9275e1408ca34e6bfe9c99989a96",
|
||||||
|
"sha256": "15pcpmnk1bnw3k8769rjzcpg00nahyrypwbxs88jnwr4aczp99j4",
|
||||||
|
"srcDir": "src",
|
||||||
|
"url": "https://github.com/ehmry/nim-bigints/archive/86ea14d31eea9275e1408ca34e6bfe9c99989a96.tar.gz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "fetchzip",
|
||||||
|
"packages": [
|
||||||
|
"hashlib"
|
||||||
|
],
|
||||||
|
"path": "/nix/store/fav82xdbicvlk34nmcbl89zx99lr3mbs-source",
|
||||||
|
"rev": "f9455d4be988e14e3dc7933eb7cc7d7c4820b7ac",
|
||||||
|
"sha256": "1sx6j952lj98629qfgr7ds5aipyw9d6lldcnnqs205wpj4pkcjb3",
|
||||||
|
"srcDir": "",
|
||||||
|
"url": "https://github.com/ehmry/hashlib/archive/f9455d4be988e14e3dc7933eb7cc7d7c4820b7ac.tar.gz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "fetchzip",
|
||||||
|
"packages": [
|
||||||
|
"nimcrypto"
|
||||||
|
],
|
||||||
|
"path": "/nix/store/jwz8pqbv6rsm8w4fjzdb37r0wzjn5hv0-source",
|
||||||
|
"rev": "d58da671799c69c0b3208b96c154e13c8b1a9e90",
|
||||||
|
"sha256": "12dm0gsy10ppga7zf7hpf4adaqjrd9b740n2w926xyazq1njf6k9",
|
||||||
|
"srcDir": "",
|
||||||
|
"url": "https://github.com/cheatfate/nimcrypto/archive/d58da671799c69c0b3208b96c154e13c8b1a9e90.tar.gz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "fetchzip",
|
||||||
|
"packages": [
|
||||||
|
"npeg"
|
||||||
|
],
|
||||||
|
"path": "/nix/store/ffkxmjmigfs7zhhiiqm0iw2c34smyciy-source",
|
||||||
|
"rev": "26d62fdc40feb84c6533956dc11d5ee9ea9b6c09",
|
||||||
|
"sha256": "0xpzifjkfp49w76qmaylan8q181bs45anmp46l4bwr3lkrr7bpwh",
|
||||||
|
"srcDir": "src",
|
||||||
|
"url": "https://github.com/zevv/npeg/archive/26d62fdc40feb84c6533956dc11d5ee9ea9b6c09.tar.gz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "fetchzip",
|
||||||
|
"packages": [
|
||||||
|
"preserves"
|
||||||
|
],
|
||||||
|
"path": "/nix/store/2hy124xgabz134dxj3wji7mp47fdwy3w-source",
|
||||||
|
"rev": "9ae435a83c6d5028405538af5d24a023af625b6e",
|
||||||
|
"sha256": "1k7ywcp1a53x2fpc6wc2b0qzb264dkifash0s1wcp66rw3lx15k2",
|
||||||
|
"srcDir": "src",
|
||||||
|
"url": "https://git.syndicate-lang.org/ehmry/preserves-nim/archive/9ae435a83c6d5028405538af5d24a023af625b6e.tar.gz"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"method": "fetchzip",
|
||||||
|
"packages": [
|
||||||
|
"syndicate"
|
||||||
|
],
|
||||||
|
"path": "/nix/store/y9f3j4m7vmhf8gbpkvqa77jvzrc5ynlm-source",
|
||||||
|
"rev": "50a77995bcfe15e6062f54c6af0f55fba850c329",
|
||||||
|
"sha256": "1avrk86c34qg39w8vlixsksli2gwgbsf29jhlap27ffzdbj2zbal",
|
||||||
|
"srcDir": "src",
|
||||||
|
"url": "https://git.syndicate-lang.org/ehmry/syndicate-nim/archive/50a77995bcfe15e6062f54c6af0f55fba850c329.tar.gz"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -1,5 +1,2 @@
|
||||||
let
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
syndicate = builtins.getFlake "syndicate";
|
pkgs.buildNimPackage { name = "dummy"; }
|
||||||
pkgs =
|
|
||||||
import <nixpkgs> { overlays = (builtins.attrValues syndicate.overlays); };
|
|
||||||
in pkgs.nim2Packages.syndicate_utils
|
|
||||||
|
|
|
@ -2,13 +2,10 @@
|
||||||
# SPDX-License-Identifier: Unlicense
|
# SPDX-License-Identifier: Unlicense
|
||||||
|
|
||||||
import std/[json, sequtils, tables, uri]
|
import std/[json, sequtils, tables, uri]
|
||||||
import preserves, preserves/jsonhooks, syndicate
|
import preserves, preserves/jsonhooks, syndicate, syndicate/relays
|
||||||
from syndicate/protocols/dataspace import Observe
|
|
||||||
|
|
||||||
import ./icalendar_components
|
import ./icalendar_components
|
||||||
|
|
||||||
type Observe = dataspace.Observe[Cap]
|
|
||||||
|
|
||||||
type BootArgs {.preservesDictionary.} = object
|
type BootArgs {.preservesDictionary.} = object
|
||||||
dataspace: Cap
|
dataspace: Cap
|
||||||
|
|
||||||
|
@ -19,24 +16,24 @@ proc importCalendar(location: string): Component =
|
||||||
else:
|
else:
|
||||||
var
|
var
|
||||||
js = parseFile(uri.path)
|
js = parseFile(uri.path)
|
||||||
pr = jsonhooks.toPreserveHook(js, void)
|
pr = jsonhooks.toPreservesHook(js)
|
||||||
if not result.fromPreserve(pr):
|
if not result.fromPreserves(pr):
|
||||||
# TODO: convert directly from JsonNode
|
# TODO: convert directly from JsonNode
|
||||||
raise newException(ValueError, "Preserves was not a valid iCalendar component")
|
raise newException(ValueError, "Preserves was not a valid iCalendar component")
|
||||||
if result.label != "vcalendar":
|
if result.label != "vcalendar":
|
||||||
raise newException(ValueError, "Preserves was not a valid vcalendar @component")
|
raise newException(ValueError, "Preserves was not a valid vcalendar @component")
|
||||||
|
|
||||||
proc toPreserveHook(prop: Property; E: typedesc): Preserve[E] =
|
proc toPreserveHook(prop: Property): Value =
|
||||||
initRecord(prop.label,
|
initRecord(prop.label,
|
||||||
prop.parameters.toPreserve(E),
|
prop.parameters.toPreserves,
|
||||||
prop.`type`.toPreserve(E),
|
prop.`type`.toPreserves,
|
||||||
prop.values.toPreserve(E),
|
prop.values.toPreserves,
|
||||||
)
|
)
|
||||||
|
|
||||||
proc toPreserveHook(comp: Component; E: typedesc): Preserve[E] =
|
proc toPreserveHook(comp: Component): Value =
|
||||||
initRecord(comp.label,
|
initRecord(comp.label,
|
||||||
comp.properties.toPreserve(E),
|
comp.properties.toPreserves,
|
||||||
comp.components.toPreserve(E),
|
comp.components.toPreserves,
|
||||||
)
|
)
|
||||||
|
|
||||||
proc serve(turn: var Turn; url: string): Cap =
|
proc serve(turn: var Turn; url: string): Cap =
|
||||||
|
@ -50,11 +47,11 @@ proc serve(turn: var Turn; url: string): Cap =
|
||||||
ds
|
ds
|
||||||
|
|
||||||
runActor("icalendar_actor") do (root: Cap; turn: var Turn):
|
runActor("icalendar_actor") do (root: Cap; turn: var Turn):
|
||||||
connectStdio(root, turn)
|
connectStdio(turn, root)
|
||||||
stderr.writeLine "connected stdio to ", root
|
stderr.writeLine "connected stdio to ", root
|
||||||
during(turn, root, ?BootArgs) do (ds: Cap):
|
during(turn, root, ?:BootArgs) do (ds: Cap):
|
||||||
stderr.writeLine "got dataspace at ", ds
|
stderr.writeLine "got dataspace at ", ds
|
||||||
during(turn, ds, ?Observe(pattern: !CalendarDataspace) ?? {0: grabLit()}) do (url: string):
|
during(turn, ds, ?Observe(pattern: !CalendarDataspace) ?? {0: grabLit()}) do (url: string):
|
||||||
let cap = serve(turn, url)
|
let cap = serve(turn, url)
|
||||||
stderr.writeLine "serving ", url, " at ", cap
|
stderr.writeLine "serving ", url, " at ", cap
|
||||||
discard publish(turn, ds, initRecord("calendar", url.toPreserve(Cap), cap.toPreserve(Cap)))
|
discard publish(turn, ds, initRecord("calendar", url.toPreserves, cap.embed))
|
||||||
|
|
|
@ -5,22 +5,22 @@ import
|
||||||
type
|
type
|
||||||
CalendarDataspace* {.preservesRecord: "calendar".} = object
|
CalendarDataspace* {.preservesRecord: "calendar".} = object
|
||||||
`url`*: string
|
`url`*: string
|
||||||
`dataspace`* {.preservesEmbedded.}: Preserve[void]
|
`dataspace`* {.preservesEmbedded.}: EmbeddedRef
|
||||||
|
|
||||||
Property* {.preservesTuple.} = object
|
Property* {.preservesTuple.} = object
|
||||||
`label`*: string
|
`label`*: string
|
||||||
`parameters`*: Parameters
|
`parameters`*: Parameters
|
||||||
`type`*: string
|
`type`*: string
|
||||||
`values`* {.preservesTupleTail.}: seq[Preserve[void]]
|
`values`* {.preservesTupleTail.}: seq[Value]
|
||||||
|
|
||||||
Parameters* = Table[Symbol, string]
|
Parameters* = Table[Symbol, string]
|
||||||
Component* {.acyclic, preservesTuple.} = ref object
|
Component* {.preservesTuple.} = object
|
||||||
`label`*: string
|
`label`*: string
|
||||||
`properties`*: seq[Property]
|
`properties`*: seq[Property]
|
||||||
`components`*: seq[Component]
|
`components`*: seq[Component]
|
||||||
|
|
||||||
proc `$`*(x: CalendarDataspace | Property | Parameters | Component): string =
|
proc `$`*(x: CalendarDataspace | Property | Parameters | Component): string =
|
||||||
`$`(toPreserve(x))
|
`$`(toPreserves(x))
|
||||||
|
|
||||||
proc encode*(x: CalendarDataspace | Property | Parameters | Component): seq[byte] =
|
proc encode*(x: CalendarDataspace | Property | Parameters | Component): seq[byte] =
|
||||||
encode(toPreserve(x))
|
encode(toPreserves(x))
|
||||||
|
|
Loading…
Reference in New Issue