-- | -- Module: Boots.Plugin.Salak -- Copyright: 2019 Daniel YU -- License: BSD3 -- Maintainer: leptonyu@gmail.com -- Stability: experimental -- Portability: portable -- -- This module wrap 'salak' into a plugin. -- module Boots.Plugin.Salak( HasSalak(..) , pluginSalak -- ** Configuration Functions , MonadSalak(..) ) where import Boots.Internal import Control.Monad.Reader import Lens.Micro import Lens.Micro.Extras import Salak import Salak.Yaml -- | Environment providing a configuration parser. class HasSalak cxt where askSourcePack :: Lens' cxt SourcePack instance HasSalak SourcePack where askSourcePack = id instance HasSalak cxt => MonadSalak (Plugin cxt m) where askSalak = asks (view askSourcePack) instance (Monad m, HasSalak cxt) => MonadSalak (AppT cxt m) where askSalak = asks (view askSourcePack) -- | Plugin used for parse properties. pluginSalak :: (MonadIO m, MonadCatch m) => String -- ^ Configuration file name. -> Plugin () m SourcePack pluginSalak name = lift $ runSalakWithYaml name askSalak