Function: eca--handle-message

eca--handle-message is a natively compiled function defined in eca.el.

Signature

(eca--handle-message SESSION JSON-DATA)

Documentation

Handle raw message JSON-DATA for SESSION.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca.el
(defun eca--handle-message (session json-data)
  "Handle raw message JSON-DATA for SESSION."
  (let ((id (plist-get json-data :id))
        (result (plist-get json-data :result))
        (backtrace nil)
        (eca--path-session session))
    (eca--with-backtrace backtrace
      (condition-case err
          (pcase (eca--get-message-type json-data)
            ('response (-let [(success-callback) (plist-get (eca--session-response-handlers session) id)]
                         (when success-callback
                           (cl-remf (eca--session-response-handlers session) id)
                           (funcall success-callback result))))
            ('response-error (-let [(_ error-callback) (plist-get (eca--session-response-handlers session) id)]
                               (when error-callback
                                 (cl-remf (eca--session-response-handlers session) id)
                                 (funcall error-callback (plist-get json-data :error)))))
            ('notification (eca--handle-server-notification session json-data))
            ;; Handler errors must not escape into the process filter:
            ;; answer the server with an error status instead of leaving
            ;; the request pending until it times out server-side.
            ('request (let ((response (condition-case req-err
                                          (eca--handle-server-request session json-data)
                                        (error
                                         (eca--log-error session req-err "handle-server-request" backtrace)
                                         (eca-warn "Error handling server request %s: %s"
                                                   (plist-get json-data :method)
                                                   (error-message-string req-err))
                                         (list :status "error"
                                               :message (error-message-string req-err))))))
                        (unless (eq response :async)
                          (eca-api-send-request-response session json-data response)))))
        (error
         (eca--log-error session err "handle-message" backtrace)
         (signal (car err) (cdr err)))))))