-
-
Notifications
You must be signed in to change notification settings - Fork 137
/
transit_packer.cljc
28 lines (26 loc) · 1.28 KB
/
transit_packer.cljc
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
(ns fulcro.websockets.transit-packer
(:require [fulcro.transit :as ot]
[fulcro.util :as util]
#?(:cljs [taoensso.sente.packers.transit :as st])
[fulcro.tempid :as tempid #?@(:cljs [:refer [TempId]])])
#?(:clj
(:import [com.cognitect.transit ReadHandler]
[fulcro.tempid TempId])))
#?(:clj (defonce externs (atom {})))
#?(:clj (def externs-needed '([taoensso.sente.packers.transit [->TransitPacker]])))
#?(:clj (def invoke (util/build-invoke externs externs-needed)))
(defn make-packer
"Returns a json packer for use with sente."
[{:keys [read write]}]
#?(:clj (invoke 'taoensso.sente.packers.transit/->TransitPacker :json
{:handlers (cond-> {TempId (ot/->TempIdHandler)}
write (merge write))}
{:handlers (cond-> {"fulcro/tempid" (reify
ReadHandler
(fromRep [_ id] (TempId. id)))}
read (merge read))})
:cljs (st/->TransitPacker :json
{:handlers (cond-> {TempId (ot/->TempIdHandler)}
write (merge write))}
{:handlers (cond-> {"fulcro/tempid" (fn [id] (tempid/tempid id))}
read (merge read))})))