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
- data Selector
- data SourcePack
- type SourcePackT = StateT SourcePack
- data Reload = Reload {
- sourceName :: Text
- reload :: Priority -> IO Source
- load :: (Functor f, Foldable f) => Reload -> f a -> (Priority -> a -> (Text, Value)) -> SourcePack -> SourcePack
- loadJSON :: Reload -> Value -> SourcePack -> SourcePack
- loadYaml :: MonadIO m => FilePath -> SourcePackT m ()
- loadEnv :: MonadIO m => SourcePackT m ()
- defaultLoadSalak :: MonadIO m => PropConfig -> ReaderT SourcePack m a -> m a
- loadSalak :: Monad m => ReaderT SourcePack m a -> SourcePackT m () -> m a
- data PropConfig = PropConfig {
- configFileKey :: Maybe String
- commandLine :: ParseCommandLine
- 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
- runReloadable :: MonadIO m => SourcePack -> ReloadableSourcePackT m a -> m (a, IO (Bool, [String]))
- type Prop a = ReaderT SourcePack PResult a
- class FromProp a where
- data PResult a
- readPrimitive :: ([Selector] -> Value -> PResult a) -> Prop a
- readSelect :: FromProp a => Text -> Prop a
- err :: String -> Prop a
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}
Source
data SourcePack Source #
Instances
Show SourcePack Source # | |
Defined in Salak.Types showsPrec :: Int -> SourcePack -> ShowS # show :: SourcePack -> String # showList :: [SourcePack] -> ShowS # | |
FromProp a => IsString (Prop a) Source # | |
Defined in Salak.Prop fromString :: String -> Prop a # | |
Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak |
type SourcePackT = StateT SourcePack Source #
Reload | |
|
load :: (Functor f, Foldable f) => Reload -> f a -> (Priority -> a -> (Text, Value)) -> SourcePack -> SourcePack Source #
loadJSON :: Reload -> Value -> SourcePack -> SourcePack Source #
loadEnv :: MonadIO m => SourcePackT m () Source #
Salak
defaultLoadSalak :: MonadIO m => PropConfig -> ReaderT SourcePack m a -> m a Source #
loadSalak :: Monad m => ReaderT SourcePack m a -> SourcePackT m () -> m a Source #
data PropConfig Source #
PropConfig | |
|
Instances
Default PropConfig Source # | |
Defined in Salak def :: PropConfig # |
class Monad m => HasSourcePack m where Source #
askSourcePack :: m SourcePack Source #
Instances
Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak |
Utilities
data ReloadableSourcePack Source #
runReloadable :: MonadIO m => SourcePack -> ReloadableSourcePackT m a -> m (a, IO (Bool, [String])) Source #
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 # | |
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 # | |