summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobby Zambito <contact@robbyzambito.me>2023-02-15 09:18:22 -0500
committerRobby Zambito <contact@robbyzambito.me>2023-02-15 09:18:22 -0500
commit334e09f3388a74b5982138b57abb2021e12cf598 (patch)
tree3755e1492789b814d9406d58bcd9ac4fae2a2cf7
parentd02631bf16aaaa33212edccfdf304dda94f5ff0f (diff)
Add json DSL
-rw-r--r--lib/zambyte/meta/json.sld17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/zambyte/meta/json.sld b/lib/zambyte/meta/json.sld
index 58479e8..b6e681d 100644
--- a/lib/zambyte/meta/json.sld
+++ b/lib/zambyte/meta/json.sld
@@ -1,6 +1,7 @@
(define-library (zambyte meta json)
;; portable
- (export json-ref
+ (export json
+ json-ref
json-value?
json-key-not-found)
@@ -26,6 +27,20 @@
(import (scheme base))
;; portable
(begin
+ (define-syntax json
+ (syntax-rules (object list null true false)
+ ((_ (object (key . value) ...))
+ (json-object `(key . ,(json value)) ...))
+ ((_ (list vs ...))
+ (json-list (json vs) ...))
+ ((_ null) json-null)
+ ((_ true) #t)
+ ((_ false) #f)
+ ((_ value)
+ (if (json-value? value)
+ value
+ (error "json: not a json value" value)))))
+
(define (json-ref json key . keys)
(let ((ref (cond ((json-object? json) json-object-ref)
((json-list? json) json-list-ref)