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
(SystemSdkInfo -> SystemSdkInfo -> Bool)
-> (SystemSdkInfo -> SystemSdkInfo -> Bool) -> Eq SystemSdkInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SystemSdkInfo -> SystemSdkInfo -> Bool
== :: SystemSdkInfo -> SystemSdkInfo -> Bool
$c/= :: SystemSdkInfo -> SystemSdkInfo -> Bool
/= :: SystemSdkInfo -> SystemSdkInfo -> Bool
Eq, Int -> SystemSdkInfo -> ShowS
[SystemSdkInfo] -> ShowS
SystemSdkInfo -> String
(Int -> SystemSdkInfo -> ShowS)
-> (SystemSdkInfo -> String)
-> ([SystemSdkInfo] -> ShowS)
-> Show SystemSdkInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SystemSdkInfo -> ShowS
showsPrec :: Int -> SystemSdkInfo -> ShowS
$cshow :: SystemSdkInfo -> String
show :: SystemSdkInfo -> String
$cshowList :: [SystemSdkInfo] -> ShowS
showList :: [SystemSdkInfo] -> ShowS
Show)

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