diff options
Diffstat (limited to 'lib/zambyte/meta/gerbil.scm')
-rw-r--r-- | lib/zambyte/meta/gerbil.scm | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/zambyte/meta/gerbil.scm b/lib/zambyte/meta/gerbil.scm index 497445b..9d9cb64 100644 --- a/lib/zambyte/meta/gerbil.scm +++ b/lib/zambyte/meta/gerbil.scm @@ -21,7 +21,7 @@ (or (and (hash-table? json) (hash-table-contains? json key)) (and (json-record? json) - (json-object-contains-key? (json-record->fields json) key)))) + (json-object-contains-key? ((json-record->typeless json)) key)))) (define string->json string->json-object) @@ -35,7 +35,10 @@ (hash-table-ref json key) ((json-key-not-found)))) ((json-record? json) - (json-object-ref (json-record->fields json) key)) + (or (and-let* ((pair (assoc key (json-record->accessors json))) + (accessor (cdr pair))) + (accessor (json-record->internal-record json))) + (error "json-object-ref: no accessor for field" (json-record->name json) key))) (else ((json-key-not-found))))) (define (json-object-set! json key value) @@ -45,15 +48,10 @@ (hash-table-set! json key value) json) ((json-record? json) - (or (let ((pair (assoc key (json-record->mutators json)))) - (if pair - (let ((mutator (cdr pair))) - (if mutator - (begin - (mutator json value) - json) - #f)) - #f)) + (or (and-let* ((pair (assoc key (json-record->mutators json))) + (mutator! (cdr pair))) + (mutator! (json-record->internal-record json) value) + json) (error "json-object-set!: no mutator for field" (json-record->name json) key))))) (define json-list-ref list-ref) |