28 lines
865 B
Racket
28 lines
865 B
Racket
|
#lang imperative-syndicate
|
||
|
|
||
|
(provide (all-defined-out))
|
||
|
|
||
|
(require (prefix-in preserves: preserves))
|
||
|
(require bitsyntax)
|
||
|
|
||
|
;; Client --> Broker
|
||
|
(message-struct Assert (endpoint-name assertion))
|
||
|
(message-struct Clear (endpoint-name))
|
||
|
(message-struct Message (body))
|
||
|
|
||
|
;; Broker --> Client
|
||
|
(message-struct Add (endpoint-name captures))
|
||
|
(message-struct Del (endpoint-name captures))
|
||
|
(message-struct Msg (endpoint-name captures))
|
||
|
|
||
|
(define (decode bs)
|
||
|
(parameterize ((preserves:short-form-labels '#(discard capture observe)))
|
||
|
(bit-string-case bs
|
||
|
#:on-short (lambda (fail) (values #f bs))
|
||
|
([ (v :: (preserves:wire-value)) (rest :: binary) ] (values v (bit-string->bytes rest)))
|
||
|
(else (error 'decode "Invalid wire message")))))
|
||
|
|
||
|
(define (encode v)
|
||
|
(parameterize ((preserves:short-form-labels '#(discard capture observe)))
|
||
|
(preserves:encode v)))
|