Extend restclient to allow saving requests and calling them

This commit is contained in:
David Morgan 2023-05-26 16:21:09 +01:00
parent 6ea07273e7
commit 9030d959d0
Signed by: djm
GPG Key ID: C171251002C200F2
1 changed files with 32 additions and 0 deletions

View File

@ -15,6 +15,38 @@
:hook (elpaca-after-init . envrc-global-mode))
(use-package restclient
:config
(defvar restclient-saved-requests nil)
(defun restclient-save-current (label)
"Save the current request as `label' (or use a default based on method, url and entity)."
(interactive "sLabel: ")
(restclient-http-parse-current-and-do
`(lambda (method url headers entity)
(let ((lab (if (string-empty-p ,label)
(format "%s %s (%s ...)" method url (substring entity 0 (min (length entity) 200)))
,label)))
(push (cons lab (list method url headers entity nil nil)) restclient-saved-requests)))))
(defun restclient-delete-saved-request ()
"Delete a saved request."
(interactive)
(if (= 0 (length restclient-saved-requests))
(message "No saved restclient requests to delete.")
(setq restclient-saved-requests
(assoc-delete-all (completing-read "Delete: " (map-keys restclient-saved-requests)) restclient-saved-requests))))
(defun restclient-call-saved-request ()
"Call a saved request."
(interactive)
(if (= 0 (length restclient-saved-requests))
(message "No saved restclient requests found.")
(let ((args (if (= 1 (length restclient-saved-requests))
(cdar restclient-saved-requests)
(alist-get (completing-read "Call: " (map-keys restclient-saved-requests)) restclient-saved-requests nil nil 'string-equal))))
(apply 'restclient-http-do args))))
:bind
("C-c C-h" . restclient-call-saved-request)
(:map restclient-mode-map ("C-c h" . restclient-save-current))
:mode (("\\.http\\'" . restclient-mode)))
(use-package restclient-jq