File tree Expand file tree Collapse file tree 4 files changed +43
-6
lines changed Expand file tree Collapse file tree 4 files changed +43
-6
lines changed Original file line number Diff line number Diff line change 20
20
:dependencies [[com.fasterxml.jackson.core/jackson-core " 2.17.2" ]
21
21
[com.fasterxml.jackson.core/jackson-databind " 2.17.2" ]
22
22
[com.fasterxml.jackson.datatype/jackson-datatype-jsr310 " 2.17.2" ]]
23
- :profiles {:provided {:dependencies [[org.clojure/clojure " 1.11.3 " ]]}
24
- :dev {:dependencies [[org.clojure/clojure " 1.11.3 " ]
23
+ :profiles {:provided {:dependencies [[org.clojure/clojure " 1.12.0 " ]]}
24
+ :dev {:dependencies [[org.clojure/clojure " 1.12.0 " ]
25
25
[jmh-clojure/jmh-clojure " 0.4.1" ]
26
26
[com.fasterxml.jackson.datatype/jackson-datatype-joda " 2.17.2" ]
27
27
[cheshire " 5.13.0" ]
34
34
[com.clojure-goes-fast/clj-async-profiler " 1.2.2" ]
35
35
[criterium " 0.4.6" ]]
36
36
:global-vars {*warn-on-reflection* true }}
37
- :1.8 {:dependencies [[org.clojure/clojure " 1.11.3" ]]}
38
- :1.9 {:dependencies [[org.clojure/clojure " 1.11.3" ]]}
37
+ :1.11 {:dependencies [[org.clojure/clojure " 1.11.3" ]]}
39
38
:jmh {:jvm-opts [" -Dclojure.compiler.direct-linking=true" ]}
40
39
:perf {:jvm-opts ^:replace [" -server"
41
40
" -Xmx4096m"
42
41
" -Dclojure.compiler.direct-linking=true" ]}}
43
- :aliases {" all" [" with-profile" " default:dev:default:dev,1.8:dev,1.9 " ]
42
+ :aliases {" all" [" with-profile" " default:dev:default:dev,1.11 " ]
44
43
" perf" [" with-profile" " default,dev,perf" ]
45
44
" repl" [" with-profile" " default,dev" " repl" ]})
Original file line number Diff line number Diff line change 50
50
(:import
51
51
(jsonista.jackson
52
52
DateSerializer
53
+ DelaySerializer
53
54
FunctionalKeyDeserializer
54
55
FunctionalSerializer
55
56
KeywordSerializer
70
71
(java.net URL)
71
72
(com.fasterxml.jackson.datatype.jsr310 JavaTimeModule)
72
73
(java.util Iterator List Map Date)
73
- (clojure.lang Keyword Ratio Symbol)))
74
+ (clojure.lang Delay Keyword Ratio Symbol)))
74
75
75
76
(defn- ^Module clojure-module
76
77
" Create a Jackson Databind module to support Clojure datastructures.
87
88
(.addSerializer Date (if date-format
88
89
(DateSerializer. date-format)
89
90
(DateSerializer. )))
91
+ (.addSerializer Delay (DelaySerializer. ))
90
92
(as-> module
91
93
(doseq [[type encoder] encoders]
92
94
(cond
Original file line number Diff line number Diff line change
1
+ package jsonista .jackson ;
2
+
3
+ import clojure .lang .Delay ;
4
+ import com .fasterxml .jackson .core .JsonGenerator ;
5
+ import com .fasterxml .jackson .databind .SerializerProvider ;
6
+ import com .fasterxml .jackson .databind .ser .std .StdSerializer ;
7
+
8
+ import java .io .IOException ;
9
+
10
+ /** Serializer that mimics the behaviour we had prior to Clojure 1.12.
11
+ The Jackson default serializer now barfs on the Delay objects after Clojure 1.12. */
12
+ public class DelaySerializer extends StdSerializer <Delay > {
13
+
14
+ public DelaySerializer () {
15
+ super (DateSerializer .class , true );
16
+ }
17
+
18
+ @ Override
19
+ public void serialize (Delay value , JsonGenerator gen , SerializerProvider provider ) throws IOException {
20
+ gen .writeStartObject ();
21
+ gen .writeBooleanField ("realized" , value .isRealized ());
22
+ gen .writeEndObject ();
23
+ }
24
+ }
Original file line number Diff line number Diff line change 377
377
(j/write-values-as-array file eduction)
378
378
(is (= expected (slurp file)))
379
379
(.delete file)))
380
+
381
+ ; ; clojure 1.12 seems to have changed delay so that jackson barfs on it
382
+ ; ; this test documents the old behaviour that we preserve with our custom DelaySerializer
383
+ (deftest test-delay
384
+ (let [d (delay 1 )
385
+ d2 (delay (list :a 1 ))]
386
+ (is (= " {\" realized\" :false}" (j/write-value-as-string d)))
387
+ (is (= " {\" realized\" :false}" (j/write-value-as-string d2)))
388
+ (force d)
389
+ (force d2)
390
+ (is (= " {\" realized\" :true}" (j/write-value-as-string d)))
391
+ (is (= " {\" realized\" :true}" (j/write-value-as-string d2)))))
You can’t perform that action at this time.
0 commit comments