Plaster
New
List
Login
text
default
anonymous
2021.12.06 16:37:28
(defmacro define-api-call (name base path key-queries &key parse-fn transform-fn headers) (let ((keys-and-queries (key-queries->keys key-queries))) `(defun ,name (identifier &key ,@(car keys-and-queries) (parse-fn ,parse-fn) (transform-fn ,transform-fn)) (declare (ignorable parse-fn transform-fn)) (let* ((query (typecase identifier (string (cons "q" identifier)) (cons (list (cons "lat" (car identifier)) (cons "lon" (cdr identifier)))) (integer (cons "id" identifier)))) (query-uri (quri:make-uri :path ,path :query (make-queries query (list ,@(cdr `,keys-and-queries))))) (uri (quri:merge-uris query-uri ,base )) (raw (dex:post uri :use-connection-pool nil :headers ',headers))) (when (functionp ,parse-fn) (setf raw (funcall ,parse-fn raw))) (when (functionp ,transform-fn) (setf raw (funcall ,transform-fn raw))) raw))))
Raw
Annotate
Repaste
Edit