This commit is contained in:
Emery Hemingway 2024-03-15 12:23:50 +00:00
parent d03d8f9db0
commit 043c916f99
9 changed files with 93 additions and 20 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/nim.cfg

3
Tupfile Normal file
View File

@ -0,0 +1,3 @@
include_rules
: |> !nim_lk |> lock.json
: lock.json |> !nim_cfg |> | ./<lock>

View File

@ -1,2 +1,4 @@
include ../syndicate-nim/depends.tup
NIM = $(DIRENV) $(NIM)
NIM_FLAGS += --path:$(TUP_CWD)/../syndicate-nim/src
NIM_GROUPS += $(TUP_CWD)/<lock>

View File

@ -1,5 +1,5 @@
bin = @["icalendar_actor"]
license = "Unlicense"
requires: "nim", "syndicate"
srcDir = "src"
version = "20230825"
requires "nim", "syndicate"

View File

@ -7,4 +7,4 @@ Property = [@label string @parameters Parameters @type string @values any ...].
Parameters = {symbol: string ...:...}.
CalendarDataspace = <calendar @url string @dataspace #!any>.
CalendarDataspace = <calendar @url string @dataspace #:any>.

70
lock.json Normal file
View File

@ -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"
}
]
}

View File

@ -1,5 +1,2 @@
let
syndicate = builtins.getFlake "syndicate";
pkgs =
import <nixpkgs> { overlays = (builtins.attrValues syndicate.overlays); };
in pkgs.nim2Packages.syndicate_utils
{ pkgs ? import <nixpkgs> { } }:
pkgs.buildNimPackage { name = "dummy"; }

View File

@ -23,17 +23,17 @@ proc importCalendar(location: string): Component =
if result.label != "vcalendar":
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,
prop.parameters.toPreserve(E),
prop.`type`.toPreserve(E),
prop.values.toPreserve(E),
prop.parameters.toPreserves,
prop.`type`.toPreserves,
prop.values.toPreserves,
)
proc toPreserveHook(comp: Component; E: typedesc): Preserve[E] =
proc toPreserveHook(comp: Component): Value =
initRecord(comp.label,
comp.properties.toPreserve(E),
comp.components.toPreserve(E),
comp.properties.toPreserves,
comp.components.toPreserves,
)
proc serve(turn: var Turn; url: string): Cap =
@ -54,4 +54,4 @@ runActor("icalendar_actor") do (root: Cap; turn: var Turn):
during(turn, ds, ?Observe(pattern: !CalendarDataspace) ?? {0: grabLit()}) do (url: string):
let cap = serve(turn, url)
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))

View File

@ -5,22 +5,22 @@ import
type
CalendarDataspace* {.preservesRecord: "calendar".} = object
`url`*: string
`dataspace`* {.preservesEmbedded.}: Preserve[void]
`dataspace`* {.preservesEmbedded.}: EmbeddedRef
Property* {.preservesTuple.} = object
`label`*: string
`parameters`*: Parameters
`type`*: string
`values`* {.preservesTupleTail.}: seq[Preserve[void]]
`values`* {.preservesTupleTail.}: seq[Value]
Parameters* = Table[Symbol, string]
Component* {.acyclic, preservesTuple.} = ref object
Component* {.preservesTuple.} = object
`label`*: string
`properties`*: seq[Property]
`components`*: seq[Component]
proc `$`*(x: CalendarDataspace | Property | Parameters | Component): string =
`$`(toPreserve(x))
`$`(toPreserves(x))
proc encode*(x: CalendarDataspace | Property | Parameters | Component): seq[byte] =
encode(toPreserve(x))
encode(toPreserves(x))