packages feed

conferer-1.1.0.0: src/Conferer/Config/Internal/Types.hs

-- |
-- Copyright: (c) 2019 Lucas David Traverso
-- License: MPL-2.0
-- Maintainer: Lucas David Traverso <lucas6246@gmail.com>
-- Stability: unstable
-- Portability: portable
--
-- Core types for Config (here because of depedency cycles)
module Conferer.Config.Internal.Types where

import Data.Map (Map)
import Conferer.Key (Key)
import Data.Dynamic ( Dynamic )
import Conferer.Source.Internal (Source)
import Data.Text (Text)

-- | This type acts as the entry point for most of the library, it's main purpouse
--   is to expose a uniform interface into multiple configuration sources (such as
--   env vars, cli args, and many others including use defined ones using the
--   'Source' interface)
data Config =
  Config
  { configSources :: [Source]
  , configDefaults :: Map Key [Dynamic]
  , configKeyMappings :: [(Key, Key)]
  } deriving (Show)

-- | Result of a key lookup in a 'Config'
data KeyLookupResult
  = MissingKey [Key]
  | FoundInSources Key Text
  | FoundInDefaults Key [Dynamic]
  deriving (Show)

-- | The type for creating a source given a 'Config', some sources require a
-- certain configuration to be initialized (for example: the redis source
-- needs connection info to connect to the server)
type SourceCreator = Config -> IO Source