packages feed

patrol-0.1.0.1: source/library/Patrol/Type/GpuContext.hs

module Patrol.Type.GpuContext 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/#gpucontext>
data GpuContext = GpuContext
  { apiType :: Text.Text,
    graphicsShaderLevel :: Text.Text,
    id :: Aeson.Value,
    maxTextureSize :: Maybe Int,
    memorySize :: Maybe Double,
    multiThreadedRendering :: Maybe Bool,
    name :: Text.Text,
    npotSupport :: Text.Text,
    supportsComputeShaders :: Maybe Bool,
    supportsGeometryShaders :: Maybe Bool,
    supportsRayTracing :: Maybe Bool,
    vendorId :: Text.Text,
    vendorName :: Text.Text,
    version :: Text.Text
  }
  deriving (Eq, Show)

instance Aeson.ToJSON GpuContext where
  toJSON gpuContext =
    Aeson.intoObject
      [ Aeson.pair "api_type" $ apiType gpuContext,
        Aeson.pair "graphics_shader_level" $ graphicsShaderLevel gpuContext,
        Aeson.pair "id" $ Patrol.Type.GpuContext.id gpuContext,
        Aeson.pair "max_texture_size" $ maxTextureSize gpuContext,
        Aeson.pair "memory_size" $ memorySize gpuContext,
        Aeson.pair "multi_threaded_rendering" $ multiThreadedRendering gpuContext,
        Aeson.pair "name" $ name gpuContext,
        Aeson.pair "npot_support" $ npotSupport gpuContext,
        Aeson.pair "supports_compute_shaders" $ supportsComputeShaders gpuContext,
        Aeson.pair "supports_geometry_shaders" $ supportsGeometryShaders gpuContext,
        Aeson.pair "supports_ray_tracing" $ supportsRayTracing gpuContext,
        Aeson.pair "vendor_id" $ vendorId gpuContext,
        Aeson.pair "vendor_name" $ vendorName gpuContext,
        Aeson.pair "version" $ version gpuContext
      ]

empty :: GpuContext
empty =
  GpuContext
    { apiType = Text.empty,
      graphicsShaderLevel = Text.empty,
      Patrol.Type.GpuContext.id = Aeson.Null,
      maxTextureSize = Nothing,
      memorySize = Nothing,
      multiThreadedRendering = Nothing,
      name = Text.empty,
      npotSupport = Text.empty,
      supportsComputeShaders = Nothing,
      supportsGeometryShaders = Nothing,
      supportsRayTracing = Nothing,
      vendorId = Text.empty,
      vendorName = Text.empty,
      version = Text.empty
    }