;;;; remote-mailbox-adapter.scm ;;;; Kon Lovett, Sep '17 (module remote-mailbox-adapter (;export serializer deserializer serializer-output deserializer-input serialize deserialize) (import scheme chicken) (use (prefix s11n s11n::) (only moremacros define-warning-parameter) (only type-errors warning-argument-type) condition-utils) ;;; ;; (define (serializer? x) (or (not x) (procedure? x)) ) (: serializer (#!optional (or boolean procedure) -> procedure)) ; (define-warning-parameter serializer s11n::serialize serializer ;ugh, automagic identifier injection (unless obj (set! obj s11n::serialize)) ) (define (deserializer? x) (or (not x) (procedure? x)) ) (: deserializer (#!optional (or boolean procedure) -> procedure)) ; (define-warning-parameter deserializer s11n::deserialize deserializer ;ugh, automagic identifier injection (unless obj (set! obj s11n::deserialize)) ) (define DEFAULT-DESERIALIZER-INPUT (current-input-port)) (define DEFAULT-SERIALIZER-OUTPUT (current-output-port)) (define (deserializer-input? x) (or (not x) (input-port? x)) ) (: deserializer-input (#!optional (or boolean input-port) -> input-port)) ; (define-warning-parameter deserializer-input DEFAULT-DESERIALIZER-INPUT deserializer-input ;ugh, automagic identifier injection (unless obj (set! obj DEFAULT-DESERIALIZER-INPUT)) ) (define (serializer-output? x) (or (not x) (output-port? x)) ) (: serializer-output (#!optional (or boolean output-port) -> output-port)) ; (define-warning-parameter serializer-output DEFAULT-SERIALIZER-OUTPUT serializer-output ;ugh, automagic identifier injection (unless obj (set! obj DEFAULT-SERIALIZER-OUTPUT)) ) ;; (: serialize (* #!optional output-port -> void)) ; (define (serialize x #!optional (port (serializer-output))) ((serializer) x port) ) (: deserialize (#!optional input-port -> *)) ; (define (deserialize #!optional (port (deserializer-input))) ((deserializer) port) ) ) ;module remote-mailbox-adapter