diff options
Diffstat (limited to 'lib/zambyte/meta/macduffie.scm')
-rw-r--r-- | lib/zambyte/meta/macduffie.scm | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/zambyte/meta/macduffie.scm b/lib/zambyte/meta/macduffie.scm index 652bf1d..676e085 100644 --- a/lib/zambyte/meta/macduffie.scm +++ b/lib/zambyte/meta/macduffie.scm @@ -22,7 +22,7 @@ (or (and (hash-table? obj) (hash-table-exists? obj key)) (and (json-record? obj) - (json-object-contains-key? (json-record->fields obj) key)))) + (json-object-contains-key? ((json-record->typeless obj)) key)))) (define string->json json-read-string) @@ -35,8 +35,12 @@ (if (hash-table-exists? j key) (hash-table-ref j key) ((json-key-not-found)))) - ((json-record? j) - (json-object-ref (json-record->fields j) key)) + ((json-record? obj) + (or (and-let* ((pair (assoc key (json-record->accessors obj))) + (accessor (cdr pair))) + (accessor (json-record->internal-record obj)) + obj) + (error "json-object-ref: no accessor for field" (json-record->name obj) key))) (else ((json-key-not-found))))) (define (json-object-set! obj key value) @@ -46,8 +50,8 @@ obj) ((json-record? obj) (or (and-let* ((pair (assoc key (json-record->mutators obj))) - (mutator (cdr pair))) - (mutator obj value) + (mutator! (cdr pair))) + (mutator! (json-record->internal-record obj) value) obj) (error "json-object-set!: no mutator for field" (json-record->name obj) key))))) |