File: ping.clj

package info (click to toggle)
nrepl-clojure 1.0.0-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,996 kB
  • sloc: makefile: 50; java: 19; sh: 15; xml: 10
file content (39 lines) | stat: -rw-r--r-- 1,430 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(ns ping
  "This provides an example of a middleware, including a deferred handler
  that's not loaded until called. This is representative of how cider-nrepl
  and refactor-nrepl handles deferred loading"
  (:require [nrepl.middleware :as middleware :refer [set-descriptor!]]
            [nrepl.misc :as misc :refer [response-for]]
            [nrepl.transport :as t]))

(def deferred-handler
  (delay
    (fn [{:keys [transport] :as msg}]
      (t/send transport (response-for msg
                                      {:pong
                                       ((misc/requiring-resolve (symbol "ping-imp/pong")))
                                       :status :done})))))

(defn wrap-ping
  [h]
  (fn [{:keys [op transport] :as msg}]
    (case op
      "ping"
      (t/send transport (response-for msg {:pong   "pong"
                                           :status :done}))
      "deferred-ping"
      (@deferred-handler msg)

      (h msg))))

(set-descriptor! #'wrap-ping
                 {:requires #{}
                  :expects  #{}
                  :handles  {"ping"
                             {:doc      "Ping"
                              :requires {}
                              :returns  {"status" "done"}}
                             "deferred-ping"
                             {:doc      "Ping"
                              :requires {}
                              :returns  {"status" "done"}}}})