module Patrol.Type.MachException where

import qualified Data.Aeson as Aeson
import qualified Data.Text as Text
import qualified Patrol.Extra.Aeson as Aeson

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#machexception>
data MachException = MachException
  { MachException -> Maybe Int
code :: Maybe Int,
    MachException -> Maybe Int
exception :: Maybe Int,
    MachException -> Text
name :: Text.Text,
    MachException -> Maybe Int
subcode :: Maybe Int
  }
  deriving (MachException -> MachException -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MachException -> MachException -> Bool
$c/= :: MachException -> MachException -> Bool
== :: MachException -> MachException -> Bool
$c== :: MachException -> MachException -> Bool
Eq, Int -> MachException -> ShowS
[MachException] -> ShowS
MachException -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [MachException] -> ShowS
$cshowList :: [MachException] -> ShowS
show :: MachException -> String
$cshow :: MachException -> String
showsPrec :: Int -> MachException -> ShowS
$cshowsPrec :: Int -> MachException -> ShowS
Show)

instance Aeson.ToJSON MachException where
  toJSON :: MachException -> Value
toJSON MachException
machException =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"code" forall a b. (a -> b) -> a -> b
$ MachException -> Maybe Int
code MachException
machException,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"exception" forall a b. (a -> b) -> a -> b
$ MachException -> Maybe Int
exception MachException
machException,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"name" forall a b. (a -> b) -> a -> b
$ MachException -> Text
name MachException
machException,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"subcode" forall a b. (a -> b) -> a -> b
$ MachException -> Maybe Int
subcode MachException
machException
      ]

empty :: MachException
empty :: MachException
empty =
  MachException
    { code :: Maybe Int
code = forall a. Maybe a
Nothing,
      exception :: Maybe Int
exception = forall a. Maybe a
Nothing,
      name :: Text
name = Text
Text.empty,
      subcode :: Maybe Int
subcode = forall a. Maybe a
Nothing
    }