From cabcabb42c87eeaf6a8f99691508ad5239461060 Mon Sep 17 00:00:00 2001 From: Ben Grabow Date: Fri, 25 Oct 2019 17:04:34 -0500 Subject: [PATCH] Bind dynamic date-format var for custom encoders --- src/cheshire/generate.clj | 5 ++++- test/cheshire/test/core.clj | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cheshire/generate.clj b/src/cheshire/generate.clj index f3e7fb04..261e9f75 100644 --- a/src/cheshire/generate.clj +++ b/src/cheshire/generate.clj @@ -116,7 +116,10 @@ (defn generate [^JsonGenerator jg obj ^String date-format ^Exception ex key-fn] (cond (nil? obj) (.writeNull ^JsonGenerator jg) - (get (:impls JSONable) (class obj)) (#'to-json obj jg) + + (get (:impls JSONable) (class obj)) + (binding [*date-format* date-format] + (#'to-json obj jg)) (i? clojure.lang.IPersistentMap obj) (generate-map jg obj date-format ex key-fn) diff --git a/test/cheshire/test/core.clj b/test/cheshire/test/core.clj index 8e6e2170..e4fc204e 100644 --- a/test/cheshire/test/core.clj +++ b/test/cheshire/test/core.clj @@ -405,6 +405,9 @@ (binding [gen/*date-format* "yyyy-MM-dd'T'HH:mm:ss'Z'"] (is (= "1970-01-01T00:00:00Z" (json/decode (json/encode thing) true)))) (remove) + (gen/add-encoder CTestR (fn [obj jg] (gen/encode-date (Date. (long 0)) jg))) + (is (= "1970-01-01" (json/decode (json/encode thing {:date-format "yyyy-MM-dd"})))) + (remove) (gen/add-encoder CTestR (fn [obj jg] (gen/encode-bool true jg))) (is (= true (json/decode (json/encode thing) true))) (remove)