{-# LANGUAGE OverloadedRecordDot #-}
{-# LANGUAGE NoFieldSelectors #-}
module Skeletest.Plugin (
Plugin (..),
defaultPlugin,
module Skeletest.Hooks,
) where
import Skeletest.Hooks
import Skeletest.Internal.CLI (Flag)
import Skeletest.Internal.Snapshot.Renderer (SnapshotRenderer)
data Plugin = Plugin
{ Plugin -> [Flag]
cliFlags :: [Flag]
, Plugin -> [SnapshotRenderer]
snapshotRenderers :: [SnapshotRenderer]
, Plugin -> Hooks
hooks :: Hooks
}
instance Semigroup Plugin where
Plugin
plugin1 <> :: Plugin -> Plugin -> Plugin
<> Plugin
plugin2 =
Plugin
{ cliFlags :: [Flag]
cliFlags = Plugin
plugin1.cliFlags [Flag] -> [Flag] -> [Flag]
forall a. Semigroup a => a -> a -> a
<> Plugin
plugin2.cliFlags
, snapshotRenderers :: [SnapshotRenderer]
snapshotRenderers = Plugin
plugin1.snapshotRenderers [SnapshotRenderer] -> [SnapshotRenderer] -> [SnapshotRenderer]
forall a. Semigroup a => a -> a -> a
<> Plugin
plugin2.snapshotRenderers
, hooks :: Hooks
hooks = Plugin
plugin1.hooks Hooks -> Hooks -> Hooks
forall a. Semigroup a => a -> a -> a
<> Plugin
plugin2.hooks
}
instance Monoid Plugin where
mempty :: Plugin
mempty = Plugin
defaultPlugin
defaultPlugin :: Plugin
defaultPlugin :: Plugin
defaultPlugin =
Plugin
{ cliFlags :: [Flag]
cliFlags = []
, snapshotRenderers :: [SnapshotRenderer]
snapshotRenderers = []
, hooks :: Hooks
hooks = Hooks
defaultHooks
}