A Clojure library for using the Transit data format over Ring's WebSocket API (currently in beta testing).
Add the following dependency to your deps.edn file:
org.ring-clojure/ring-websocket-transit {:mvn {"0.1.0-beta2"}}
Or to your Leiningen project file:
[org.ring-clojure/ring-websocket-transit "0.1.0-beta2"]
The wrap-websocket-transit middleware function converts incoming and
outgoing WebSocket text messages to and from the Transit data format.
For example:
(require '[ring.websocket :as ws]
         '[ring.websocket.transit :as wst])
(def handler
  (wst/wrap-websocket-transit
   (fn [_request]
     {::ws/listener
      {:on-message
       (fn [socket message]
         (ws/send socket (update message :counter inc)))}})))
Instead of receiving a text message via the on-message listener event,
a data structure decoded from Transit formatting is supplied instead.
The socket argument is also wrapped, such that sending a data structure
automatically encodes it.
This also works with libraries like Ring-WebSocket-Async:
(require '[clojure.core.async :as a :refer [<! >!]]
         '[ring.websocket.async :as wsa])
(def handler-async
  (wst/wrap-websocket-transit
    (fn [_request]
      (wsa/go-websocket [in out]
        (loop
          (when-let [message (<! in)]
            (>! out (update message :counter inc))
            (recur)))))))
Copyright © 2023 James Reeves
Released under the MIT license.
Can you improve this documentation?Edit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs | 
| ← | Move to previous article | 
| → | Move to next article | 
| Ctrl+/ | Jump to the search field |