| Copyright | (c) 2019 Daniel YU |
|---|---|
| License | BSD3 |
| Maintainer | leptonyu@gmail.com |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Salak
Description
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" .?= 1main = 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
Arguments
| :: 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
Constructors
| PropConfig | |
Fields
| |
Instances
| Default PropConfig Source # | |
Defined in Salak Methods def :: PropConfig # | |
Static Load
class Monad m => HasSourcePack m where Source #
Methods
askSourcePack :: m SourcePack Source #
Instances
| Monad m => HasSourcePack (StateT SourcePack m) Source # | |
Defined in Salak Methods | |
| Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak Methods | |
Arguments
| :: (HasSourcePack m, FromProp a) | |
| => Text | Properties key |
| -> m (Either String a) |
Try fetch properties from SourcePack
Arguments
| :: (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 #
Constructors
| ReloadResult | |
Instances
| Eq ReloadResult Source # | |
Defined in Salak.Dynamic | |
| Show ReloadResult Source # | |
Defined in Salak.Dynamic Methods 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.
Arguments
| :: (MonadIO m, FromProp a) | |
| => Text | Properties key |
| -> ReloadableSourcePackT m (Either String (IO a)) |
Try fetch dynamic properties from SourcePack
Arguments
| :: (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 #
Minimal complete definition
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 Methods | |
| 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 Methods showsPrec :: Int -> SourcePack -> ShowS # show :: SourcePack -> String # showList :: [SourcePack] -> ShowS # | |
| MonadReader SourcePack Prop Source # | |
Defined in Salak.Prop Methods 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 Methods | |
| Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak Methods | |
type SourcePackT = StateT SourcePack Source #
loadCommandLine :: MonadIO m => ParseCommandLine -> SourcePackT m () Source #
loadEnv :: MonadIO m => SourcePackT m () Source #