packages feed

opt-env-conf-0.0.0.0: src/OptEnvConf/EnvMap.hs

{-# LANGUAGE DeriveGeneric #-}

module OptEnvConf.EnvMap
  ( EnvMap (..),
    empty,
    parse,
    lookup,
    insert,
  )
where

import Data.Map (Map)
import qualified Data.Map as M
import Data.Validity
import Data.Validity.Containers ()
import GHC.Generics (Generic)
import Prelude hiding (lookup)

-- | Abstraction for storing and looking up environment variables
--
-- This can be faster than [(String, String)] and also cannot represent
-- duplicate keys.
newtype EnvMap = EnvMap {unEnvMap :: Map String String}
  deriving (Show, Generic)

instance Validity EnvMap

empty :: EnvMap
empty = EnvMap {unEnvMap = M.empty}

parse :: [(String, String)] -> EnvMap
parse = EnvMap . M.fromList -- TODO fail if there are duplicate keys.

lookup :: String -> EnvMap -> Maybe String
lookup v (EnvMap m) = M.lookup v m

insert :: String -> String -> EnvMap -> EnvMap
insert k v (EnvMap m) = EnvMap (M.insert k v m)