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

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

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