Guest User

Untitled

a guest
Nov 24th, 2017
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. (ns transito.core
  2. "
  3. For easier transit handling...
  4. Caching of keywords, no transit UUID's.
  5. "
  6. (:require
  7. [cognitect.transit :as transit]
  8. [com.cognitect.transit :as t]))
  9.  
  10. (deftype ^:no-doc MapBuilder []
  11. Object
  12. (init [_ node] (transient {}))
  13. (add [_ m k v node] (assoc! m (keyword k) v))
  14. (finalize [_ m node] (persistent! m)))
  15.  
  16. (deftype ^:no-doc VectorBuilder []
  17. Object
  18. (init [_ node] (transient []))
  19. (add [_ v x node] (conj! v x))
  20. (finalize [_ v node] (persistent! v))
  21. (fromArray [_ arr node] (cljs.core/PersistentVector.fromArray arr true)))
  22.  
  23. (defn reader []
  24. (t/reader "json"
  25. #js{:handlers
  26. (clj->js
  27. {"$" (fn [v] (symbol v))
  28. ":" (fn [v] (keyword v))
  29. "set" (fn [v] (into #{} v))
  30. "list" (fn [v] (into () (.reverse v)))
  31. "cmap" (fn [v]
  32. (loop [i 0 ret (transient {})]
  33. (if (< i (alength v))
  34. (recur (+ i 2)
  35. (assoc! ret (aget v i) (aget v (inc i))))
  36. (persistent! ret))))})
  37. :mapBuilder (MapBuilder.)
  38. :arrayBuilder (VectorBuilder.)
  39. :prefersStrings false}))
  40.  
  41. (transit/read
  42. (reader)
  43. (js/JSON.stringify (clj->js {:a "b" :c ["d" {:e "f"}]})))
Add Comment
Please, Sign In to add comment