module Patrol.Type.LogEntry 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/#logentry>
data LogEntry = LogEntry
  { LogEntry -> Text
formatted :: Text.Text,
    LogEntry -> Text
message :: Text.Text,
    LogEntry -> Value
params :: Aeson.Value
  }
  deriving (LogEntry -> LogEntry -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LogEntry -> LogEntry -> Bool
$c/= :: LogEntry -> LogEntry -> Bool
== :: LogEntry -> LogEntry -> Bool
$c== :: LogEntry -> LogEntry -> Bool
Eq, Int -> LogEntry -> ShowS
[LogEntry] -> ShowS
LogEntry -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LogEntry] -> ShowS
$cshowList :: [LogEntry] -> ShowS
show :: LogEntry -> String
$cshow :: LogEntry -> String
showsPrec :: Int -> LogEntry -> ShowS
$cshowsPrec :: Int -> LogEntry -> ShowS
Show)

instance Aeson.ToJSON LogEntry where
  toJSON :: LogEntry -> Value
toJSON LogEntry
logEntry =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"formatted" forall a b. (a -> b) -> a -> b
$ LogEntry -> Text
formatted LogEntry
logEntry,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"message" forall a b. (a -> b) -> a -> b
$ LogEntry -> Text
message LogEntry
logEntry,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"params" forall a b. (a -> b) -> a -> b
$ LogEntry -> Value
params LogEntry
logEntry
      ]

empty :: LogEntry
empty :: LogEntry
empty =
  LogEntry
    { formatted :: Text
formatted = Text
Text.empty,
      message :: Text
message = Text
Text.empty,
      params :: Value
params = Value
Aeson.Null
    }