{-# LANGUAGE UndecidableInstances #-}
module Shrun.Configuration.Data.Notify.Action
(
NotifyActionStartSwitch (..),
NotifyActionComplete (..),
parseNotifyAction,
notifyActionMeta,
)
where
import Shrun.Configuration.Data.ConfigPhase (parseSwitch)
import Shrun.Configuration.Default (Default (def))
import Shrun.Prelude
import Shrun.Utils qualified as Utils
newtype NotifyActionStartSwitch = MkNotifyActionStartSwitch Bool
deriving stock (NotifyActionStartSwitch
NotifyActionStartSwitch
-> NotifyActionStartSwitch -> Bounded NotifyActionStartSwitch
forall a. a -> a -> Bounded a
$cminBound :: NotifyActionStartSwitch
minBound :: NotifyActionStartSwitch
$cmaxBound :: NotifyActionStartSwitch
maxBound :: NotifyActionStartSwitch
Bounded, NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
(NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool)
-> (NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool)
-> Eq NotifyActionStartSwitch
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
== :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
$c/= :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
/= :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
Eq, Eq NotifyActionStartSwitch
Eq NotifyActionStartSwitch =>
(NotifyActionStartSwitch -> NotifyActionStartSwitch -> Ordering)
-> (NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool)
-> (NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool)
-> (NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool)
-> (NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool)
-> (NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch)
-> (NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch)
-> Ord NotifyActionStartSwitch
NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
NotifyActionStartSwitch -> NotifyActionStartSwitch -> Ordering
NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Ordering
compare :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Ordering
$c< :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
< :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
$c<= :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
<= :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
$c> :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
> :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
$c>= :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
>= :: NotifyActionStartSwitch -> NotifyActionStartSwitch -> Bool
$cmax :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch
max :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch
$cmin :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch
min :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> NotifyActionStartSwitch
Ord, Int -> NotifyActionStartSwitch -> ShowS
[NotifyActionStartSwitch] -> ShowS
NotifyActionStartSwitch -> String
(Int -> NotifyActionStartSwitch -> ShowS)
-> (NotifyActionStartSwitch -> String)
-> ([NotifyActionStartSwitch] -> ShowS)
-> Show NotifyActionStartSwitch
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NotifyActionStartSwitch -> ShowS
showsPrec :: Int -> NotifyActionStartSwitch -> ShowS
$cshow :: NotifyActionStartSwitch -> String
show :: NotifyActionStartSwitch -> String
$cshowList :: [NotifyActionStartSwitch] -> ShowS
showList :: [NotifyActionStartSwitch] -> ShowS
Show)
deriving newtype (Int -> NotifyActionStartSwitch
NotifyActionStartSwitch -> Int
NotifyActionStartSwitch -> [NotifyActionStartSwitch]
NotifyActionStartSwitch -> NotifyActionStartSwitch
NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch]
NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> [NotifyActionStartSwitch]
(NotifyActionStartSwitch -> NotifyActionStartSwitch)
-> (NotifyActionStartSwitch -> NotifyActionStartSwitch)
-> (Int -> NotifyActionStartSwitch)
-> (NotifyActionStartSwitch -> Int)
-> (NotifyActionStartSwitch -> [NotifyActionStartSwitch])
-> (NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch])
-> (NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch])
-> (NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> [NotifyActionStartSwitch])
-> Enum NotifyActionStartSwitch
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: NotifyActionStartSwitch -> NotifyActionStartSwitch
succ :: NotifyActionStartSwitch -> NotifyActionStartSwitch
$cpred :: NotifyActionStartSwitch -> NotifyActionStartSwitch
pred :: NotifyActionStartSwitch -> NotifyActionStartSwitch
$ctoEnum :: Int -> NotifyActionStartSwitch
toEnum :: Int -> NotifyActionStartSwitch
$cfromEnum :: NotifyActionStartSwitch -> Int
fromEnum :: NotifyActionStartSwitch -> Int
$cenumFrom :: NotifyActionStartSwitch -> [NotifyActionStartSwitch]
enumFrom :: NotifyActionStartSwitch -> [NotifyActionStartSwitch]
$cenumFromThen :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch]
enumFromThen :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch]
$cenumFromTo :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch]
enumFromTo :: NotifyActionStartSwitch
-> NotifyActionStartSwitch -> [NotifyActionStartSwitch]
$cenumFromThenTo :: NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> [NotifyActionStartSwitch]
enumFromThenTo :: NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> NotifyActionStartSwitch
-> [NotifyActionStartSwitch]
Enum)
instance DecodeTOML NotifyActionStartSwitch where
tomlDecoder :: Decoder NotifyActionStartSwitch
tomlDecoder = Bool -> NotifyActionStartSwitch
MkNotifyActionStartSwitch (Bool -> NotifyActionStartSwitch)
-> Decoder Bool -> Decoder NotifyActionStartSwitch
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
<$> (Decoder Text
forall a. DecodeTOML a => Decoder a
tomlDecoder Decoder Text -> (Text -> Decoder Bool) -> Decoder Bool
forall a b. Decoder a -> (a -> Decoder b) -> Decoder b
forall (m :: Type -> Type) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Decoder Bool
forall (m :: Type -> Type). MonadFail m => Text -> m Bool
parseSwitch)
instance Default NotifyActionStartSwitch where
def :: NotifyActionStartSwitch
def = Bool -> NotifyActionStartSwitch
MkNotifyActionStartSwitch Bool
False
instance
(k ~ An_Iso, a ~ Bool, b ~ Bool) =>
LabelOptic "unNotifyActionStartSwitch" k NotifyActionStartSwitch NotifyActionStartSwitch a b
where
labelOptic :: Optic k NoIx NotifyActionStartSwitch NotifyActionStartSwitch a b
labelOptic = (NotifyActionStartSwitch -> a)
-> (b -> NotifyActionStartSwitch)
-> Iso NotifyActionStartSwitch NotifyActionStartSwitch a b
forall s a b t. (s -> a) -> (b -> t) -> Iso s t a b
iso (\(MkNotifyActionStartSwitch Bool
b) -> a
Bool
b) b -> NotifyActionStartSwitch
Bool -> NotifyActionStartSwitch
MkNotifyActionStartSwitch
{-# INLINE labelOptic #-}
data NotifyActionComplete
=
NotifyActionCompleteFinal
|
NotifyActionCompleteCommand
|
NotifyActionCompleteAll
deriving stock (NotifyActionComplete
NotifyActionComplete
-> NotifyActionComplete -> Bounded NotifyActionComplete
forall a. a -> a -> Bounded a
$cminBound :: NotifyActionComplete
minBound :: NotifyActionComplete
$cmaxBound :: NotifyActionComplete
maxBound :: NotifyActionComplete
Bounded, Int -> NotifyActionComplete
NotifyActionComplete -> Int
NotifyActionComplete -> [NotifyActionComplete]
NotifyActionComplete -> NotifyActionComplete
NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete]
NotifyActionComplete
-> NotifyActionComplete
-> NotifyActionComplete
-> [NotifyActionComplete]
(NotifyActionComplete -> NotifyActionComplete)
-> (NotifyActionComplete -> NotifyActionComplete)
-> (Int -> NotifyActionComplete)
-> (NotifyActionComplete -> Int)
-> (NotifyActionComplete -> [NotifyActionComplete])
-> (NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete])
-> (NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete])
-> (NotifyActionComplete
-> NotifyActionComplete
-> NotifyActionComplete
-> [NotifyActionComplete])
-> Enum NotifyActionComplete
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: NotifyActionComplete -> NotifyActionComplete
succ :: NotifyActionComplete -> NotifyActionComplete
$cpred :: NotifyActionComplete -> NotifyActionComplete
pred :: NotifyActionComplete -> NotifyActionComplete
$ctoEnum :: Int -> NotifyActionComplete
toEnum :: Int -> NotifyActionComplete
$cfromEnum :: NotifyActionComplete -> Int
fromEnum :: NotifyActionComplete -> Int
$cenumFrom :: NotifyActionComplete -> [NotifyActionComplete]
enumFrom :: NotifyActionComplete -> [NotifyActionComplete]
$cenumFromThen :: NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete]
enumFromThen :: NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete]
$cenumFromTo :: NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete]
enumFromTo :: NotifyActionComplete
-> NotifyActionComplete -> [NotifyActionComplete]
$cenumFromThenTo :: NotifyActionComplete
-> NotifyActionComplete
-> NotifyActionComplete
-> [NotifyActionComplete]
enumFromThenTo :: NotifyActionComplete
-> NotifyActionComplete
-> NotifyActionComplete
-> [NotifyActionComplete]
Enum, NotifyActionComplete -> NotifyActionComplete -> Bool
(NotifyActionComplete -> NotifyActionComplete -> Bool)
-> (NotifyActionComplete -> NotifyActionComplete -> Bool)
-> Eq NotifyActionComplete
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NotifyActionComplete -> NotifyActionComplete -> Bool
== :: NotifyActionComplete -> NotifyActionComplete -> Bool
$c/= :: NotifyActionComplete -> NotifyActionComplete -> Bool
/= :: NotifyActionComplete -> NotifyActionComplete -> Bool
Eq, Int -> NotifyActionComplete -> ShowS
[NotifyActionComplete] -> ShowS
NotifyActionComplete -> String
(Int -> NotifyActionComplete -> ShowS)
-> (NotifyActionComplete -> String)
-> ([NotifyActionComplete] -> ShowS)
-> Show NotifyActionComplete
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NotifyActionComplete -> ShowS
showsPrec :: Int -> NotifyActionComplete -> ShowS
$cshow :: NotifyActionComplete -> String
show :: NotifyActionComplete -> String
$cshowList :: [NotifyActionComplete] -> ShowS
showList :: [NotifyActionComplete] -> ShowS
Show)
instance DecodeTOML NotifyActionComplete where
tomlDecoder :: Decoder NotifyActionComplete
tomlDecoder = Decoder Text
forall a. DecodeTOML a => Decoder a
tomlDecoder Decoder Text
-> (Text -> Decoder NotifyActionComplete)
-> Decoder NotifyActionComplete
forall a b. Decoder a -> (a -> Decoder b) -> Decoder b
forall (m :: Type -> Type) a b. Monad m => m a -> (a -> m b) -> m b
>>= Text -> Decoder NotifyActionComplete
forall (m :: Type -> Type).
MonadFail m =>
Text -> m NotifyActionComplete
parseNotifyAction
instance Pretty NotifyActionComplete where
pretty :: forall ann. NotifyActionComplete -> Doc ann
pretty = \case
NotifyActionComplete
NotifyActionCompleteFinal -> Doc ann
"final"
NotifyActionComplete
NotifyActionCompleteCommand -> Doc ann
"command"
NotifyActionComplete
NotifyActionCompleteAll -> Doc ann
"all"
parseNotifyAction :: (MonadFail m) => Text -> m NotifyActionComplete
parseNotifyAction :: forall (m :: Type -> Type).
MonadFail m =>
Text -> m NotifyActionComplete
parseNotifyAction = Text -> (Bool, [Text]) -> Text -> m NotifyActionComplete
forall a (m :: Type -> Type).
(Bounded a, Enum a, MonadFail m, Pretty a) =>
Text -> (Bool, [Text]) -> Text -> m a
Utils.inversePrettyFail Text
"notify-action-complete" (Bool, [Text])
forall a. IsString a => (Bool, [a])
notifyActionMeta
{-# INLINEABLE parseNotifyAction #-}
notifyActionMeta :: (IsString a) => Tuple2 Bool (List a)
notifyActionMeta :: forall a. IsString a => (Bool, [a])
notifyActionMeta = (Bool
True, [a
"all", a
"command", a
"final"])