diff options
author | Robby Zambito <contact@robbyzambito.me> | 2023-02-15 09:18:22 -0500 |
---|---|---|
committer | Robby Zambito <contact@robbyzambito.me> | 2023-02-15 09:18:22 -0500 |
commit | 334e09f3388a74b5982138b57abb2021e12cf598 (patch) | |
tree | 3755e1492789b814d9406d58bcd9ac4fae2a2cf7 | |
parent | d02631bf16aaaa33212edccfdf304dda94f5ff0f (diff) |
Add json DSL
-rw-r--r-- | lib/zambyte/meta/json.sld | 17 |
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) |