remove symbols as length notation

main
Matthew Butterick 5 years ago
parent 95a4d85cb8
commit a4255af04d

@ -75,9 +75,10 @@ https://github.com/mbutterick/restructure/blob/master/test/Struct.coffee
"dict: support pre-encode hook"
(parameterize ([current-output-port (open-output-bytes)])
(define struct (x:dict #:pre-encode (λ (val)
(hash-set! val 'nameLength (string-length (hash-ref val 'name))) val)
(hash-set! val 'nameLength (string-length (hash-ref val 'name)))
val)
'nameLength uint8
'name (x:string 'nameLength)
'name (x:string (λ (this) (hash-ref this 'nameLength)))
'age uint8))
(encode struct (mhasheq 'name "roxyb" 'age 21))
(check-equal? (get-output-bytes (current-output-port)) #"\x05roxyb\x15")))

@ -80,8 +80,8 @@ https://github.com/mbutterick/restructure/blob/master/test/VersionedStruct.coffe
'gender 0)))))
(test-case
"versioned dict: decode should support parent version key"
(let ([vstruct (x:versioned-dict x:version-key
"versioned dict: decode should support parent version key via procedure"
(let ([vstruct (x:versioned-dict (λ (p) (hash-ref p x:version-key))
(dictify
0 (dictify 'name (x:string #:length uint8 #:encoding 'ascii)
'age uint8)

@ -6,7 +6,6 @@
(or (not x)
(exact-nonnegative-integer? x)
(procedure? x)
(symbol? x)
(x:int? x)))
(define (resolve-length x input-port [parent #f])

@ -1,6 +1,7 @@
#lang debug racket/base
(require "base.rkt"
"dict.rkt"
"util.rkt"
racket/dict
racket/match
racket/class
@ -14,8 +15,7 @@ https://github.com/mbutterick/restructure/blob/master/src/VersionedStruct.coffee
|#
(define (version-type? x)
(for/or ([proc (list integer? procedure? xenomorphic? symbol?)])
(proc x)))
(and x (length-resolvable? x)))
(define x:versioned-dict%
(class x:dict%
@ -25,7 +25,7 @@ https://github.com/mbutterick/restructure/blob/master/src/VersionedStruct.coffee
[(@version-key version-key)])
(unless (version-type? @type)
(raise-argument-error 'x:versioned-dict "integer, procedure, symbol, or xenomorphic" @type))
(raise-argument-error 'x:versioned-dict "integer, procedure, or xenomorphic" @type))
(unless (and (dict? @versions) (andmap (λ (v) (or (dict? v) (x:dict? v))) (dict-values @versions)))
(raise-argument-error 'x:versioned-dict "dict of dicts or structish" @versions))
@ -43,7 +43,6 @@ https://github.com/mbutterick/restructure/blob/master/src/VersionedStruct.coffee
(define res (setup-private-fields port parent length))
(define which-version (match @type
[(? integer? int) int]
[(? symbol? key) #:when parent (dict-ref parent key)]
[(? procedure? proc) #:when parent (proc parent)]
[(or (? symbol?) (? procedure?))
(raise-argument-error 'decode "valid parent" parent)]

Loading…
Cancel
Save