-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Declarative configuration spec for Haskell projects -- -- etc gathers configuration values from multiple sources (cli -- options, OS environment variables, files) using a declarative spec -- file that defines where these values are to be found and located in a -- configuration map. @package etc @version 0.3.2.0 module System.Etc.Internal.Spec.Types data ConfigurationError InvalidConfiguration :: !(Maybe Text) -> !Text -> ConfigurationError InvalidConfigKeyPath :: ![Text] -> ConfigurationError ConfigurationFileNotFound :: !Text -> ConfigurationError data CliOptValueType StringOpt :: CliOptValueType NumberOpt :: CliOptValueType SwitchOpt :: CliOptValueType data CliArgValueType StringArg :: CliArgValueType NumberArg :: CliArgValueType data CliEntryMetadata Opt :: !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !(Maybe Text) -> !Bool -> !CliOptValueType -> CliEntryMetadata [optLong] :: CliEntryMetadata -> !(Maybe Text) [optShort] :: CliEntryMetadata -> !(Maybe Text) [optMetavar] :: CliEntryMetadata -> !(Maybe Text) [optHelp] :: CliEntryMetadata -> !(Maybe Text) [optRequired] :: CliEntryMetadata -> !Bool [optValueType] :: CliEntryMetadata -> !CliOptValueType Arg :: !(Maybe Text) -> !Bool -> !CliArgValueType -> CliEntryMetadata [argMetavar] :: CliEntryMetadata -> !(Maybe Text) [optRequired] :: CliEntryMetadata -> !Bool [argValueType] :: CliEntryMetadata -> !CliArgValueType data CliEntrySpec cmd CmdEntry :: !(Vector cmd) -> !CliEntryMetadata -> CliEntrySpec cmd [cliEntryCmdValue] :: CliEntrySpec cmd -> !(Vector cmd) [cliEntryMetadata] :: CliEntrySpec cmd -> !CliEntryMetadata PlainEntry :: !CliEntryMetadata -> CliEntrySpec cmd [cliEntryMetadata] :: CliEntrySpec cmd -> !CliEntryMetadata data CliCmdSpec CliCmdSpec :: !Text -> !Text -> CliCmdSpec [cliCmdDesc] :: CliCmdSpec -> !Text [cliCmdHeader] :: CliCmdSpec -> !Text data ConfigSources cmd ConfigSources :: !(Maybe Text) -> !(Maybe (CliEntrySpec cmd)) -> ConfigSources cmd [envVar] :: ConfigSources cmd -> !(Maybe Text) [cliEntry] :: ConfigSources cmd -> !(Maybe (CliEntrySpec cmd)) data ConfigValue cmd ConfigValue :: !(Maybe Value) -> !Bool -> !(ConfigSources cmd) -> ConfigValue cmd [defaultValue] :: ConfigValue cmd -> !(Maybe Value) [isSensitive] :: ConfigValue cmd -> !Bool [configSources] :: ConfigValue cmd -> !(ConfigSources cmd) SubConfig :: !(HashMap Text (ConfigValue cmd)) -> ConfigValue cmd [subConfig] :: ConfigValue cmd -> !(HashMap Text (ConfigValue cmd)) data CliProgramSpec CliProgramSpec :: !Text -> !Text -> !(Maybe (HashMap Text CliCmdSpec)) -> CliProgramSpec [cliProgramDesc] :: CliProgramSpec -> !Text [cliProgramHeader] :: CliProgramSpec -> !Text [cliCommands] :: CliProgramSpec -> !(Maybe (HashMap Text CliCmdSpec)) data FilesSpec FilePathsSpec :: ![Text] -> FilesSpec FilesSpec :: !(Maybe Text) -> ![Text] -> FilesSpec [fileLocationEnvVar] :: FilesSpec -> !(Maybe Text) [fileLocationPaths] :: FilesSpec -> ![Text] data ConfigSpec cmd ConfigSpec :: !(Maybe FilesSpec) -> !(Maybe CliProgramSpec) -> !(HashMap Text (ConfigValue cmd)) -> ConfigSpec cmd [specConfigFilepaths] :: ConfigSpec cmd -> !(Maybe FilesSpec) [specCliProgramSpec] :: ConfigSpec cmd -> !(Maybe CliProgramSpec) [specConfigValues] :: ConfigSpec cmd -> !(HashMap Text (ConfigValue cmd)) cliArgTypeParser :: Object -> Parser CliArgValueType cliArgParser :: Object -> Parser CliEntryMetadata cliOptTypeParser :: Object -> Parser CliOptValueType cliOptParser :: Object -> Parser CliEntryMetadata cliArgKeys :: [Text] cliOptKeys :: [Text] parseFiles :: Value -> Parser FilesSpec parseFilePaths :: Value -> Parser FilesSpec parseFileSpec :: Value -> Parser (Maybe FilesSpec) instance GHC.Classes.Eq cmd => GHC.Classes.Eq (System.Etc.Internal.Spec.Types.ConfigSpec cmd) instance GHC.Show.Show cmd => GHC.Show.Show (System.Etc.Internal.Spec.Types.ConfigSpec cmd) instance GHC.Classes.Eq System.Etc.Internal.Spec.Types.FilesSpec instance GHC.Show.Show System.Etc.Internal.Spec.Types.FilesSpec instance GHC.Classes.Eq System.Etc.Internal.Spec.Types.CliProgramSpec instance GHC.Show.Show System.Etc.Internal.Spec.Types.CliProgramSpec instance GHC.Classes.Eq cmd => GHC.Classes.Eq (System.Etc.Internal.Spec.Types.ConfigValue cmd) instance GHC.Show.Show cmd => GHC.Show.Show (System.Etc.Internal.Spec.Types.ConfigValue cmd) instance GHC.Classes.Eq cmd => GHC.Classes.Eq (System.Etc.Internal.Spec.Types.ConfigSources cmd) instance GHC.Show.Show cmd => GHC.Show.Show (System.Etc.Internal.Spec.Types.ConfigSources cmd) instance GHC.Classes.Eq System.Etc.Internal.Spec.Types.CliCmdSpec instance GHC.Show.Show System.Etc.Internal.Spec.Types.CliCmdSpec instance GHC.Classes.Eq cmd => GHC.Classes.Eq (System.Etc.Internal.Spec.Types.CliEntrySpec cmd) instance GHC.Show.Show cmd => GHC.Show.Show (System.Etc.Internal.Spec.Types.CliEntrySpec cmd) instance GHC.Classes.Eq System.Etc.Internal.Spec.Types.CliEntryMetadata instance GHC.Show.Show System.Etc.Internal.Spec.Types.CliEntryMetadata instance GHC.Classes.Eq System.Etc.Internal.Spec.Types.CliArgValueType instance GHC.Show.Show System.Etc.Internal.Spec.Types.CliArgValueType instance GHC.Classes.Eq System.Etc.Internal.Spec.Types.CliOptValueType instance GHC.Show.Show System.Etc.Internal.Spec.Types.CliOptValueType instance GHC.Show.Show System.Etc.Internal.Spec.Types.ConfigurationError instance Data.Aeson.Types.FromJSON.FromJSON cmd => Data.Aeson.Types.FromJSON.FromJSON (System.Etc.Internal.Spec.Types.ConfigSpec cmd) instance Data.Aeson.Types.FromJSON.FromJSON System.Etc.Internal.Spec.Types.CliProgramSpec instance Data.Aeson.Types.FromJSON.FromJSON cmd => Data.Aeson.Types.FromJSON.FromJSON (System.Etc.Internal.Spec.Types.ConfigValue cmd) instance Data.Aeson.Types.FromJSON.FromJSON System.Etc.Internal.Spec.Types.CliCmdSpec instance Data.Aeson.Types.FromJSON.FromJSON cmd => Data.Aeson.Types.FromJSON.FromJSON (System.Etc.Internal.Spec.Types.CliEntrySpec cmd) instance GHC.Exception.Exception System.Etc.Internal.Spec.Types.ConfigurationError module System.Etc.Internal.Spec.JSON parseConfigSpec :: (MonadThrow m, FromJSON cmd) => Text -> m (ConfigSpec cmd) readConfigSpec :: FromJSON cmd => Text -> IO (ConfigSpec cmd) module System.Etc.Internal.Types data Value a Plain :: !a -> Value a [fromValue] :: Value a -> !a Sensitive :: !a -> Value a [fromValue] :: Value a -> !a boolToValue :: Bool -> (a -> Value a) data FileSource FilePathSource :: !Text -> FileSource [fileSourcePath] :: FileSource -> !Text EnvVarFileSource :: !Text -> !Text -> FileSource [fileSourceEnvVar] :: FileSource -> !Text [fileSourcePath] :: FileSource -> !Text data ConfigSource File :: !Int -> !FileSource -> !(Value Value) -> ConfigSource [configIndex] :: ConfigSource -> !Int [filepath] :: ConfigSource -> !FileSource [value] :: ConfigSource -> !(Value Value) Env :: !Text -> !(Value Value) -> ConfigSource [envVar] :: ConfigSource -> !Text [value] :: ConfigSource -> !(Value Value) Cli :: !(Value Value) -> ConfigSource [value] :: ConfigSource -> !(Value Value) Default :: !(Value Value) -> ConfigSource [value] :: ConfigSource -> !(Value Value) None :: ConfigSource data ConfigValue ConfigValue :: !(Set ConfigSource) -> ConfigValue [configSource] :: ConfigValue -> !(Set ConfigSource) SubConfig :: !(HashMap Text ConfigValue) -> ConfigValue [configMap] :: ConfigValue -> !(HashMap Text ConfigValue) deepMerge :: ConfigValue -> ConfigValue -> ConfigValue newtype Config Config :: ConfigValue -> Config [fromConfig] :: Config -> ConfigValue isEmptySubConfig :: ConfigValue -> Bool emptySubConfig :: ConfigValue writeInSubConfig :: Text -> ConfigValue -> ConfigValue -> ConfigValue filterMaybe :: (a -> Bool) -> Maybe a -> Maybe a class IConfig config -- | Fetches a configuration value from a given key, if key is not found, -- you may pick the failure mode via the MonadThrow interface. -- -- example: -- --
-- >>> getConfigValue ["db", "user"] config :: Maybe Text -- Just "root" -- -- >>> getConfigValue ["db", "password"] config :: Maybe Text -- Nothing --getConfigValue :: (IConfig config, MonadThrow m, FromJSON result) => [Text] -> config -> m result -- | Fetches a configuration value from a given key, normally this key will -- point to a sub-config JSON object, which is then passed to the given -- JSON parser function. If key is not found, you may pick the failure -- mode via the MonadThrow interface. -- -- example: -- --
-- >>> import qualified Data.Aeson as JSON -- -- >>> import qualified Data.Aeson.Types as JSON (Parser) ---- --
-- >>> connectInfoParser :: JSON.Value -> JSON.Parser DbConnectInfo ---- --
-- >>> getConfigValueWith connectInfoParser ["db"] config
-- Just (DbConnectInfo {...})
--
getConfigValueWith :: (IConfig config, (MonadThrow m)) => (Value -> Parser result) -> [Text] -> config -> m result
getAllConfigSources :: (IConfig config, (MonadThrow m)) => [Text] -> config -> m (Set ConfigSource)
getSelectedConfigSource :: (IConfig config, (MonadThrow m)) => [Text] -> config -> m ConfigSource
instance GHC.Base.Monoid System.Etc.Internal.Types.Config
instance Data.Semigroup.Semigroup System.Etc.Internal.Types.Config
instance GHC.Show.Show System.Etc.Internal.Types.Config
instance GHC.Classes.Eq System.Etc.Internal.Types.Config
instance GHC.Show.Show System.Etc.Internal.Types.ConfigValue
instance GHC.Classes.Eq System.Etc.Internal.Types.ConfigValue
instance GHC.Classes.Eq System.Etc.Internal.Types.ConfigSource
instance GHC.Show.Show System.Etc.Internal.Types.ConfigSource
instance GHC.Classes.Eq System.Etc.Internal.Types.FileSource
instance GHC.Show.Show System.Etc.Internal.Types.FileSource
instance GHC.Classes.Ord a => GHC.Classes.Ord (System.Etc.Internal.Types.Value a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (System.Etc.Internal.Types.Value a)
instance GHC.Generics.Generic (System.Etc.Internal.Types.Value a)
instance Data.Semigroup.Semigroup System.Etc.Internal.Types.ConfigValue
instance GHC.Base.Monoid System.Etc.Internal.Types.ConfigValue
instance GHC.Classes.Ord System.Etc.Internal.Types.ConfigSource
instance GHC.Show.Show a => GHC.Show.Show (System.Etc.Internal.Types.Value a)
instance GHC.Base.Functor System.Etc.Internal.Types.Value
instance GHC.Base.Applicative System.Etc.Internal.Types.Value
instance Data.String.IsString a => Data.String.IsString (System.Etc.Internal.Types.Value a)
module System.Etc.Internal.Resolver.File
-- | Gathers configuration values from a list of files specified on the
-- etc/filepaths entry of a Config Spec. This will return a
-- Configuration Map with values from all filepaths merged in, and a list
-- of errors in case there was an error reading one of the filepaths.
resolveFiles :: ConfigSpec cmd -> IO (Config, Vector SomeException)
instance GHC.Classes.Eq System.Etc.Internal.Resolver.File.ConfigFile
instance GHC.Show.Show System.Etc.Internal.Resolver.File.ConfigFile
module System.Etc.Internal.Resolver.Env
-- | Gathers all OS Environment Variable values (env entries) from
-- the etc/spec entries inside a ConfigSpec.
resolveEnv :: ConfigSpec cmd -> IO Config
-- | Gathers all OS Environment Variable values (env entries) from
-- the etc/spec entries inside a ConfigSpec. This
-- version of the function gathers the input from a list of tuples rather
-- than the OS.
resolveEnvPure :: ConfigSpec cmd -> [(Text, Text)] -> Config
module System.Etc.Internal.Resolver.Default
-- | Gathers all default values from the etc/spec entries inside a
-- ConfigSpec
resolveDefault :: ConfigSpec cmd -> Config
module System.Etc.Internal.Config
configValueToJsonObject :: ConfigValue -> Value
_getConfigValueWith :: MonadThrow m => (Value -> Parser result) -> [Text] -> Config -> m result
_getSelectedConfigSource :: (MonadThrow m) => [Text] -> Config -> m ConfigSource
_getAllConfigSources :: (MonadThrow m) => [Text] -> Config -> m (Set ConfigSource)
_getConfigValue :: (MonadThrow m, FromJSON result) => [Text] -> Config -> m result
instance System.Etc.Internal.Types.IConfig System.Etc.Internal.Types.Config
module System.Etc.Spec
-- | Parses a text input into a ConfigSpec, input can be JSON or
-- YAML (if cabal flag is set).
parseConfigSpec :: (MonadThrow m) => Text -> m (ConfigSpec ())
-- | Reads contents of a file and parses into a ConfigSpec, file
-- contents can be either JSON or YAML (if cabal flag is set).
readConfigSpec :: Text -> IO (ConfigSpec ())
module System.Etc
data Config
class IConfig config
-- | Fetches a configuration value from a given key, if key is not found,
-- you may pick the failure mode via the MonadThrow interface.
--
-- example:
--
-- -- >>> getConfigValue ["db", "user"] config :: Maybe Text -- Just "root" -- -- >>> getConfigValue ["db", "password"] config :: Maybe Text -- Nothing --getConfigValue :: (IConfig config, MonadThrow m, FromJSON result) => [Text] -> config -> m result -- | Fetches a configuration value from a given key, normally this key will -- point to a sub-config JSON object, which is then passed to the given -- JSON parser function. If key is not found, you may pick the failure -- mode via the MonadThrow interface. -- -- example: -- --
-- >>> import qualified Data.Aeson as JSON -- -- >>> import qualified Data.Aeson.Types as JSON (Parser) ---- --
-- >>> connectInfoParser :: JSON.Value -> JSON.Parser DbConnectInfo ---- --
-- >>> getConfigValueWith connectInfoParser ["db"] config
-- Just (DbConnectInfo {...})
--
getConfigValueWith :: (IConfig config, (MonadThrow m)) => (Value -> Parser result) -> [Text] -> config -> m result
getAllConfigSources :: (IConfig config, (MonadThrow m)) => [Text] -> config -> m (Set ConfigSource)
getSelectedConfigSource :: (IConfig config, (MonadThrow m)) => [Text] -> config -> m ConfigSource
data Value a
Plain :: !a -> Value a
[fromValue] :: Value a -> !a
Sensitive :: !a -> Value a
[fromValue] :: Value a -> !a
-- | Fetches a configuration value from a given key, if key is not found,
-- you may pick the failure mode via the MonadThrow interface.
--
-- example:
--
-- -- >>> getConfigValue ["db", "user"] config :: Maybe Text -- Just "root" -- -- >>> getConfigValue ["db", "password"] config :: Maybe Text -- Nothing --getConfigValue :: (IConfig config, MonadThrow m, FromJSON result) => [Text] -> config -> m result -- | Fetches a configuration value from a given key, normally this key will -- point to a sub-config JSON object, which is then passed to the given -- JSON parser function. If key is not found, you may pick the failure -- mode via the MonadThrow interface. -- -- example: -- --
-- >>> import qualified Data.Aeson as JSON -- -- >>> import qualified Data.Aeson.Types as JSON (Parser) ---- --
-- >>> connectInfoParser :: JSON.Value -> JSON.Parser DbConnectInfo ---- --
-- >>> getConfigValueWith connectInfoParser ["db"] config
-- Just (DbConnectInfo {...})
--
getConfigValueWith :: (IConfig config, (MonadThrow m)) => (Value -> Parser result) -> [Text] -> config -> m result
getSelectedConfigSource :: (IConfig config, (MonadThrow m)) => [Text] -> config -> m ConfigSource
getAllConfigSources :: (IConfig config, (MonadThrow m)) => [Text] -> config -> m (Set ConfigSource)
data ConfigSource
File :: !Int -> !FileSource -> !(Value Value) -> ConfigSource
[configIndex] :: ConfigSource -> !Int
[filepath] :: ConfigSource -> !FileSource
[value] :: ConfigSource -> !(Value Value)
Env :: !Text -> !(Value Value) -> ConfigSource
[envVar] :: ConfigSource -> !Text
[value] :: ConfigSource -> !(Value Value)
Cli :: !(Value Value) -> ConfigSource
[value] :: ConfigSource -> !(Value Value)
Default :: !(Value Value) -> ConfigSource
[value] :: ConfigSource -> !(Value Value)
None :: ConfigSource
data ConfigValue
data ConfigSpec cmd
data ConfigurationError
InvalidConfiguration :: !(Maybe Text) -> !Text -> ConfigurationError
InvalidConfigKeyPath :: ![Text] -> ConfigurationError
ConfigurationFileNotFound :: !Text -> ConfigurationError
-- | Parses a text input into a ConfigSpec, input can be JSON or
-- YAML (if cabal flag is set).
parseConfigSpec :: (MonadThrow m) => Text -> m (ConfigSpec ())
-- | Reads contents of a file and parses into a ConfigSpec, file
-- contents can be either JSON or YAML (if cabal flag is set).
readConfigSpec :: Text -> IO (ConfigSpec ())
-- | Gathers all default values from the etc/spec entries inside a
-- ConfigSpec
resolveDefault :: ConfigSpec cmd -> Config
-- | Gathers configuration values from a list of files specified on the
-- etc/filepaths entry of a Config Spec. This will return a
-- Configuration Map with values from all filepaths merged in, and a list
-- of errors in case there was an error reading one of the filepaths.
resolveFiles :: ConfigSpec cmd -> IO (Config, Vector SomeException)
-- | Gathers all OS Environment Variable values (env entries) from
-- the etc/spec entries inside a ConfigSpec. This
-- version of the function gathers the input from a list of tuples rather
-- than the OS.
resolveEnvPure :: ConfigSpec cmd -> [(Text, Text)] -> Config
-- | Gathers all OS Environment Variable values (env entries) from
-- the etc/spec entries inside a ConfigSpec.
resolveEnv :: ConfigSpec cmd -> IO Config