module Belka.IO
(
  C.TransportError(..),
  interact,
  interactUsingNewManager,
  interactUsingGlobalManager,
)
where

import Belka.Prelude hiding (interact)
import qualified Network.HTTP.Client as A
import qualified Network.HTTP.Client.TLS as B
import qualified Belka.TransportError as C
import qualified Belka.Interact as D
import qualified Potoki.IO as E


interact :: A.Manager -> D.Interact a -> IO (Either Text (Either C.TransportError a))
interact manager (D.Interact interactIO) =
  runReaderT (runExceptT (runExceptT interactIO)) manager

interactUsingNewManager :: D.Interact a -> IO (Either Text (Either C.TransportError a))
interactUsingNewManager interact_ =
  do
    manager <- B.newTlsManager
    interact manager interact_

interactUsingGlobalManager :: D.Interact a -> IO (Either Text (Either C.TransportError a))
interactUsingGlobalManager interact_ =
  do
    manager <- B.getGlobalManager
    interact manager interact_