Files
2026-03-09 23:09:46 -04:00

76 lines
1.7 KiB
Clojure

(ns Access
"Elixir Access module — nested data access and update.
In CljElixir: Provides access functions used with get-in, update-in, etc.
Access functions create composable paths for nested data manipulation.")
(defn key
"Accesses a key in a map. Returns `default` if key is missing.
(get-in data [(Access/key :user) (Access/key :name)])"
([key])
([key default]))
(defn key!
"Accesses a key in a map. Raises if key is missing."
[key])
(defn elem
"Accesses an element in a tuple by index.
(get-in data [(Access/elem 0)])"
[index])
(defn at
"Accesses an element in a list by index.
(get-in data [(Access/at 0)])"
([index])
([index default]))
(defn at!
"Accesses a list element by index. Raises on out of bounds."
[index])
(defn all
"Accesses all elements in a list.
(get-in data [(Access/all)])"
[])
(defn filter
"Filters elements in a list.
(update-in data [(Access/filter (fn [x] (> x 2)))] inc)"
[fun])
(defn find
"Finds the first element matching `fun`.
(get-in data [(Access/find (fn [x] (> x 2)))])"
[fun])
(defn slice
"Accesses a slice of a list.
(get-in data [(Access/slice 1 3)])"
[range-or-index])
(defn pop
"Pops a key from a map or index from a list."
[key])
(defn fetch
"Fetches a value with {:ok value} or :error semantics."
[container key])
(defn fetch!
"Fetches a value. Raises on missing key."
[container key])
(defn get
"Gets a value from a container with optional default."
([container key])
([container key default]))
(defn get-and-update
"Gets and updates a key in one operation."
[container key fun])
(defn get-and-update!
"Gets and updates. Raises if container doesn't implement Access."
[container key fun])