module Patrol.Type.Mechanism where
import qualified Data.Aeson as Aeson
import qualified Data.Map as Map
import qualified Data.Text as Text
import qualified Patrol.Extra.Aeson as Aeson
import qualified Patrol.Type.MechanismMeta as MechanismMeta
data Mechanism = Mechanism
{ Mechanism -> Map Text Value
data_ :: Map.Map Text.Text Aeson.Value,
Mechanism -> Text
description :: Text.Text,
Mechanism -> Maybe Bool
handled :: Maybe Bool,
Mechanism -> Text
helpLink :: Text.Text,
Mechanism -> Maybe MechanismMeta
meta :: Maybe MechanismMeta.MechanismMeta,
Mechanism -> Maybe Bool
synthetic :: Maybe Bool,
Mechanism -> Text
type_ :: Text.Text
}
deriving (Mechanism -> Mechanism -> Bool
(Mechanism -> Mechanism -> Bool)
-> (Mechanism -> Mechanism -> Bool) -> Eq Mechanism
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Mechanism -> Mechanism -> Bool
== :: Mechanism -> Mechanism -> Bool
$c/= :: Mechanism -> Mechanism -> Bool
/= :: Mechanism -> Mechanism -> Bool
Eq, Int -> Mechanism -> ShowS
[Mechanism] -> ShowS
Mechanism -> String
(Int -> Mechanism -> ShowS)
-> (Mechanism -> String)
-> ([Mechanism] -> ShowS)
-> Show Mechanism
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Mechanism -> ShowS
showsPrec :: Int -> Mechanism -> ShowS
$cshow :: Mechanism -> String
show :: Mechanism -> String
$cshowList :: [Mechanism] -> ShowS
showList :: [Mechanism] -> ShowS
Show)
instance Aeson.ToJSON Mechanism where
toJSON :: Mechanism -> Value
toJSON Mechanism
mechanism =
[Pair] -> Value
Aeson.intoObject
[ String -> Map Text Value -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"data" (Map Text Value -> Pair) -> Map Text Value -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Map Text Value
data_ Mechanism
mechanism,
String -> Text -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"description" (Text -> Pair) -> Text -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Text
description Mechanism
mechanism,
String -> Maybe Bool -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"handled" (Maybe Bool -> Pair) -> Maybe Bool -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Maybe Bool
handled Mechanism
mechanism,
String -> Text -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"help_link" (Text -> Pair) -> Text -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Text
helpLink Mechanism
mechanism,
String -> Maybe MechanismMeta -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"meta" (Maybe MechanismMeta -> Pair) -> Maybe MechanismMeta -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Maybe MechanismMeta
meta Mechanism
mechanism,
String -> Maybe Bool -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"synthetic" (Maybe Bool -> Pair) -> Maybe Bool -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Maybe Bool
synthetic Mechanism
mechanism,
String -> Text -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"type" (Text -> Pair) -> Text -> Pair
forall a b. (a -> b) -> a -> b
$ Mechanism -> Text
type_ Mechanism
mechanism
]
empty :: Mechanism
empty :: Mechanism
empty =
Mechanism
{ data_ :: Map Text Value
data_ = Map Text Value
forall k a. Map k a
Map.empty,
description :: Text
description = Text
Text.empty,
handled :: Maybe Bool
handled = Maybe Bool
forall a. Maybe a
Nothing,
helpLink :: Text
helpLink = Text
Text.empty,
meta :: Maybe MechanismMeta
meta = Maybe MechanismMeta
forall a. Maybe a
Nothing,
synthetic :: Maybe Bool
synthetic = Maybe Bool
forall a. Maybe a
Nothing,
type_ :: Text
type_ = Text
Text.empty
}