Move macros above functions so functions can use them

This commit is contained in:
Felisp 2024-01-06 05:54:50 +01:00
parent 008d609a8b
commit 7679844e08

View file

@ -1,25 +1,6 @@
(ns rss-thread-watch.utils
"Util functions"
(:gen-class))
;; ===== Generic functions ====
(defn indices
;; https://stackoverflow.com/questions/8641305/find-index-of-an-element-matching-a-predicate-in-clojure
"Returns indexes of elements passing predicate"
[pred coll]
(keep-indexed #(when (pred %2) %1) coll))
(defn map-deep-merge-missing
"Merges two maps but only keys missing from first map"
[m1 m2]
(into m1
(for [k (keys m2)]
(let [val1 (get m1 k)
val2 (get m2 k)]
(if (and (map? val1)
(map? val2))
{k (map-deep-merge-missing val1 val2)}
{k (nil?-else val2 val1)})))))
;; ===== Macros =====
(defmacro nil?-else
@ -51,3 +32,23 @@
(if result#
~x
result#)))
;; ===== Generic functions ====
(defn indices
;; https://stackoverflow.com/questions/8641305/find-index-of-an-element-matching-a-predicate-in-clojure
"Returns indexes of elements passing predicate"
[pred coll]
(keep-indexed #(when (pred %2) %1) coll))
(defn map-deep-merge-missing
"Merges two maps but only keys missing from first map"
[m1 m2]
(into m1
(for [k (keys m2)]
(let [val1 (get m1 k)
val2 (get m2 k)]
(if (and (map? val1)
(map? val2))
{k (map-deep-merge-missing val1 val2)}
{k (nil?-else val2 val1)})))))