From e791f49921c2eeb5d481472f36c9423273a7bcd4 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Sun, 10 Apr 2016 18:05:32 +0300 Subject: [PATCH] Add point read/write handler to transit. --- src/uxbox/util/transit.cljs | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/uxbox/util/transit.cljs b/src/uxbox/util/transit.cljs index e5b8e403ee..4493f616ae 100644 --- a/src/uxbox/util/transit.cljs +++ b/src/uxbox/util/transit.cljs @@ -7,34 +7,44 @@ (ns uxbox.util.transit "A lightweight abstraction for transit serialization." (:require [cognitect.transit :as t] + [com.cognitect.transit :as tr] [uxbox.util.data :refer (parse-int)] + [uxbox.util.geom.point :as gpt] [uxbox.util.datetime :as dt])) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Read/Write Transit handlers -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; --- Transit Handlers -(def ^:private datetime-write-handler - (reify - Object - (tag [_ v] "m") - (rep [_ v] (dt/format v :offset)) - (stringRep [this v] (str (dt/format v :offset))))) +(def datetime-write-handler + (t/write-handler (constantly "m") + #(str (dt/format % :offset)))) -(defn- datetime-read-handler - [v] - (dt/datetime (parse-int v))) +(def datetime-read-handler + (t/read-handler + #(dt/datetime (parse-int %)))) + +(def point-write-handler + (t/write-handler + (constantly "point") + (fn [v] + (let [ret #js []] + (.push ret (:x v)) + (.push ret (:y v)) + ret)))) + +(def point-read-handler + (t/read-handler + #(gpt/point (js->clj %)))) (def ^:privare +read-handlers+ {"u" uuid - "m" datetime-read-handler}) + "m" datetime-read-handler + "point" point-read-handler}) (def ^:privare +write-handlers+ - {dt/DateTime datetime-write-handler}) + {dt/DateTime datetime-write-handler + gpt/Point point-write-handler}) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Public Api -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; --- Public Api (defn decode [data]