Skip to content

Commit c9d4832

Browse files
committed
Related #32: defrecord => deftype for load perf
1 parent b086427 commit c9d4832

File tree

2 files changed

+20
-23
lines changed

2 files changed

+20
-23
lines changed

src/java_time/temporal.clj

+8-16
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
(defn- quarter->month [q]
6666
(Math/min 12 (Math/max 1 (long (inc (* 3 (dec q)))))))
6767

68-
(defrecord MonthDayFieldProperty [^MonthDay o, ^TemporalField field]
68+
(deftype MonthDayFieldProperty [^MonthDay o, ^TemporalField field]
6969
jt.c/WritableProperty
7070
(with-value [_ v]
7171
(condp = field
@@ -74,42 +74,37 @@
7474
IsoFields/QUARTER_OF_YEAR (.withMonth o (quarter->month v)))))
7575

7676
(alter-meta! #'->MonthDayFieldProperty assoc :private true)
77-
(alter-meta! #'map->MonthDayFieldProperty assoc :private true)
7877

79-
(defrecord DayOfWeekFieldProperty [^DayOfWeek o, ^TemporalField field]
78+
(deftype DayOfWeekFieldProperty [^DayOfWeek o, ^TemporalField field]
8079
jt.c/WritableProperty
8180
(with-value [_ v]
8281
(condp = field
8382
ChronoField/DAY_OF_WEEK (DayOfWeek/of v))))
8483

8584
(alter-meta! #'->DayOfWeekFieldProperty assoc :private true)
86-
(alter-meta! #'map->DayOfWeekFieldProperty assoc :private true)
8785

88-
(defrecord MonthFieldProperty [^Month o, ^TemporalField field]
86+
(deftype MonthFieldProperty [^Month o, ^TemporalField field]
8987
jt.c/WritableProperty
9088
(with-value [_ v]
9189
(condp = field
9290
ChronoField/MONTH_OF_YEAR (Month/of v)
9391
IsoFields/QUARTER_OF_YEAR (Month/of (quarter->month v)))))
9492

9593
(alter-meta! #'->MonthFieldProperty assoc :private true)
96-
(alter-meta! #'map->MonthFieldProperty assoc :private true)
9794

98-
(defrecord ZoneOffsetFieldProperty [^ZoneOffset o, ^TemporalField field]
95+
(deftype ZoneOffsetFieldProperty [^ZoneOffset o, ^TemporalField field]
9996
jt.c/WritableProperty
10097
(with-value [_ v]
10198
(condp = field
10299
ChronoField/OFFSET_SECONDS (ZoneOffset/ofTotalSeconds v))))
103100

104101
(alter-meta! #'->ZoneOffsetFieldProperty assoc :private true)
105-
(alter-meta! #'map->ZoneOffsetFieldProperty assoc :private true)
106102

107-
(defrecord TemporalFieldProperty [^Temporal o, ^TemporalField field]
103+
(deftype TemporalFieldProperty [^Temporal o, ^TemporalField field]
108104
jt.c/WritableProperty
109105
(with-value [_ v] (.with o field v)))
110106

111107
(alter-meta! #'->TemporalFieldProperty assoc :private true)
112-
(alter-meta! #'map->TemporalFieldProperty assoc :private true)
113108

114109
(defmacro field-property [java-type has-range?]
115110
(let [java-type-arg (with-meta (gensym) {:tag java-type})]
@@ -204,15 +199,14 @@
204199

205200
;;;;;;;;; AMOUNT
206201

207-
(defrecord TemporalAmountUnitProperty [^TemporalAmount ta, ^TemporalUnit unit]
202+
(deftype TemporalAmountUnitProperty [^TemporalAmount ta, ^TemporalUnit unit]
208203
jt.c/ReadableProperty
209204
(value [_]
210205
(.get ta unit)))
211206

212207
(alter-meta! #'->TemporalAmountUnitProperty assoc :private true)
213-
(alter-meta! #'map->TemporalAmountUnitProperty assoc :private true)
214208

215-
(defrecord PeriodUnitProperty [^Period p, unit-key]
209+
(deftype PeriodUnitProperty [^Period p, unit-key]
216210
jt.c/ReadableProperty
217211
(value [_]
218212
(case unit-key
@@ -228,9 +222,8 @@
228222
:days (.withDays p v))))
229223

230224
(alter-meta! #'->PeriodUnitProperty assoc :private true)
231-
(alter-meta! #'map->PeriodUnitProperty assoc :private true)
232225

233-
(defrecord DurationUnitProperty [^Duration d, unit-key]
226+
(deftype DurationUnitProperty [^Duration d, unit-key]
234227
jt.c/ReadableProperty
235228
(value [_]
236229
(case unit-key
@@ -244,7 +237,6 @@
244237
:nanos (.withNanos d v))))
245238

246239
(alter-meta! #'->DurationUnitProperty assoc :private true)
247-
(alter-meta! #'map->DurationUnitProperty assoc :private true)
248240

249241
(def default-unit-property-factory
250242
(reify PropertyFactory

test/java_time_test.clj

+12-7
Original file line numberDiff line numberDiff line change
@@ -667,19 +667,24 @@
667667

668668
(testing "duration"
669669
(let [d (j/duration 100000001)]
670-
(is (= (j/properties d)
671-
{:nanos (j/property d :nanos)
672-
:seconds (j/property d :seconds)}))
670+
(is (= (-> (j/properties d)
671+
(update :nanos j/value)
672+
(update :seconds j/value))
673+
{:nanos (j/value (j/property d :nanos))
674+
:seconds (j/value (j/property d :seconds))}))
673675
(is (= (j/units d)
674676
{:nanos (j/unit :nanos)
675677
:seconds (j/unit :seconds)}))))
676678

677679
(testing "period"
678680
(let [p (j/period 10 5 1)]
679-
(is (= (j/properties p)
680-
{:days (j/property p :days)
681-
:months (j/property p :months)
682-
:years (j/property p :years)}))
681+
(is (= (-> (j/properties p)
682+
(update :days j/value)
683+
(update :months j/value)
684+
(update :years j/value))
685+
{:days (j/value (j/property p :days))
686+
:months (j/value (j/property p :months))
687+
:years (j/value (j/property p :years))}))
683688
(is (= (j/units p)
684689
{:days (j/unit :days)
685690
:months (j/unit :months)

0 commit comments

Comments
 (0)