{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module SimFin.Util
( createDefaultContext
, apiKeyEnvVariable
) where
import Control.Monad.IO.Class
import qualified Data.ByteString.UTF8 as BSU
import Network.HTTP.Client.TLS
import System.Environment (lookupEnv)
import SimFin.Internal
apiKeyEnvVariable :: String
apiKeyEnvVariable :: String
apiKeyEnvVariable = String
"SIM_FIN_API_KEY"
createDefaultContext :: (MonadFail m, MonadIO m) => m SimFinContext
createDefaultContext :: m SimFinContext
createDefaultContext = do
Manager
manager <- m Manager
forall (m :: * -> *). MonadIO m => m Manager
newTlsManager
Maybe String
apiKeyOpt <- IO (Maybe String) -> m (Maybe String)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe String) -> m (Maybe String))
-> IO (Maybe String) -> m (Maybe String)
forall a b. (a -> b) -> a -> b
$ String -> IO (Maybe String)
lookupEnv String
apiKeyEnvVariable
case Maybe String
apiKeyOpt of
Maybe String
Nothing -> String -> m SimFinContext
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m SimFinContext) -> String -> m SimFinContext
forall a b. (a -> b) -> a -> b
$ String
"Couldn't find environment variable '" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
apiKeyEnvVariable String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"'"
Just String
apiKey -> SimFinContext -> m SimFinContext
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SimFinContext -> m SimFinContext)
-> SimFinContext -> m SimFinContext
forall a b. (a -> b) -> a -> b
$ ByteString -> Manager -> SimFinContext
SimFinContext (String -> ByteString
BSU.fromString String
apiKey) Manager
manager