module Patrol.Type.EventProcessingError where

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

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#eventprocessingerror>
data EventProcessingError = EventProcessingError
  { EventProcessingError -> Text
name :: Text.Text,
    EventProcessingError -> ErrorType
type_ :: ErrorType.ErrorType,
    EventProcessingError -> Value
value :: Aeson.Value
  }
  deriving (EventProcessingError -> EventProcessingError -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: EventProcessingError -> EventProcessingError -> Bool
$c/= :: EventProcessingError -> EventProcessingError -> Bool
== :: EventProcessingError -> EventProcessingError -> Bool
$c== :: EventProcessingError -> EventProcessingError -> Bool
Eq, Int -> EventProcessingError -> ShowS
[EventProcessingError] -> ShowS
EventProcessingError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EventProcessingError] -> ShowS
$cshowList :: [EventProcessingError] -> ShowS
show :: EventProcessingError -> String
$cshow :: EventProcessingError -> String
showsPrec :: Int -> EventProcessingError -> ShowS
$cshowsPrec :: Int -> EventProcessingError -> ShowS
Show)

instance Aeson.ToJSON EventProcessingError where
  toJSON :: EventProcessingError -> Value
toJSON EventProcessingError
eventProcessingError =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"name" forall a b. (a -> b) -> a -> b
$ EventProcessingError -> Text
name EventProcessingError
eventProcessingError,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"type" forall a b. (a -> b) -> a -> b
$ EventProcessingError -> ErrorType
type_ EventProcessingError
eventProcessingError,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"value" forall a b. (a -> b) -> a -> b
$ EventProcessingError -> Value
value EventProcessingError
eventProcessingError
      ]

empty :: EventProcessingError
empty :: EventProcessingError
empty =
  EventProcessingError
    { name :: Text
name = Text
Text.empty,
      type_ :: ErrorType
type_ = ErrorType
ErrorType.UnknownError,
      value :: Value
value = Value
Aeson.Null
    }