diff --git a/pitfall/restructure/buffer-test.rkt b/pitfall/restructure/buffer-test.rkt index 0db2df7c..a90ad4c1 100644 --- a/pitfall/restructure/buffer-test.rkt +++ b/pitfall/restructure/buffer-test.rkt @@ -1,5 +1,5 @@ #lang restructure/racket -(require "buffer.rkt" "stream.rkt" rackunit) +(require "buffer.rkt" "stream.rkt" "number.rkt" rackunit) #| approximates @@ -65,12 +65,13 @@ https://github.com/mbutterick/restructure/blob/master/test/Buffer.coffee ; stream.end() ; -(let ([buf (+BufferT 2)] - [stream (+EncodeStream)]) +(let ([stream (+EncodeStream)] + [buf (+BufferT 2)]) (send buf encode stream (+Buffer '(#xab #xff))) (send buf encode stream (+Buffer '(#x1f #xb6))) (check-equal? (send stream dump) (+Buffer '(#xab #xff #x1f #xb6)))) + ; it 'should encode length before buffer', (done) -> ; stream = new EncodeStream ; stream.pipe concat (buf) -> @@ -79,4 +80,9 @@ https://github.com/mbutterick/restructure/blob/master/test/Buffer.coffee ; ; buf = new BufferT(uint8) ; buf.encode stream, new Buffer [0xab, 0xff] -; stream.end() \ No newline at end of file +; stream.end() + +(let ([stream (+EncodeStream)] + [buf (+BufferT uint8)]) + (send buf encode stream (+Buffer '(#xab #xff))) + (check-equal? (send stream dump) (+Buffer '(2 #xab #xff)))) \ No newline at end of file diff --git a/pitfall/restructure/buffer.rkt b/pitfall/restructure/buffer.rkt index 38113089..0ac86508 100644 --- a/pitfall/restructure/buffer.rkt +++ b/pitfall/restructure/buffer.rkt @@ -33,14 +33,12 @@ A Restructure RBuffer object is separate. (bytes-length val) (utils-resolveLength length_ val parent))) - (define/override (encode stream buf-in [parent #f]) - (define buf (if (bytes? buf-in) (bytes->list buf-in) buf-in)) - (unless (and (list? buf) (andmap byte? buf)) - (raise-argument-error 'Buffer:encode "list of bytes" buf)) - (report* buf length_) + (define/override (encode stream buf [parent #f]) + (unless (bytes? buf) + (raise-argument-error 'Buffer:encode "bytes" buf)) (when (NumberT? length_) - (send length_ encode stream (*length buf)) - (send stream writeBuffer buf)))) + (send length_ encode stream (*length buf))) + (send stream writeBuffer buf))) (define-subclass RBuffer (BufferT)) diff --git a/pitfall/restructure/number.rkt b/pitfall/restructure/number.rkt index baccab3f..95b957c3 100644 --- a/pitfall/restructure/number.rkt +++ b/pitfall/restructure/number.rkt @@ -66,8 +66,8 @@ https://github.com/mbutterick/restructure/blob/master/src/Number.coffee (define bstr (apply bytes ((if (eq? endian 'be) identity reverse) bs))) (send stream write bstr))) -(define-subclass Integer (Number)) -(define-subclass Integer (NumberT)) +(define-values (NumberT NumberT? +NumberT) (values Integer Integer? +Integer)) +(define-values (Number Number? +Number) (values Integer Integer? +Integer)) (define-subclass Streamcoder (Float _size [endian system-endian]) (define byte-size (/ _size 8))