{-# LANGUAGE RecordWildCards #-} module Network.Haskbot.Internal.Environment ( Environment (..) , bootstrap , HaskbotM , EnvironT ) where import Control.Concurrent.STM.TVar (TVar, newTVarIO) import Control.Monad.Error (Error, ErrorT) import Control.Monad.Error.Class (noMsg, strMsg) import Control.Monad.Reader (ReaderT) import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy as BL import qualified Network.Connection as N import Network.Haskbot.Config (Config) import qualified Network.HTTP.Conduit as N import Network.HTTP.Types (Status, internalServerError500, mkStatus) data Environment = Environment { incQueue :: TVar [BL.ByteString] , netConn :: N.Manager , config :: Config } type EnvironT m = ReaderT Environment m type HaskbotM = EnvironT (ErrorT Status IO) instance Error Status where noMsg = internalServerError500 strMsg = mkStatus 500 . B8.pack -- internal functions bootstrap :: Config -> IO Environment bootstrap configuration = do incQueue <- newTVarIO [] netConn <- defNetConn >>= N.newManager config <- return configuration return $ Environment {..} -- private functions defNetConn :: IO N.ManagerSettings defNetConn = return $ N.mkManagerSettings tlsInfo Nothing where tlsInfo = N.TLSSettingsSimple False False False