| 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
- 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" .?= 1main = 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 Methods showsPrec :: Int -> SourcePack -> ShowS # show :: SourcePack -> String # showList :: [SourcePack] -> ShowS # | |
| FromProp a => IsString (Prop a) Source # | |
Defined in Salak.Prop Methods fromString :: String -> Prop a # | |
| Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak Methods | |
type SourcePackT = StateT SourcePack Source #
Constructors
| Reload | |
Fields
| |
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 #
Constructors
| PropConfig | |
Fields
| |
Instances
| Default PropConfig Source # | |
Defined in Salak Methods def :: PropConfig # | |
class Monad m => HasSourcePack m where Source #
Methods
askSourcePack :: m SourcePack Source #
Instances
| Monad m => HasSourcePack (ReaderT SourcePack m) Source # | |
Defined in Salak Methods | |
Utilities
data ReloadableSourcePack Source #
runReloadable :: MonadIO m => SourcePack -> ReloadableSourcePackT m a -> m (a, IO (Bool, [String])) Source #
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 # | |
| 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 # | |