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
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Mechanism -> Mechanism -> Bool
$c/= :: Mechanism -> Mechanism -> Bool
== :: Mechanism -> Mechanism -> Bool
$c== :: Mechanism -> Mechanism -> Bool
Eq, Int -> Mechanism -> ShowS
[Mechanism] -> ShowS
Mechanism -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Mechanism] -> ShowS
$cshowList :: [Mechanism] -> ShowS
show :: Mechanism -> String
$cshow :: Mechanism -> String
showsPrec :: Int -> Mechanism -> ShowS
$cshowsPrec :: Int -> Mechanism -> ShowS
Show)

instance Aeson.ToJSON Mechanism where
  toJSON :: Mechanism -> Value
toJSON Mechanism
mechanism =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"data" forall a b. (a -> b) -> a -> b
$ Mechanism -> Map Text Value
data_ Mechanism
mechanism,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"description" forall a b. (a -> b) -> a -> b
$ Mechanism -> Text
description Mechanism
mechanism,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"handled" forall a b. (a -> b) -> a -> b
$ Mechanism -> Maybe Bool
handled Mechanism
mechanism,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"help_link" forall a b. (a -> b) -> a -> b
$ Mechanism -> Text
helpLink Mechanism
mechanism,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"meta" forall a b. (a -> b) -> a -> b
$ Mechanism -> Maybe MechanismMeta
meta Mechanism
mechanism,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"synthetic" forall a b. (a -> b) -> a -> b
$ Mechanism -> Maybe Bool
synthetic Mechanism
mechanism,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"type" forall a b. (a -> b) -> a -> b
$ Mechanism -> Text
type_ Mechanism
mechanism
      ]

empty :: Mechanism
empty :: Mechanism
empty =
  Mechanism
    { data_ :: Map Text Value
data_ = forall k a. Map k a
Map.empty,
      description :: Text
description = Text
Text.empty,
      handled :: Maybe Bool
handled = forall a. Maybe a
Nothing,
      helpLink :: Text
helpLink = Text
Text.empty,
      meta :: Maybe MechanismMeta
meta = forall a. Maybe a
Nothing,
      synthetic :: Maybe Bool
synthetic = forall a. Maybe a
Nothing,
      type_ :: Text
type_ = Text
Text.empty
    }