summaryrefslogtreecommitdiff
path: root/lib/zambyte/meta/macduffie.scm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/zambyte/meta/macduffie.scm')
-rw-r--r--lib/zambyte/meta/macduffie.scm14
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)))))