#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)))