(ns horizon.common.utils.effects.core
  (:require
   [cljs.core.async :as core.async]
   [horizon.common.logging :as log]
   [om.core :as om]))

(defprotocol Effect
  (process! [this]))

(defrecord PropagationUp [channel messages]
  Effect
  (process! [this]
    (doseq [msg messages]
      (core.async/put! channel msg))))

(defrecord LoggingUnknownMessageType [where msg]
  Effect
  (process! [this]
    (log/log-unknown-message-type where msg)))

(defrecord SettingOmState [owner kw value]
  Effect
  (process! [this]
    (om/set-state! owner kw value)))