{-# options_haddock prune #-}
module Helic.Yank where
import qualified Data.Text.IO as Text
import Polysemy.Chronos.Time (ChronosTime)
import Polysemy.Http (Manager)
import Polysemy.Log (Log)
import Helic.Data.AgentId (AgentId (AgentId))
import qualified Helic.Data.Event as Event
import Helic.Data.InstanceName (InstanceName)
import qualified Helic.Data.NetConfig as NetConfig
import Helic.Data.NetConfig (NetConfig)
import Helic.Data.YankConfig (YankConfig (YankConfig))
import Helic.Net.Client (localhost, sendTo)
yank ::
Members [Reader InstanceName, Reader NetConfig, ChronosTime, Manager, Log, Race, Error Text, Embed IO] r =>
YankConfig ->
Sem r ()
yank :: YankConfig -> Sem r ()
yank (YankConfig Maybe Text
agent) = do
Text
text <- IO Text -> Sem r Text
forall (m :: * -> *) (r :: EffectRow) a.
Member (Embed m) r =>
m a -> Sem r a
embed (Handle -> IO Text
Text.hGetContents Handle
stdin)
Event
event <- AgentId -> Text -> Sem r Event
forall (r :: EffectRow).
Members '[ChronosTime, Reader InstanceName] r =>
AgentId -> Text -> Sem r Event
Event.now (Text -> AgentId
AgentId (Text -> Maybe Text -> Text
forall a. a -> Maybe a -> a
fromMaybe Text
"cli" Maybe Text
agent)) Text
text
Host
host <- Sem r Host
forall (r :: EffectRow). Member (Reader NetConfig) r => Sem r Host
localhost
Maybe Timeout
timeout <- (NetConfig -> Maybe Timeout) -> Sem r (Maybe Timeout)
forall i j (r :: EffectRow).
Member (Reader i) r =>
(i -> j) -> Sem r j
asks NetConfig -> Maybe Timeout
NetConfig.timeout
Maybe Timeout -> Host -> Event -> Sem r ()
forall (r :: EffectRow).
Members '[Manager, Log, Race, Error Text, Embed IO] r =>
Maybe Timeout -> Host -> Event -> Sem r ()
sendTo Maybe Timeout
timeout Host
host Event
event