diff --git a/packages/core/protocols/Makefile b/packages/core/protocols/Makefile new file mode 100644 index 0000000..1efe0bd --- /dev/null +++ b/packages/core/protocols/Makefile @@ -0,0 +1,8 @@ +all: schema-bundle.bin + +clean: + rm -f schema-bundle.bin + +schema-bundle.bin: schemas/*.prs + preserves-schemac schemas/*.prs > $@.tmp + mv $@.tmp $@ diff --git a/packages/core/protocols/schema-bundle.bin b/packages/core/protocols/schema-bundle.bin new file mode 100644 index 0000000..0812786 --- /dev/null +++ b/packages/core/protocols/schema-bundle.bin @@ -0,0 +1,16 @@ +“³bundle·µ³tcp„“³schema·³version‘³ definitions·³TcpLocal“³rec“³lit³ tcp-local„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³ TcpRemote“³rec“³lit³ +tcp-remote„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³ TcpPeerInfo“³rec“³lit³tcp-peer„“³tupleµ“³named³handle“³embedded³any„„“³named³local“³refµ„³TcpLocal„„“³named³remote“³refµ„³ TcpRemote„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³timer„“³schema·³version‘³ definitions·³SetTimer“³rec“³lit³ set-timer„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„“³named³kind“³refµ„³ TimerKind„„„„„³ LaterThan“³rec“³lit³ +later-than„“³tupleµ“³named³msecs“³atom³Double„„„„„³ TimerKind“³orµµ±relative“³lit³relative„„µ±absolute“³lit³absolute„„µ±clear“³lit³clear„„„„³ TimerExpired“³rec“³lit³ timer-expired„“³tupleµ“³named³label³any„“³named³msecs“³atom³Double„„„„„„³ embeddedType€„„µ³stream„“³schema·³version‘³ definitions·³Mode“³orµµ±bytes“³lit³bytes„„µ±lines“³refµ„³LineMode„„µ±packet“³rec“³lit³packet„“³tupleµ“³named³size“³atom³ SignedInteger„„„„„„µ±object“³rec“³lit³object„“³tupleµ“³named³ description³any„„„„„„„³Sink“³orµµ±source“³rec“³lit³source„“³tupleµ“³named³ +controller“³embedded“³refµ„³Source„„„„„„„µ± StreamError“³refµ„³ StreamError„„µ±data“³rec“³lit³data„“³tupleµ“³named³payload³any„“³named³mode“³refµ„³Mode„„„„„„µ±eof“³rec“³lit³eof„“³tupleµ„„„„„„³Source“³orµµ±sink“³rec“³lit³sink„“³tupleµ“³named³ +controller“³embedded“³refµ„³Sink„„„„„„„µ± StreamError“³refµ„³ StreamError„„µ±credit“³rec“³lit³credit„“³tupleµ“³named³amount“³refµ„³ CreditAmount„„“³named³mode“³refµ„³Mode„„„„„„„„³LineMode“³orµµ±lf“³lit³lf„„µ±crlf“³lit³crlf„„„„³ StreamError“³rec“³lit³error„“³tupleµ“³named³message“³atom³String„„„„„³ CreditAmount“³orµµ±count“³atom³ SignedInteger„„µ± unbounded“³lit³ unbounded„„„„³StreamConnection“³rec“³lit³stream-connection„“³tupleµ“³named³source“³embedded“³refµ„³Source„„„“³named³sink“³embedded“³refµ„³Sink„„„“³named³spec³any„„„„³StreamListenerError“³rec“³lit³stream-listener-error„“³tupleµ“³named³spec³any„“³named³message“³atom³String„„„„„³StreamListenerReady“³rec“³lit³stream-listener-ready„“³tupleµ“³named³spec³any„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³sturdy„“³schema·³version‘³ definitions·³Lit“³rec“³lit³lit„“³tupleµ“³named³value³any„„„„³Oid“³atom³ SignedInteger„³Alts“³rec“³lit³or„“³tupleµ“³named³ alternatives“³seqof“³refµ„³Rewrite„„„„„„³CArr“³rec“³lit³arr„“³tupleµ“³named³arity“³atom³ SignedInteger„„„„„³CRec“³rec“³lit³rec„“³tupleµ“³named³label³any„“³named³arity“³atom³ SignedInteger„„„„„³PAnd“³rec“³lit³and„“³tupleµ“³named³patterns“³seqof“³refµ„³Pattern„„„„„„³PNot“³rec“³lit³not„“³tupleµ“³named³pattern“³refµ„³Pattern„„„„„³TRef“³rec“³lit³ref„“³tupleµ“³named³binding“³atom³ SignedInteger„„„„„³CDict“³rec“³lit³dict„“³tupleµ„„„³PAtom“³orµµ±Boolean“³lit³Boolean„„µ±Float“³lit³Float„„µ±Double“³lit³Double„„µ± SignedInteger“³lit³ SignedInteger„„µ±String“³lit³String„„µ± +ByteString“³lit³ +ByteString„„µ±Symbol“³lit³Symbol„„„„³PBind“³rec“³lit³bind„“³tupleµ“³named³pattern“³refµ„³Pattern„„„„„³Caveat“³orµµ±Rewrite“³refµ„³Rewrite„„µ±Alts“³refµ„³Alts„„„„³Pattern“³orµµ±PDiscard“³refµ„³PDiscard„„µ±PAtom“³refµ„³PAtom„„µ± PEmbedded“³refµ„³ PEmbedded„„µ±PBind“³refµ„³PBind„„µ±PAnd“³refµ„³PAnd„„µ±PNot“³refµ„³PNot„„µ±Lit“³refµ„³Lit„„µ± PCompound“³refµ„³ PCompound„„„„³Rewrite“³rec“³lit³rewrite„“³tupleµ“³named³pattern“³refµ„³Pattern„„“³named³template“³refµ„³Template„„„„„³WireRef“³orµµ±mine“³tupleµ“³lit„“³named³oid“³refµ„³Oid„„„„„µ±yours“³ tuplePrefixµ“³lit‘„“³named³oid“³refµ„³Oid„„„“³named³ attenuation“³seqof“³refµ„³Caveat„„„„„„„³PDiscard“³rec“³lit³_„“³tupleµ„„„³Template“³orµµ± +TAttenuate“³refµ„³ +TAttenuate„„µ±TRef“³refµ„³TRef„„µ±Lit“³refµ„³Lit„„µ± TCompound“³refµ„³ TCompound„„„„³ PCompound“³rec“³lit³compound„“³tupleµ“³named³ctor“³refµ„³ConstructorSpec„„“³named³members“³refµ„³PCompoundMembers„„„„„³ PEmbedded“³lit³Embedded„³ SturdyRef“³rec“³lit³ref„“³tupleµ“³named³oid³any„“³named³ caveatChain“³seqof“³refµ„³ Attenuation„„„“³named³sig“³atom³ +ByteString„„„„„³ TCompound“³rec“³lit³compound„“³tupleµ“³named³ctor“³refµ„³ConstructorSpec„„“³named³members“³refµ„³TCompoundMembers„„„„„³ +TAttenuate“³rec“³lit³ attenuate„“³tupleµ“³named³template“³refµ„³Template„„“³named³ attenuation“³refµ„³ Attenuation„„„„„³ Attenuation“³seqof“³refµ„³Caveat„„³ConstructorSpec“³orµµ±CRec“³refµ„³CRec„„µ±CArr“³refµ„³CArr„„µ±CDict“³refµ„³CDict„„„„³PCompoundMembers“³dictof³any“³refµ„³Pattern„„³TCompoundMembers“³dictof³any“³refµ„³Template„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³worker„“³schema·³version‘³ definitions·³Instance“³rec“³lit³Instance„“³tupleµ“³named³name“³atom³String„„“³named³argument³any„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³service„“³schema·³version‘³ definitions·³State“³orµµ±started“³lit³started„„µ±ready“³lit³ready„„µ±failed“³lit³failed„„µ±complete“³lit³complete„„„„³ +RunService“³rec“³lit³ run-service„“³tupleµ“³named³ serviceName³any„„„„³ CoreService“³rec“³lit³ core-service„“³tupleµ“³named³ serviceName³any„„„„³ ServiceState“³rec“³lit³ service-state„“³tupleµ“³named³ serviceName³any„“³named³state“³refµ„³State„„„„„³ ServiceObject“³rec“³lit³service-object„“³tupleµ“³named³ serviceName³any„“³named³object³any„„„„³RequireService“³rec“³lit³require-service„“³tupleµ“³named³ serviceName³any„„„„³ServiceDependency“³rec“³lit³ +depends-on„“³tupleµ“³named³depender³any„“³named³dependee“³refµ„³ ServiceState„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³protocol„“³schema·³version‘³ definitions·³Oid“³atom³ SignedInteger„³Sync“³rec“³lit³sync„“³tupleµ“³named³peer“³embedded“³lit„„„„„„³Turn“³seqof“³refµ„³ TurnEvent„„³Error“³rec“³lit³error„“³tupleµ“³named³message“³atom³String„„“³named³detail³any„„„„³Event“³orµµ±Assert“³refµ„³Assert„„µ±Retract“³refµ„³Retract„„µ±Message“³refµ„³Message„„µ±Sync“³refµ„³Sync„„„„³Assert“³rec“³lit³assert„“³tupleµ“³named³ assertion“³refµ„³ Assertion„„“³named³handle“³refµ„³Handle„„„„„³Handle“³atom³ SignedInteger„³Packet“³orµµ±Turn“³refµ„³Turn„„µ±Error“³refµ„³Error„„„„³Message“³rec“³lit³message„“³tupleµ“³named³body“³refµ„³ Assertion„„„„„³Retract“³rec“³lit³retract„“³tupleµ“³named³handle“³refµ„³Handle„„„„„³ Assertion³any³ TurnEvent“³tupleµ“³named³oid“³refµ„³Oid„„“³named³event“³refµ„³Event„„„„„³ embeddedType€„„µ³ dataspace„“³schema·³version‘³ definitions·³Observe“³rec“³lit³Observe„“³tupleµ“³named³pattern“³refµ³dataspacePatterns„³Pattern„„“³named³observer“³embedded³any„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³ +gatekeeper„“³schema·³version‘³ definitions·³Bind“³rec“³lit³bind„“³tupleµ“³named³oid³any„“³named³key“³atom³ +ByteString„„“³named³target“³embedded³any„„„„„³Resolve“³rec“³lit³resolve„“³tupleµ“³named³ sturdyref“³refµ³sturdy„³ SturdyRef„„“³named³observer“³embedded“³embedded³any„„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³ racketEvent„“³schema·³version‘³ definitions·³ RacketEvent“³rec“³lit³ racket-event„“³tupleµ“³named³source“³embedded³any„„“³named³event“³embedded³any„„„„„„³ embeddedType€„„µ³transportAddress„“³schema·³version‘³ definitions·³Tcp“³rec“³lit³tcp„“³tupleµ“³named³host“³atom³String„„“³named³port“³atom³ SignedInteger„„„„„³Unix“³rec“³lit³unix„“³tupleµ“³named³path“³atom³String„„„„„³Stdio“³rec“³lit³stdio„“³tupleµ„„„³ WebSocket“³rec“³lit³ws„“³tupleµ“³named³url“³atom³String„„„„„„³ embeddedType€„„µ³dataspacePatterns„“³schema·³version‘³ definitions·³CArr“³rec“³lit³arr„“³tupleµ“³named³arity“³atom³ SignedInteger„„„„„³CRec“³rec“³lit³rec„“³tupleµ“³named³label³any„“³named³arity“³atom³ SignedInteger„„„„„³DLit“³rec“³lit³lit„“³tupleµ“³named³value³any„„„„³CDict“³rec“³lit³dict„“³tupleµ„„„³DBind“³rec“³lit³bind„“³tupleµ“³named³pattern“³refµ„³Pattern„„„„„³Pattern“³orµµ±DDiscard“³refµ„³DDiscard„„µ±DBind“³refµ„³DBind„„µ±DLit“³refµ„³DLit„„µ± DCompound“³refµ„³ DCompound„„„„³DDiscard“³rec“³lit³_„“³tupleµ„„„³ DCompound“³orµµ±rec“³rec“³lit³compound„“³tupleµ“³named³ctor“³refµ„³CRec„„“³named³members“³dictof“³atom³ SignedInteger„“³refµ„³Pattern„„„„„„„µ±arr“³rec“³lit³compound„“³tupleµ“³named³ctor“³refµ„³CArr„„“³named³members“³dictof“³atom³ SignedInteger„“³refµ„³Pattern„„„„„„„µ±dict“³rec“³lit³compound„“³tupleµ“³named³ctor“³refµ„³CDict„„“³named³members“³dictof³any“³refµ„³Pattern„„„„„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³secureChatProtocol„“³schema·³version‘³ definitions·³Join“³rec“³lit³ +joinedUser„“³tupleµ“³named³uid“³refµ„³UserId„„“³named³handle“³embedded“³refµ„³Session„„„„„„³Says“³rec“³lit³says„“³tupleµ“³named³who“³refµ„³UserId„„“³named³what“³atom³String„„„„„³UserId“³atom³ SignedInteger„³Session“³orµµ± observeUsers“³rec“³lit³Observe„“³tupleµ“³lit³user„“³named³observer“³embedded“³refµ„³UserInfo„„„„„„„µ± observeSpeech“³rec“³lit³Observe„“³tupleµ“³lit³says„“³named³observer“³embedded“³refµ„³Says„„„„„„„µ± NickClaim“³refµ„³ NickClaim„„µ±Says“³refµ„³Says„„„„³UserInfo“³rec“³lit³user„“³tupleµ“³named³uid“³refµ„³UserId„„“³named³name“³atom³String„„„„„³ NickClaim“³rec“³lit³ claimNick„“³tupleµ“³named³uid“³refµ„³UserId„„“³named³name“³atom³String„„“³named³k“³embedded“³refµ„³NickClaimResponse„„„„„„³ NickConflict“³rec“³lit³ nickConflict„“³tupleµ„„„³NickClaimResponse“³orµµ±true“³lit„„µ± NickConflict“³refµ„³ NickConflict„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„µ³simpleChatProtocol„“³schema·³version‘³ definitions·³Says“³rec“³lit³Says„“³tupleµ“³named³who“³atom³String„„“³named³what“³atom³String„„„„„³Present“³rec“³lit³Present„“³tupleµ“³named³username“³atom³String„„„„„„³ embeddedType“³refµ³ EntityRef„³Cap„„„„„ \ No newline at end of file diff --git a/packages/core/protocols/schemas/dataspace.prs b/packages/core/protocols/schemas/dataspace.prs new file mode 100644 index 0000000..25c6640 --- /dev/null +++ b/packages/core/protocols/schemas/dataspace.prs @@ -0,0 +1,4 @@ +version 1 . +embeddedType EntityRef.Cap . + +Observe = . diff --git a/packages/core/protocols/schemas/dataspacePatterns.prs b/packages/core/protocols/schemas/dataspacePatterns.prs new file mode 100644 index 0000000..0a69faf --- /dev/null +++ b/packages/core/protocols/schemas/dataspacePatterns.prs @@ -0,0 +1,16 @@ +version 1 . +embeddedType EntityRef.Cap . + +; Dataspace patterns: a sublanguage of attenuation patterns. +Pattern = DDiscard / DBind / DLit / DCompound . + +DDiscard = <_>. +DBind = . +DLit = . +DCompound = @rec + / @arr + / @dict . + +CRec = . +CArr = . +CDict = . diff --git a/packages/core/protocols/schemas/gatekeeper.prs b/packages/core/protocols/schemas/gatekeeper.prs new file mode 100644 index 0000000..43da79a --- /dev/null +++ b/packages/core/protocols/schemas/gatekeeper.prs @@ -0,0 +1,5 @@ +version 1 . +embeddedType EntityRef.Cap . + +Resolve = . +Bind = . diff --git a/packages/core/protocols/schemas/protocol.prs b/packages/core/protocols/schemas/protocol.prs new file mode 100644 index 0000000..42b5038 --- /dev/null +++ b/packages/core/protocols/schemas/protocol.prs @@ -0,0 +1,17 @@ +version 1 . + +Packet = Turn / Error . + +Error = . + +Assertion = any . +Handle = int . +Event = Assert / Retract / Message / Sync . +Oid = int . +Turn = [TurnEvent ...]. +TurnEvent = [@oid Oid @event Event]. + +Assert = . +Retract = . +Message = . +Sync = . diff --git a/packages/core/protocols/schemas/racketEvent.prs b/packages/core/protocols/schemas/racketEvent.prs new file mode 100644 index 0000000..36985a7 --- /dev/null +++ b/packages/core/protocols/schemas/racketEvent.prs @@ -0,0 +1,3 @@ +version 1 . + +RacketEvent = . diff --git a/packages/core/protocols/schemas/secureChatProtocol.prs b/packages/core/protocols/schemas/secureChatProtocol.prs new file mode 100644 index 0000000..6899495 --- /dev/null +++ b/packages/core/protocols/schemas/secureChatProtocol.prs @@ -0,0 +1,21 @@ +version 1 . +embeddedType EntityRef.Cap . + +UserId = int . + +Join = . + +Session = @observeUsers + / @observeSpeech + / NickClaim + / Says +. + +NickClaim = . +NickClaimResponse = #t / NickConflict . + +UserInfo = . + +Says = . + +NickConflict = . diff --git a/packages/core/protocols/schemas/service.prs b/packages/core/protocols/schemas/service.prs new file mode 100644 index 0000000..330eca5 --- /dev/null +++ b/packages/core/protocols/schemas/service.prs @@ -0,0 +1,51 @@ +version 1 . +embeddedType EntityRef.Cap . + +; Asserts that a service should begin (and stay) running after waiting +; for its dependencies and considering reverse-dependencies, blocks, +; and so on. +RequireService = . + +; Asserts that a service should begin (and stay) running RIGHT NOW, +; without considering its dependencies. +RunService = . + +; Asserts one or more current states of service `serviceName`. The +; overall state of the service is the union of asserted `state`s. +; +; Only a few combinations make sense: +; - `started` +; - `started` + `ready` +; - `failed` +; - `complete` +; +ServiceState = . + +; A running service publishes zero or more of these. The details of +; the object vary by service. +; +ServiceObject = . + +; Possible service states. +State = +/ ; The service has begun its startup routine, and may or may not be + ; ready to take requests from other parties. + =started +/ ; The service is ready to take requests from other parties. + ; (This state is special in that it is asserted *in addition* to `started`.) + =ready +/ ; The service has failed. + =failed +/ ; The service has completed execution. + =complete +. + +; Asserts that, when `depender` is `require-service`d, it should not +; be started until `dependee` has been asserted. +ServiceDependency = . + +; Asserts that the service is a "core" service. If *not* specified for +; a service X, where X is not `` for some Y, the system +; acts as if ` ready>>` +; were asserted. +CoreService = . diff --git a/packages/core/protocols/schemas/simpleChatProtocol.prs b/packages/core/protocols/schemas/simpleChatProtocol.prs new file mode 100644 index 0000000..c738739 --- /dev/null +++ b/packages/core/protocols/schemas/simpleChatProtocol.prs @@ -0,0 +1,5 @@ +version 1 . +embeddedType EntityRef.Cap . + +Present = . +Says = . diff --git a/packages/core/protocols/schemas/stream.prs b/packages/core/protocols/schemas/stream.prs new file mode 100644 index 0000000..f59101f --- /dev/null +++ b/packages/core/protocols/schemas/stream.prs @@ -0,0 +1,38 @@ +version 1 . +embeddedType EntityRef.Cap . + +; Assertion: +StreamConnection = . + +; Assertions: +StreamListenerReady = . +StreamListenerError = . + +; Assertion: +StreamError = . + +Source = + ; Assertions: + / + / StreamError + + ; Messages: + / +. + +Sink = + ; Assertions: + / + / StreamError + + ; Messages: + / + / +. + +; Value: +CreditAmount = @count int / @unbounded =unbounded . + +; Value: +Mode = =bytes / @lines LineMode / / . +LineMode = =lf / =crlf . diff --git a/packages/core/protocols/schemas/sturdy.prs b/packages/core/protocols/schemas/sturdy.prs new file mode 100644 index 0000000..85f6c6c --- /dev/null +++ b/packages/core/protocols/schemas/sturdy.prs @@ -0,0 +1,44 @@ +version 1 . +embeddedType EntityRef.Cap . + +; Each Attenuation is a stage. The sequence of Attenuations is run RIGHT-TO-LEFT. +; That is, the newest Attenuations are at the right. +SturdyRef = . + +; An individual Attenuation is run RIGHT-TO-LEFT. +; That is, the newest Caveats are at the right. +Attenuation = [Caveat ...]. + +; embodies 1st-party caveats over assertion structure, but nothing else +; can add 3rd-party caveats and richer predicates later +Caveat = Rewrite / Alts . +Rewrite = . +Alts = . + +Oid = int . +WireRef = @mine [0 @oid Oid] / @yours [1 @oid Oid @attenuation Caveat ...]. + +;--------------------------------------------------------------------------- + +ConstructorSpec = CRec / CArr / CDict . +CRec = . +CArr = . +CDict = . + +Lit = . + +Pattern = PDiscard / PAtom / PEmbedded / PBind / PAnd / PNot / Lit / PCompound . +PDiscard = <_>. +PAtom = =Boolean / =Float / =Double / =SignedInteger / =String / =ByteString / =Symbol . +PEmbedded = =Embedded . +PBind = . +PAnd = . +PNot = . +PCompound = . +PCompoundMembers = { any: Pattern ...:... }. + +Template = TAttenuate / TRef / Lit / TCompound . +TAttenuate = . +TRef = . +TCompound = . +TCompoundMembers = { any: Template ...:... }. diff --git a/packages/core/protocols/schemas/tcp.prs b/packages/core/protocols/schemas/tcp.prs new file mode 100644 index 0000000..cc34741 --- /dev/null +++ b/packages/core/protocols/schemas/tcp.prs @@ -0,0 +1,7 @@ +version 1 . +embeddedType EntityRef.Cap . + +TcpRemote = . +TcpLocal = . + +TcpPeerInfo = . diff --git a/packages/core/protocols/schemas/timer.prs b/packages/core/protocols/schemas/timer.prs new file mode 100644 index 0000000..30ea166 --- /dev/null +++ b/packages/core/protocols/schemas/timer.prs @@ -0,0 +1,7 @@ +version 1 . + +SetTimer = . +TimerExpired = . +TimerKind = =relative / =absolute / =clear . + +LaterThan = . diff --git a/packages/core/protocols/schemas/transportAddress.prs b/packages/core/protocols/schemas/transportAddress.prs new file mode 100644 index 0000000..ee51a10 --- /dev/null +++ b/packages/core/protocols/schemas/transportAddress.prs @@ -0,0 +1,6 @@ +version 1 . + +Tcp = . +Unix = . +WebSocket = . +Stdio = . diff --git a/packages/core/protocols/schemas/worker.prs b/packages/core/protocols/schemas/worker.prs new file mode 100644 index 0000000..b0fb53e --- /dev/null +++ b/packages/core/protocols/schemas/worker.prs @@ -0,0 +1,4 @@ +version 1 . +embeddedType EntityRef.Cap . + +Instance = .