simfin-1.0.0: src/SimFin/Util.hs
{-|
Module : SimFin.Util
Description : Common utilities.
Copyright : (c) Owen Shepherd, 2022
License : MIT
Maintainer : owen@owen.cafe
-}
{-# 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
-- | The environment variable 'createDefaultContext' will try to get your
-- API key from.
apiKeyEnvVariable :: String
apiKeyEnvVariable = "SIM_FIN_API_KEY"
-- | Try to make a new http-client manager, and parse your api key from
-- 'apiKeyEnvVariable'.
createDefaultContext :: (MonadFail m, MonadIO m) => m SimFinContext
createDefaultContext = do
manager <- newTlsManager
apiKeyOpt <- liftIO $ lookupEnv apiKeyEnvVariable
case apiKeyOpt of
Nothing -> fail $ "Couldn't find environment variable '" <> apiKeyEnvVariable <> "'"
Just apiKey -> pure $ SimFinContext (BSU.fromString apiKey) manager