Function: majutsu-gerrit--async-accounts

majutsu-gerrit--async-accounts is a natively compiled function defined in majutsu-gerrit.el.

Signature

(majutsu-gerrit--async-accounts BUILDER)

Documentation

Consult async function for Gerrit account completion via plz.

BUILDER takes an input string and returns (URL . HEADERS), or nil.

This mirrors consult--async-process but drives plz instead of make-process: plz returns a curl process object for async requests, which we cancel on new input. Candidates are parsed with majutsu-gerrit--account-transform and pushed through the sink.

Source Code

;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-gerrit.el
(defun majutsu-gerrit--async-accounts (builder)
  "Consult async function for Gerrit account completion via `plz'.
BUILDER takes an input string and returns (URL . HEADERS), or nil.

This mirrors `consult--async-process' but drives `plz' instead of
`make-process': `plz' returns a curl process object for async
requests, which we cancel on new input.  Candidates are parsed with
`majutsu-gerrit--account-transform' and pushed through the sink."
  (lambda (sink)
    (let (proc last-input)
      (lambda (action)
        (pcase action
          ((pred stringp)
           (funcall sink action)
           (if (equal action last-input)
               nil
             (setq last-input action)
             (when proc
               (delete-process proc)
               (setq proc nil))
             (when-let* ((req (funcall builder action)))
               (let ((url (car req))
                     (headers (cdr req)))
                 (funcall sink [indicator running])
                 (setq proc
                       (plz 'get url
                         :headers headers
                         :as 'string
                         :then (lambda (body)
                                 (setq proc nil)
                                 (funcall sink 'flush)
                                 ;; Send the raw body as a single-element
                                 ;; list; the pipeline's transform stage
                                 ;; parses it with
                                 ;; `majutsu-gerrit--account-transform'.
                                 (funcall sink (list body))
                                 (funcall sink [indicator finished]))
                         :else (lambda (_err)
                                 (setq proc nil)
                                 (funcall sink [indicator failed]))))))))
          ((or 'cancel 'destroy)
           (when proc
             (delete-process proc)
             (setq proc nil))
           (setq last-input nil)
           (funcall sink action))
          (_ (funcall sink action)))))))