Copyright | (c) 2019 Daniel YU |
---|---|
License | BSD3 |
Maintainer | leptonyu@gmail.com |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Configuration Loader for Production in Haskell.
Synopsis
- defaultLoadSalak :: MonadIO m => PropConfig -> ReaderT SourcePack m a -> m a
- loadSalak :: Monad m => ReaderT SourcePack m a -> SourcePackT m () -> m a
- data PropConfig = PropConfig {}
- class Monad m => HasSourcePack m where
- askSourcePack :: m SourcePack
- fetch :: (HasSourcePack m, FromProp a) => Text -> m (Either String a)
- require :: (HasSourcePack m, FromProp a) => Text -> m a
- data ReloadableSourcePack
- type ReloadableSourcePackT = StateT ReloadableSourcePack
- data ReloadResult = ReloadResult {}
- reloadable :: (MonadIO m, HasSourcePack m) => ReloadableSourcePackT m a -> m a
- fetchD :: (MonadIO m, FromProp a) => Text -> ReloadableSourcePackT m (Either String (IO a))
- requireD :: (MonadIO m, FromProp a) => Text -> ReloadableSourcePackT m (IO a)
- type Prop = PropT PResult
- class FromProp a where
- class FromEnumProp a where
- fromEnumProp :: Text -> Either String a
- (.?=) :: Alternative f => f a -> a -> f a
- (.?:) :: (Alternative f, Default b) => f a -> (b -> a) -> f a
- data SourcePack
- type SourcePackT = StateT SourcePack
- loadYaml :: MonadIO m => FilePath -> SourcePackT m ()
- loadCommandLine :: MonadIO m => ParseCommandLine -> SourcePackT m ()
- loadEnv :: MonadIO m => SourcePackT m ()
- loadMock :: Monad m => [(Text, Text)] -> SourcePackT m ()
- defaultParseCommandLine :: ParseCommandLine
- type ParseCommandLine = [String] -> IO [(Text, Priority -> Value)]
- type Priority = Int
- data Value
How to use this library
| This library default a standard configuration load process. It can load properties from CommandLine
, Environment
,
`JSON value` and Yaml
files. They all load to the same format SourcePack
. Earler property source has higher order
to load property. For example:
CommandLine: --package.a.enabled=true Environment: PACKAGE_A_ENABLED: false
lookup "package.a.enabled" properties => Just True
CommandLine
has higher order then Environment
, for the former load properties earler then later.
Usage:
data Config = Config { name :: Text , dir :: Maybe Text , ext :: Int } deriving (Eq, Show) instance FromProp Config where fromProp = Config <$> "user" <*> "pwd" <*> "ext" .?= 1
main = do c :: Config <- defaultLoadSalak def $ require "" print c
λ> c Config {name = "daniel", dir = Nothing, ext = 1}
Salak
defaultLoadSalak :: MonadIO m => PropConfig -> ReaderT SourcePack m a -> m a Source #
Default load salak. All these configuration sources has orders, from highest order to lowest order:
1. CommandLine 2. Environment 3. Specified Yaml file(file in `configDirKey`) 4. Yaml file in current directory 5. Yaml file in home directory
:: Monad m | |
=> ReaderT SourcePack m a | Fetch properties monad. |
-> SourcePackT m () | Load properties monad. |
-> m a |
Load salak SourcePack
and fetch properties.
data PropConfig Source #
Prop load configuration
PropConfig | |
|
Instances
Default PropConfig Source # | |
Defined in Salak def :: PropConfig # |
Static Load
class Monad m => HasSourcePack m where Source #
askSourcePack :: m SourcePack Source #
Instances
Monad m => HasSourcePack (StateT SourcePack m) Source # | |
Defined in Salak | |
Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak |
:: (HasSourcePack m, FromProp a) | |
=> Text | Properties key |
-> m (Either String a) |
Try fetch properties from SourcePack
:: (HasSourcePack m, FromProp a) | |
=> Text | Properties key |
-> m a |
Fetch properties from SourcePack
, or throw fail
Dynamic Load
data ReloadableSourcePack Source #
Reloadable SourcePack
data ReloadResult Source #
Instances
Eq ReloadResult Source # | |
Defined in Salak.Dynamic (==) :: ReloadResult -> ReloadResult -> Bool # (/=) :: ReloadResult -> ReloadResult -> Bool # | |
Show ReloadResult Source # | |
Defined in Salak.Dynamic showsPrec :: Int -> ReloadResult -> ShowS # show :: ReloadResult -> String # showList :: [ReloadResult] -> ShowS # |
reloadable :: (MonadIO m, HasSourcePack m) => ReloadableSourcePackT m a -> m a Source #
Lift to reloadable environment for dynamic properties.
Try fetch dynamic properties from SourcePack
:: (MonadIO m, FromProp a) | |
=> Text | Properties key |
-> ReloadableSourcePackT m (IO a) |
Fetch dynamic properties from SourcePack
, or throw fail
Prop Parser
class FromProp a where Source #
Nothing
Instances
FromProp Bool Source # | |
FromProp Double Source # | |
FromProp Float Source # | |
FromProp Int Source # | |
FromProp Int8 Source # | |
FromProp Int16 Source # | |
FromProp Int32 Source # | |
FromProp Int64 Source # | |
FromProp Word Source # | |
FromProp Word8 Source # | |
FromProp Word16 Source # | |
FromProp Word32 Source # | |
FromProp Word64 Source # | |
FromEnumProp a => FromProp a Source # | |
Defined in Salak.Prop | |
FromProp Scientific Source # | |
Defined in Salak.Prop | |
FromProp Text Source # | |
FromProp Text Source # | |
FromProp String Source # | |
FromProp a => FromProp [a] Source # | |
Defined in Salak.Prop | |
FromProp a => FromProp (Maybe a) Source # | |
class FromEnumProp a where Source #
(.?=) :: Alternative f => f a -> a -> f a infixl 5 Source #
Optional value.
(.?:) :: (Alternative f, Default b) => f a -> (b -> a) -> f a infixl 5 Source #
Default value.
SourcePack
data SourcePack Source #
Instances
Show SourcePack Source # | |
Defined in Salak.Types showsPrec :: Int -> SourcePack -> ShowS # show :: SourcePack -> String # showList :: [SourcePack] -> ShowS # | |
MonadReader SourcePack Prop Source # | |
Defined in Salak.Prop ask :: Prop SourcePack # local :: (SourcePack -> SourcePack) -> Prop a -> Prop a # reader :: (SourcePack -> a) -> Prop a # | |
Monad m => HasSourcePack (StateT SourcePack m) Source # | |
Defined in Salak | |
Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak |
type SourcePackT = StateT SourcePack Source #
loadCommandLine :: MonadIO m => ParseCommandLine -> SourcePackT m () Source #
loadEnv :: MonadIO m => SourcePackT m () Source #