module Patrol.Type.MechanismMeta where

import qualified Data.Aeson as Aeson
import qualified Patrol.Extra.Aeson as Aeson
import qualified Patrol.Type.CError as CError
import qualified Patrol.Type.MachException as MachException
import qualified Patrol.Type.NsError as NsError
import qualified Patrol.Type.PosixSignal as PosixSignal

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#mechanismmeta>
data MechanismMeta = MechanismMeta
  { MechanismMeta -> Maybe CError
errno :: Maybe CError.CError,
    MechanismMeta -> Maybe MachException
machException :: Maybe MachException.MachException,
    MechanismMeta -> Maybe NsError
nsError :: Maybe NsError.NsError,
    MechanismMeta -> Maybe PosixSignal
signal :: Maybe PosixSignal.PosixSignal
  }
  deriving (MechanismMeta -> MechanismMeta -> Bool
(MechanismMeta -> MechanismMeta -> Bool)
-> (MechanismMeta -> MechanismMeta -> Bool) -> Eq MechanismMeta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MechanismMeta -> MechanismMeta -> Bool
== :: MechanismMeta -> MechanismMeta -> Bool
$c/= :: MechanismMeta -> MechanismMeta -> Bool
/= :: MechanismMeta -> MechanismMeta -> Bool
Eq, Int -> MechanismMeta -> ShowS
[MechanismMeta] -> ShowS
MechanismMeta -> String
(Int -> MechanismMeta -> ShowS)
-> (MechanismMeta -> String)
-> ([MechanismMeta] -> ShowS)
-> Show MechanismMeta
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MechanismMeta -> ShowS
showsPrec :: Int -> MechanismMeta -> ShowS
$cshow :: MechanismMeta -> String
show :: MechanismMeta -> String
$cshowList :: [MechanismMeta] -> ShowS
showList :: [MechanismMeta] -> ShowS
Show)

instance Aeson.ToJSON MechanismMeta where
  toJSON :: MechanismMeta -> Value
toJSON MechanismMeta
mechanismMeta =
    [Pair] -> Value
Aeson.intoObject
      [ String -> Maybe CError -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"errno" (Maybe CError -> Pair) -> Maybe CError -> Pair
forall a b. (a -> b) -> a -> b
$ MechanismMeta -> Maybe CError
errno MechanismMeta
mechanismMeta,
        String -> Maybe MachException -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"mach_exception" (Maybe MachException -> Pair) -> Maybe MachException -> Pair
forall a b. (a -> b) -> a -> b
$ MechanismMeta -> Maybe MachException
machException MechanismMeta
mechanismMeta,
        String -> Maybe NsError -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"ns_error" (Maybe NsError -> Pair) -> Maybe NsError -> Pair
forall a b. (a -> b) -> a -> b
$ MechanismMeta -> Maybe NsError
nsError MechanismMeta
mechanismMeta,
        String -> Maybe PosixSignal -> Pair
forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"signal" (Maybe PosixSignal -> Pair) -> Maybe PosixSignal -> Pair
forall a b. (a -> b) -> a -> b
$ MechanismMeta -> Maybe PosixSignal
signal MechanismMeta
mechanismMeta
      ]

empty :: MechanismMeta
empty :: MechanismMeta
empty =
  MechanismMeta
    { errno :: Maybe CError
errno = Maybe CError
forall a. Maybe a
Nothing,
      machException :: Maybe MachException
machException = Maybe MachException
forall a. Maybe a
Nothing,
      nsError :: Maybe NsError
nsError = Maybe NsError
forall a. Maybe a
Nothing,
      signal :: Maybe PosixSignal
signal = Maybe PosixSignal
forall a. Maybe a
Nothing
    }