diff --git a/pitfall/restructure/private/stream.rkt b/pitfall/restructure/private/stream.rkt index c9fd9018..9334803b 100644 --- a/pitfall/restructure/private/stream.rkt +++ b/pitfall/restructure/private/stream.rkt @@ -1,5 +1,5 @@ #lang reader (submod "racket.rkt" reader) -(require racket/private/generic-methods) +(require racket/generic racket/private/generic-methods) (provide (all-defined-out)) ;; helper class @@ -16,6 +16,8 @@ (check-not-exn (λ () (make-object PortWrapper (open-output-bytes)))) (check-exn exn:fail? (λ () (make-object PortWrapper -42)))) + + #| approximates https://github.com/mbutterick/restructure/blob/master/src/EncodeStream.coffee |# @@ -100,9 +102,18 @@ https://github.com/mbutterick/restructure/blob/master/src/DecodeStream.coffee (generic-method-table gen:countable (define (length o) (get-field length_ o)))]))) +(define-generics posable + (pos posable [new-pos])) + +(define posable<%> + (interface* () + ([(generic-property gen:posable) + (generic-method-table gen:posable + (define (pos o [new-pos #f]) (send o pos new-pos)))]))) + (define DecodeStreamT (class* PortWrapper - (encodable<%> dumpable<%> countable<%>) + (codable<%> dumpable<%> countable<%> posable<%>) (init-field [buffer #""]) (unless (bytes? buffer) ; corresponds to a Node Buffer, not a restructure BufferT object (raise-argument-error 'DecodeStream:constructor "bytes" buffer))