forked from zero-one-group/geni
-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.clj
33 lines (27 loc) · 887 Bytes
/
utils.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
(ns zero-one.geni.utils)
(defn coalesce [& xs]
(first (filter (complement nil?) xs)))
(defn ensure-coll [x] (if (or (coll? x) (nil? x)) x [x]))
(defn- import-class
([cls] (.importClass *ns* (clojure.lang.RT/classForName (str cls))))
([pkg cls] (import-class (str pkg \. cls))))
(defmacro with-dynamic-import [imports & body]
(if (try
(doall
(for [imp imports]
(if (symbol? imp)
(import-class imp)
(let [[pkg & classes] imp]
(doall (for [cls classes] (import-class pkg cls)))))))
true
(catch ClassNotFoundException _ nil))
`(do ~@body :succeeded)
:failed))
(defn arg-count [f]
(let [m (first (.getDeclaredMethods (class f)))
p (.getParameterTypes m)]
(alength p)))
(defn ->string-map [m]
(->> m
(map (fn [[k v]] [(name k) (name v)]))
(into {})))