{-# options_haddock prune #-}
module Helic.Yank where
import qualified Data.Text.IO as Text
import Exon (exon)
import qualified Log
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 qualified Helic.Data.YankConfig
import Helic.Data.YankConfig (YankConfig)
import qualified Helic.Effect.Client as Client
import Helic.Effect.Client (Client)
yank ::
Members [Reader InstanceName, Client, ChronosTime, Log, Error Text, Embed IO] r =>
YankConfig ->
Sem r ()
yank :: forall (r :: EffectRow).
Members
'[Reader InstanceName, Client, ChronosTime, Log, Error Text,
Embed IO]
r =>
YankConfig -> Sem r ()
yank YankConfig
conf = do
Text
text <- forall (m :: * -> *) a. Applicative m => m a -> Maybe a -> m a
fromMaybeA (forall (m :: * -> *) (r :: EffectRow) a.
Member (Embed m) r =>
m a -> Sem r a
embed (Handle -> IO Text
Text.hGetContents Handle
stdin)) YankConfig
conf.text
Event
event <- forall (r :: EffectRow).
Members '[ChronosTime, Reader InstanceName] r =>
AgentId -> Text -> Sem r Event
Event.now (Text -> AgentId
AgentId (forall a. a -> Maybe a -> a
fromMaybe Text
"cli" YankConfig
conf.agent)) Text
text
forall (r :: EffectRow).
Member Client r =>
Event -> Sem r (Either Text ())
Client.yank Event
event forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a b.
Applicative m =>
(a -> m b) -> Either a b -> m b
leftA \ Text
err -> forall (r :: EffectRow).
(HasCallStack, Member Log r) =>
Text -> Sem r ()
Log.debug [exon|Http client error: #{err}|]