module Patrol.Type.Breadcrumb where

import qualified Data.Aeson as Aeson
import qualified Data.Map as Map
import qualified Data.Text as Text
import qualified Data.Time as Time
import qualified Patrol.Extra.Aeson as Aeson
import qualified Patrol.Type.BreadcrumbType as BreadcrumbType
import qualified Patrol.Type.EventId as EventId
import qualified Patrol.Type.Level as Level

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#breadcrumb>
data Breadcrumb = Breadcrumb
  { Breadcrumb -> Text
category :: Text.Text,
    Breadcrumb -> Map Text Value
data_ :: Map.Map Text.Text Aeson.Value,
    Breadcrumb -> Maybe EventId
eventId :: Maybe EventId.EventId,
    Breadcrumb -> Maybe Level
level :: Maybe Level.Level,
    Breadcrumb -> Text
message :: Text.Text,
    Breadcrumb -> Maybe UTCTime
timestamp :: Maybe Time.UTCTime,
    Breadcrumb -> Maybe BreadcrumbType
type_ :: Maybe BreadcrumbType.BreadcrumbType
  }
  deriving (Breadcrumb -> Breadcrumb -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Breadcrumb -> Breadcrumb -> Bool
$c/= :: Breadcrumb -> Breadcrumb -> Bool
== :: Breadcrumb -> Breadcrumb -> Bool
$c== :: Breadcrumb -> Breadcrumb -> Bool
Eq, Int -> Breadcrumb -> ShowS
[Breadcrumb] -> ShowS
Breadcrumb -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Breadcrumb] -> ShowS
$cshowList :: [Breadcrumb] -> ShowS
show :: Breadcrumb -> String
$cshow :: Breadcrumb -> String
showsPrec :: Int -> Breadcrumb -> ShowS
$cshowsPrec :: Int -> Breadcrumb -> ShowS
Show)

instance Aeson.ToJSON Breadcrumb where
  toJSON :: Breadcrumb -> Value
toJSON Breadcrumb
breadcrumb =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"category" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Text
category Breadcrumb
breadcrumb,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"data" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Map Text Value
data_ Breadcrumb
breadcrumb,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"event_id" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Maybe EventId
eventId Breadcrumb
breadcrumb,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"level" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Maybe Level
level Breadcrumb
breadcrumb,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"message" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Text
message Breadcrumb
breadcrumb,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"timestamp" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Maybe UTCTime
timestamp Breadcrumb
breadcrumb,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"type" forall a b. (a -> b) -> a -> b
$ Breadcrumb -> Maybe BreadcrumbType
type_ Breadcrumb
breadcrumb
      ]

empty :: Breadcrumb
empty :: Breadcrumb
empty =
  Breadcrumb
    { category :: Text
category = Text
Text.empty,
      data_ :: Map Text Value
data_ = forall k a. Map k a
Map.empty,
      eventId :: Maybe EventId
eventId = forall a. Maybe a
Nothing,
      level :: Maybe Level
level = forall a. Maybe a
Nothing,
      message :: Text
message = Text
Text.empty,
      timestamp :: Maybe UTCTime
timestamp = forall a. Maybe a
Nothing,
      type_ :: Maybe BreadcrumbType
type_ = forall a. Maybe a
Nothing
    }