module Patrol.Type.SystemSdkInfo 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/#systemsdkinfo>
data SystemSdkInfo = SystemSdkInfo
  { SystemSdkInfo -> Text
sdkName :: Text.Text,
    SystemSdkInfo -> Maybe Int
versionMajor :: Maybe Int,
    SystemSdkInfo -> Maybe Int
versionMinor :: Maybe Int,
    SystemSdkInfo -> Maybe Int
versionPatchlevel :: Maybe Int
  }
  deriving (SystemSdkInfo -> SystemSdkInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SystemSdkInfo -> SystemSdkInfo -> Bool
$c/= :: SystemSdkInfo -> SystemSdkInfo -> Bool
== :: SystemSdkInfo -> SystemSdkInfo -> Bool
$c== :: SystemSdkInfo -> SystemSdkInfo -> Bool
Eq, Int -> SystemSdkInfo -> ShowS
[SystemSdkInfo] -> ShowS
SystemSdkInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SystemSdkInfo] -> ShowS
$cshowList :: [SystemSdkInfo] -> ShowS
show :: SystemSdkInfo -> String
$cshow :: SystemSdkInfo -> String
showsPrec :: Int -> SystemSdkInfo -> ShowS
$cshowsPrec :: Int -> SystemSdkInfo -> ShowS
Show)

instance Aeson.ToJSON SystemSdkInfo where
  toJSON :: SystemSdkInfo -> Value
toJSON SystemSdkInfo
systemSdkInfo =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"sdk_name" forall a b. (a -> b) -> a -> b
$ SystemSdkInfo -> Text
sdkName SystemSdkInfo
systemSdkInfo,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"version_major" forall a b. (a -> b) -> a -> b
$ SystemSdkInfo -> Maybe Int
versionMajor SystemSdkInfo
systemSdkInfo,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"version_minor" forall a b. (a -> b) -> a -> b
$ SystemSdkInfo -> Maybe Int
versionMinor SystemSdkInfo
systemSdkInfo,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"version_patchlevel" forall a b. (a -> b) -> a -> b
$ SystemSdkInfo -> Maybe Int
versionPatchlevel SystemSdkInfo
systemSdkInfo
      ]

empty :: SystemSdkInfo
empty :: SystemSdkInfo
empty =
  SystemSdkInfo
    { sdkName :: Text
sdkName = Text
Text.empty,
      versionMajor :: Maybe Int
versionMajor = forall a. Maybe a
Nothing,
      versionMinor :: Maybe Int
versionMinor = forall a. Maybe a
Nothing,
      versionPatchlevel :: Maybe Int
versionPatchlevel = forall a. Maybe a
Nothing
    }