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

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#mechanism>
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
    }