{-# options_haddock prune #-}
module Helic.Yank where
import qualified Data.Text.IO as Text
import Polysemy.Chronos (ChronosTime)
import System.IO (stdin)
import Helic.Data.AgentId (AgentId (AgentId))
import qualified Helic.Data.Event as Event
import Helic.Data.InstanceName (InstanceName)
import Helic.Data.YankConfig (YankConfig (YankConfig))
import qualified Helic.Effect.Client as Client
import Helic.Effect.Client (Client)
yank ::
Members [Reader InstanceName, Client, ChronosTime, 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
Either Text () -> Sem r ()
forall e (r :: EffectRow) a.
Member (Error e) r =>
Either e a -> Sem r a
fromEither (Either Text () -> Sem r ()) -> Sem r (Either Text ()) -> Sem r ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Event -> Sem r (Either Text ())
forall (r :: EffectRow).
Member Client r =>
Event -> Sem r (Either Text ())
Client.yank Event
event