With-files-write macro #6

Merged
BnMcGn merged 3 commits from master into master 2021-06-26 21:50:21 -05:00
Showing only changes of commit d5e641c3ea - Show all commits

View File

@ -30,28 +30,29 @@
If the JSON is 'error JSON', I.E., it signals that an error has been
recieved, two values are returned: NIL and the string-error-message."
(let ((result
(multiple-value-list
(drakma:http-request
(make-call-url call arguments)
:method method
:url-encoder #'ipfs::url-encode
:parameters parameters
:want-stream want-stream)))
:want-stream want-stream))))
(if want-stream
result
(process-result result))))
(car result)
(apply #'process-result result))))
(defun process-result (result)
(cond
((stringp result) (values nil result))
((vectorp result)
(let* ((string (flexi-streams:octets-to-string result))
(alist
(with-input-from-string (stream string)
(loop while (peek-char t stream nil)
collect (yason:parse stream :object-as :alist)))))
(if (ignore-errors (equal (cdr (s-assoc "Type" (simplify alist))) "error"))
(values NIL (cdr (s-assoc "Message" (simplify alist))))
(simplify alist))))))
(defun process-result (body status-code headers uri http-stream must-close status-text)
(declare (ignore uri http-stream must-close status-text))
(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))
result)))
(if (eql 200 status-code)
result
(values nil (if (stringp result)
result
(ignore-errors (cdr (s-assoc "Message" result))))))))
;; STRING LIST &key STRING STRING → STRING
(defun make-call-url (call arguments &key (host *api-host*) (root *api-root*))
@ -509,6 +510,7 @@
a local file.
/ipns/docs.ipfs.io/reference/api/http/#api-v0-files-rm"
(let ((result
(multiple-value-list
(drakma:http-request
(make-call-url
"files/write"
@ -520,8 +522,8 @@ a local file.
,@(when hash (list "hash" hash))))
:method :post
:parameters `(("data" . ,path-or-string))
:form-data t)))
(process-result result)))
:form-data t))))
(apply #'process-result result)))