(ns Agent "Elixir Agent module — simple state wrapper around a process. In CljElixir: (Agent/start-link (fn [] initial-state)), etc. Agents are a simpler alternative to GenServer for pure state management.") (defn start "Starts an Agent without linking. Returns {:ok pid}. (Agent/start (fn [] {:count 0}))" ([fun]) ([fun opts]) ([module fun args]) ([module fun args opts])) (defn start-link "Starts an Agent linked to the current process. Returns {:ok pid}. (Agent/start-link (fn [] {:count 0})) (Agent/start-link (fn [] {:count 0}) :name :my-agent)" ([fun]) ([fun opts]) ([module fun args]) ([module fun args opts])) (defn get "Gets the agent state by applying `fun`. Blocks until result. (Agent/get pid (fn [state] (:count state))) ;=> 0 (Agent/get pid (fn [state] state) 5000) ;=> with 5s timeout" ([agent fun]) ([agent fun timeout]) ([agent module fun args]) ([agent module fun args timeout])) (defn update "Updates the agent state by applying `fun`. Returns :ok. (Agent/update pid (fn [state] (update state :count inc))) ;=> :ok" ([agent fun]) ([agent fun timeout]) ([agent module fun args]) ([agent module fun args timeout])) (defn get-and-update "Gets and updates in one operation. `fun` returns {get_value, new_state}. (Agent/get-and-update pid (fn [state] {(:count state) (update state :count inc)}))" ([agent fun]) ([agent fun timeout]) ([agent module fun args]) ([agent module fun args timeout])) (defn cast "Async update. Returns :ok immediately. (Agent/cast pid (fn [state] (assoc state :key \"val\"))) ;=> :ok" ([agent fun]) ([agent module fun args])) (defn stop "Stops the agent. (Agent/stop pid) ;=> :ok" ([agent]) ([agent reason]) ([agent reason timeout]))