From fc5cc5a256f21eefbd6816b9e1a6ec7e24759f54 Mon Sep 17 00:00:00 2001 From: "bnmcgn@gmail.com" Date: Thu, 24 Jun 2021 16:24:14 -0700 Subject: [PATCH] Implemented with-files-write macro - Bugfix: pin/ls didn't handle empty result correctly - Bugfix: Fixed edge case in simplify --- main.lisp | 20 ++++++++++++++++---- package.lisp | 3 ++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/main.lisp b/main.lisp index 8c8a898..2ea88c7 100644 --- a/main.lisp +++ b/main.lisp @@ -46,7 +46,8 @@ (let* ((result (cond ((stringp body) body) ((vectorp body) (flexi-streams:octets-to-string body)))) (result (if (search "application/json" (cdr (assoc :content-type headers))) - (simplify (yason:parse result :object-as :alist)) + (unless (empty-string-p result) + (simplify (yason:parse result :object-as :alist))) result))) (if (eql 200 status-code) result @@ -525,7 +526,17 @@ a local file. :form-data t)))) (apply #'process-result result))) - +(defmacro with-files-write ((stream dest-path &rest params) &body body) + "A convenience macro for files-write. In the body of the macro, any writes +to the stream named by STREAM will be sent to the mfs file at DEST-PATH. PARAMS +will be passed directly to the files-write function." + (let ((fn (gensym "FN"))) + ;;FIXME: Would be nice to write the stream directly to files-write. + ;; This feels a little less efficient. + `(uiop:with-temporary-file (:stream ,stream :pathname ,fn) + ,@body + :close-stream + (files-write ,fn ,dest-path ,@params)))) ;; ————————————————————————————————————— ;; FILESTORE CALLS @@ -783,7 +794,8 @@ a local file. (defun pin-ls (&key (path nil) (type "all")) "List objects pinned to local storage. /ipns/docs.ipfs.io/reference/api/http/#api-v0-pin-ls" - (ipfs-call "pin/ls" `(,(when path `("arg" ,path)) ("type" ,type)))) + (let ((res (ipfs-call "pin/ls" `(,(when path `("arg" ,path)) ("type" ,type))))) + (if (equal res '("Keys")) nil res))) ;; STRING [:BOOLEAN] → ALIAS || (NIL STRING) (defun pin-rm (path &key (recursive 'T)) @@ -1059,7 +1071,7 @@ a local file. (stringp (cdr list))) (cdr list)) ((and (eq 1 (length list)) - (consp list)) + (consp (car list))) (simplify (car list))) ((and (consp list) (stringp (car list)) diff --git a/package.lisp b/package.lisp index 6a2cf63..cad7346 100644 --- a/package.lisp +++ b/package.lisp @@ -168,4 +168,5 @@ ;; version calls :version - :version-deps)) + :version-deps + #:with-files-write))