packages feed

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