-- |
-- Module      :  Configuration.Dotenv.Types
-- Copyright   :  © 2015–2020 Stack Builders Inc.
-- License     :  MIT
--
-- Maintainer  :  Stack Builders <hackage@stackbuilders.com>
-- Stability   :  experimental
-- Portability :  portable
--
-- Provides a Data.Text interface for retrieving variables in a dotenv file.

module Configuration.Dotenv.Text (parseFile) where

import qualified Configuration.Dotenv

import           Control.Arrow          ((***))
import qualified Data.Text              as T

import           Control.Monad          (liftM)

import           Control.Monad.IO.Class (MonadIO (..))

-- | Parses the given dotenv file and returns values /without/ adding them to
-- the environment.
parseFile ::
  MonadIO m =>
  FilePath -- ^ A file containing options to read
  -> m [(T.Text, T.Text)] -- ^ Variables contained in the file
parseFile :: forall (m :: * -> *). MonadIO m => FilePath -> m [(Text, Text)]
parseFile FilePath
f = forall a b. (a -> b) -> [a] -> [b]
map (FilePath -> Text
T.pack forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** FilePath -> Text
T.pack) forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
`liftM` forall (m :: * -> *).
MonadIO m =>
FilePath -> m [(FilePath, FilePath)]
Configuration.Dotenv.parseFile FilePath
f