module Rollbar.Item.Data
( Data(..)
, Context(..)
, Fingerprint(..)
, Framework(..)
, Title(..)
, UUID4(..)
) where
import Data.Aeson
( ToJSON
, Value
, defaultOptions
, genericToEncoding
, genericToJSON
, toEncoding
, toJSON
)
import Data.Aeson.Types (fieldLabelModifier, omitNothingFields)
import Data.String (IsString)
import Data.Time (UTCTime)
import Data.UUID (UUID, toText)
import GHC.Generics (Generic)
import Rollbar.Item.Body (Body)
import Rollbar.Item.CodeVersion (CodeVersion)
import Rollbar.Item.Environment (Environment)
import Rollbar.Item.Hardcoded (Hardcoded)
import Rollbar.Item.Level (Level)
import Rollbar.Item.Person (Person)
import Rollbar.Item.Request (Request)
import Rollbar.Item.Server (Server)
import Rollbar.Item.Internal.Notifier (Notifier)
import Rollbar.Item.Internal.Platform (Platform)
import qualified Data.HashMap.Lazy as HM
import qualified Data.Text as T
data Data body
= Data
{ body :: Body body
, codeVersion :: CodeVersion
, context :: Maybe Context
, custom :: Maybe (HM.HashMap T.Text Value)
, environment :: Environment
, fingerprint :: Maybe Fingerprint
, framework :: Maybe Framework
, language :: Hardcoded "haskell"
, level :: Level
, notifier :: Notifier
, person :: Maybe Person
, platform :: Platform
, request :: Maybe Request
, server :: Maybe Server
, timestamp :: Maybe UTCTime
, title :: Maybe Title
, uuid :: Maybe UUID4
}
deriving (Eq, Generic, Show)
instance ToJSON body => ToJSON (Data body) where
toJSON = genericToJSON defaultOptions
{ fieldLabelModifier = codeVersionModifier
, omitNothingFields = True
}
toEncoding = genericToEncoding defaultOptions
{ fieldLabelModifier = codeVersionModifier
, omitNothingFields = True
}
codeVersionModifier :: (Eq s, IsString s) => s -> s
codeVersionModifier = \case
"codeVersion" -> "code_version"
str -> str
newtype Framework
= Framework T.Text
deriving (Eq, IsString, Show, ToJSON)
newtype Context
= Context T.Text
deriving (Eq, IsString, Show, ToJSON)
newtype Fingerprint
= Fingerprint T.Text
deriving (Eq, IsString, Show, ToJSON)
newtype Title
= Title T.Text
deriving (Eq, IsString, Show, ToJSON)
newtype UUID4
= UUID4 UUID
deriving (Eq, Generic, Show)
instance ToJSON UUID4 where
toJSON (UUID4 u) = toJSON (toText u)
toEncoding (UUID4 u) = toEncoding (toText u)