diff options
author | Robby Zambito <contact@robbyzambito.me> | 2023-06-12 00:30:45 -0400 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2023-06-12 00:30:45 -0400 |
commit | 6dcb68c94a1fdef9af5c9ceb6f6504ed46f1bfef (patch) | |
tree | 6d33c93c2028050cc5827789005faa774eddaac4 | |
parent | 497f36b02e1056bafcb181a0d10fac7e3268130c (diff) |
-rw-r--r-- | lib/zambyte/meta/sagittarius.scm | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/zambyte/meta/sagittarius.scm b/lib/zambyte/meta/sagittarius.scm index 7bde9f3..9fceba7 100644 --- a/lib/zambyte/meta/sagittarius.scm +++ b/lib/zambyte/meta/sagittarius.scm @@ -37,7 +37,7 @@ (assoc key (json-object->alist obj)) #t) (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 str) (call-with-port (open-input-string str) @@ -58,7 +58,10 @@ (cdr pair) ((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 value)) + (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) @@ -73,8 +76,8 @@ json) ((json-record? json) (or (and-let* ((pair (assoc key (json-record->mutators json))) - (mutator (cdr pair))) - (set! json (mutator json value)) + (mutator! (cdr pair))) + (set! json (mutator! json value)) json) (error "json-object-set!: no mutator for field" (json-record->name json) key))))) |