|
5 | 5 | [java-time.properties :as jt.p] |
6 | 6 | [java-time.format :as jt.f] |
7 | 7 | [java-time.clock :as jt.clock] |
8 | | - [java-time.defconversion :refer (deffactory conversion!)]) |
9 | | - (:import [java.time.temporal Temporal TemporalAccessor ValueRange |
10 | | - TemporalField TemporalUnit TemporalAmount ChronoField IsoFields] |
11 | | - [java.time.format DateTimeFormatter] |
12 | | - [java.time.chrono Chronology] |
13 | | - [java.time DateTimeException Clock |
14 | | - Period Duration MonthDay DayOfWeek Month Year |
15 | | - ZoneOffset Instant])) |
16 | | - |
17 | | -(def writable-range-property-fns |
18 | | - {:with-min-value (fn [p] (jt.c/with-value p (jt.c/min-value p))) |
19 | | - :with-largest-min-value (fn [p] (jt.c/with-value p (jt.c/largest-min-value p))) |
20 | | - :with-smallest-max-value (fn [p] (jt.c/with-value p (jt.c/smallest-max-value p))) |
21 | | - :with-max-value (fn [p] (jt.c/with-value p (jt.c/max-value p)))}) |
22 | | - |
23 | | -(defmacro value-property [java-type range-field & |
24 | | - {:keys [with-value-fn-sym get-value-fn-sym] |
25 | | - :or {with-value-fn-sym 'of |
26 | | - get-value-fn-sym 'getValue}}] |
27 | | - (let [java-type-arg (with-meta (gensym) {:tag java-type})] |
28 | | - `(do |
29 | | - (extend-type ~java-type |
30 | | - jt.c/ReadableProperty |
31 | | - (value [d#] |
32 | | - (. d# ~get-value-fn-sym)) |
33 | | - |
34 | | - jt.c/WritableProperty |
35 | | - (with-value [_# v#] |
36 | | - (. ~java-type ~with-value-fn-sym v#))) |
37 | | - |
38 | | - (extend ~java-type |
39 | | - jt.c/ReadableRangeProperty |
40 | | - (assoc jt.c/readable-range-property-fns |
41 | | - :range (fn [~java-type-arg] |
42 | | - (.range ~java-type-arg ~range-field))) |
43 | | - |
44 | | - jt.c/WritableRangeProperty |
45 | | - writable-range-property-fns)))) |
46 | | - |
47 | | -(value-property DayOfWeek ChronoField/DAY_OF_WEEK) |
48 | | -(value-property Month ChronoField/MONTH_OF_YEAR) |
49 | | -(value-property Year ChronoField/YEAR_OF_ERA) |
50 | | -(value-property ZoneOffset ChronoField/OFFSET_SECONDS |
51 | | - :with-value-fn-sym ofTotalSeconds |
52 | | - :get-value-fn-sym getTotalSeconds) |
53 | | - |
54 | | -(jt.u/when-threeten-extra |
55 | | - (import [org.threeten.extra AmPm DayOfMonth DayOfYear Quarter YearQuarter]) |
56 | | - (value-property DayOfMonth ChronoField/DAY_OF_MONTH) |
57 | | - (value-property DayOfYear ChronoField/DAY_OF_YEAR)) |
| 8 | + [java-time.temporal-macros :as jt.tm :include-macros true] |
| 9 | + #?(:clj |
| 10 | + [java-time.defconversion :refer (deffactory conversion!)])) |
| 11 | + #?(:clj |
| 12 | + (:import [java.time.temporal Temporal TemporalAccessor ValueRange |
| 13 | + TemporalField TemporalUnit TemporalAmount ChronoField IsoFields] |
| 14 | + [java.time.format DateTimeFormatter] |
| 15 | + [java.time.chrono Chronology] |
| 16 | + [java.time DateTimeException Clock |
| 17 | + Period Duration MonthDay DayOfWeek Month Year |
| 18 | + ZoneOffset Instant]))) |
| 19 | + |
| 20 | + |
| 21 | +#?(:cljs |
| 22 | + (do |
| 23 | + (def Temporal (.. js/JSJoda -Temporal)) |
| 24 | + (def TemporalAccessor (.. js/JSJoda -TemporalAccessor)) |
| 25 | + (def ValueRange (.. js/JSJoda -ValueRange)) |
| 26 | + (def TemporalField (.. js/JSJoda -TemporalField)) |
| 27 | + (def TemporalUnit (.. js/JSJoda -TemporalUnit)) |
| 28 | + (def TemporalAmount (.. js/JSJoda -TemporalAmount)) |
| 29 | + (def ChronoField (.. js/JSJoda -ChronoField)) |
| 30 | + (def IsoFields (.. js/JSJoda -IsoFields)) |
| 31 | + (def DateTimeFormatter (.. js/JSJoda -DateTimeFormatter)) |
| 32 | + ;(def Chronology (.. js/JSJoda -Chronology)) |
| 33 | + (def DateTimeException (.. js/JSJoda -DateTimeException)) |
| 34 | + (def Clock (.. js/JSJoda -Clock)) |
| 35 | + (def Period (.. js/JSJoda -Period)) |
| 36 | + (def Duration (.. js/JSJoda -Duration)) |
| 37 | + (def MonthDay (.. js/JSJoda -MonthDay)) |
| 38 | + (def DayOfWeek (.. js/JSJoda -DayOfWeek)) |
| 39 | + (def Month (.. js/JSJoda -Month)) |
| 40 | + (def Year (.. js/JSJoda -Year)) |
| 41 | + (def ZoneOffset (.. js/JSJoda -ZoneOffset)) |
| 42 | + (def Instant (.. js/JSJoda -Instant)) |
| 43 | + |
| 44 | + (def ResolverStyle (.. js/JSJoda -ResolverStyle)))) |
| 45 | + |
| 46 | + |
| 47 | +(jt.tm/value-property DayOfWeek (jt.u/static-prop ChronoField 'DAY_OF_WEEK)) |
| 48 | +(jt.tm/value-property Month (jt.u/static-prop ChronoField 'MONTH_OF_YEAR)) |
| 49 | +(jt.tm/value-property Year (jt.u/static-prop ChronoField 'YEAR_OF_ERA)) |
| 50 | +(jt.tm/value-property ZoneOffset (jt.u/static-prop ChronoField 'OFFSET_SECONDS) |
| 51 | + :with-value-fn-sym ofTotalSeconds |
| 52 | + :get-value-fn-sym getTotalSeconds) |
| 53 | + |
| 54 | +#?(:clj |
| 55 | + (jt.u/when-threeten-extra |
| 56 | + (import [org.threeten.extra AmPm DayOfMonth DayOfYear Quarter YearQuarter]) |
| 57 | + (jt.tm/value-property DayOfMonth ChronoField/DAY_OF_MONTH) |
| 58 | + (jt.tm/value-property DayOfYear ChronoField/DAY_OF_YEAR))) |
58 | 59 |
|
59 | 60 | ;;;;; FIELD PROPERTY |
60 | 61 |
|
|
113 | 114 | (alter-meta! #'->TemporalFieldProperty assoc :private true) |
114 | 115 | (alter-meta! #'map->TemporalFieldProperty assoc :private true) |
115 | 116 |
|
116 | | -(defmacro field-property [java-type has-range?] |
117 | | - (let [java-type-arg (with-meta (gensym) {:tag java-type})] |
118 | | - `(do |
119 | | - (extend ~java-type |
120 | | - jt.c/ReadableProperty |
121 | | - {:value (fn [~java-type-arg] |
122 | | - (get-long-property-value (.o ~java-type-arg) |
123 | | - (.field ~java-type-arg)))}) |
124 | | - |
125 | | - ~(when has-range? |
126 | | - `(extend ~java-type |
127 | | - jt.c/ReadableRangeProperty |
128 | | - (assoc jt.c/readable-range-property-fns |
129 | | - :range (fn [~java-type-arg] |
130 | | - (get-field-property-range (.o ~java-type-arg) |
131 | | - (.field ~java-type-arg)))) |
132 | | - |
133 | | - jt.c/WritableRangeProperty |
134 | | - writable-range-property-fns))))) |
135 | | - |
136 | 117 | (field-property DayOfWeekFieldProperty true) |
137 | 118 | (field-property MonthFieldProperty true) |
138 | 119 | (field-property MonthDayFieldProperty true) |
|
176 | 157 | res (transient {})] |
177 | 158 | (if f |
178 | 159 | (recur (first r) (rest r) |
179 | | - (if (jt.c/supports? o f) |
180 | | - (assoc! res k f) |
181 | | - res)) |
| 160 | + (if (jt.c/supports? o f) |
| 161 | + (assoc! res k f) |
| 162 | + res)) |
182 | 163 | (persistent! res))))) |
183 | 164 |
|
184 | 165 | jt.c/HasProperties |
|
273 | 254 | (loop [u u, us us, res (transient {})] |
274 | 255 | (if u |
275 | 256 | (recur (first us) (rest us) |
276 | | - (assoc! res (jt.p/unit-key u) u)) |
| 257 | + (assoc! res (jt.p/unit-key u) u)) |
277 | 258 | (persistent! res))))) |
278 | 259 |
|
279 | 260 | jt.c/HasProperties |
|
0 commit comments