syndicate-rkt/syndicate/broker/wire-protocol.rkt

28 lines
865 B
Racket
Raw Normal View History

2019-03-18 15:34:14 +00:00
#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)))