module Boots.Plugin.Simple(
Simple(..)
, HasSimple(..)
, pluginSimple
) where
import Boots.Internal
import Boots.Plugin.Logger
import Boots.Plugin.Salak
import Data.Text (Text, unpack)
import Lens.Micro
import Salak
data Simple = Simple
{ sourcePack :: SourcePack
, logFunc :: LogFunc
}
class HasSimple cxt where
askSimple :: Lens' cxt Simple
instance HasSimple Simple where
askSimple = id
instance HasLogger Simple where
askLogger = lens logFunc (\x y -> x { logFunc = y})
instance HasSalak Simple where
askSourcePack = lens sourcePack (\x y -> x {sourcePack = y})
pluginSimple
:: (MonadCatch m, MonadIO m)
=> Text
-> Plugin () m Simple
pluginSimple application = do
sourcePack <- pluginSalak $ unpack application
logFunc <- promote sourcePack $ pluginLogger application
return Simple{..}