diff options
Diffstat (limited to 'src/serializing.lisp')
| -rw-r--r-- | src/serializing.lisp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/serializing.lisp b/src/serializing.lisp index e9c46f6..b40ac75 100644 --- a/src/serializing.lisp +++ b/src/serializing.lisp | |||
| @@ -3,18 +3,21 @@ | |||
| 3 | (defpackage :ukkoclot/src/serializing | 3 | (defpackage :ukkoclot/src/serializing |
| 4 | (:use :c2cl :iterate) | 4 | (:use :c2cl :iterate) |
| 5 | (:import-from :log) | 5 | (:import-from :log) |
| 6 | (:import-from :serapeum :->) | ||
| 6 | (:import-from :str) | 7 | (:import-from :str) |
| 7 | (:local-nicknames | 8 | (:local-nicknames |
| 8 | (:jzon :com.inuoe.jzon)) | 9 | (:jzon :com.inuoe.jzon)) |
| 9 | (:export :fixup-args :fixup-value :parse-value :try-parse-value)) | 10 | (:export :fixup-args :fixup-value :parse-value :try-parse-value)) |
| 10 | (in-package :ukkoclot/src/serializing) | 11 | (in-package :ukkoclot/src/serializing) |
| 11 | 12 | ||
| 13 | ;; TODO: Better types, input is an (alist t t) output is an (alist string t) | ||
| 14 | (-> fixup-args (list) list) | ||
| 12 | (defun fixup-args (args) | 15 | (defun fixup-args (args) |
| 13 | (iter (for (key . value) in args) | 16 | (iter (for (key . value) in args) |
| 14 | (collect (cons (str:snake-case key) (fixup-value value))))) | 17 | (collect (cons (str:snake-case key) (fixup-value value))))) |
| 15 | 18 | ||
| 16 | (defgeneric fixup-value (value) | 19 | (defgeneric fixup-value (value) |
| 17 | (:documentation "Fixup outgoing *top-level* `value' before passing it to telegram.") | 20 | (:documentation "Fixup outgoing /top-level/ `value' before passing it to telegram.") |
| 18 | (:method (value) | 21 | (:method (value) |
| 19 | (jzon:stringify value :pretty *print-pretty*)) | 22 | (jzon:stringify value :pretty *print-pretty*)) |
| 20 | (:method ((value null)) | 23 | (:method ((value null)) |
| @@ -61,6 +64,7 @@ | |||
| 61 | (t | 64 | (t |
| 62 | (error "I don't know how to parse complex type ~A!" type)))) | 65 | (error "I don't know how to parse complex type ~A!" type)))) |
| 63 | 66 | ||
| 67 | (-> try-parse-value (t t) (values boolean t &optional)) | ||
| 64 | (defun try-parse-value (type json) | 68 | (defun try-parse-value (type json) |
| 65 | (handler-case (values t (parse-value type json)) | 69 | (handler-case (values t (parse-value type json)) |
| 66 | (error () (values nil nil)))) | 70 | (error () (values nil nil)))) |