packages feed

sdl3-bindgen-sys-0.0.0.1: src/SDL3/Sys/Bindgen/Power.hs

{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}

-- | SDL power management routines.
--
--     There is a single function in this category: @SDL_GetPowerInfo()@.
--
--     This function is useful for games on the go. This allows an app to know if it\'s running on a draining battery, which can be useful if the app wants to reduce processing, or perhaps framerate, to extend the duration of the battery\'s charge. Perhaps the app just wants to show a battery meter when fullscreen, or alert the user when the power is getting extremely low, so they can save their game. The basic state for the system\'s power supply.
--
--     These are results returned by @SDL_GetPowerInfo()@.
--
--     @since 3.2.0
module SDL3.Sys.Bindgen.Power (
  SDL3.Sys.Bindgen.Power.SDL_PowerState (..),
  pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_ERROR,
  pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_UNKNOWN,
  pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_ON_BATTERY,
  pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_NO_BATTERY,
  pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_CHARGING,
  pattern SDL3.Sys.Bindgen.Power.SDL_POWERSTATE_CHARGED,
)
where

import HsBindgen.Runtime.CEnum qualified as CEnum
import HsBindgen.Runtime.HasCField qualified as HasCField
import HsBindgen.Runtime.Marshal qualified as Marshal
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField

-- | [C declaration]: @enum SDL_PowerState@, defined at @SDL3\/SDL_power.h 56:14@
newtype SDL_PowerState = SDL_PowerState
  { unwrap :: BG.CInt
  }
  deriving stock (BG.Generic, Eq, Ord)
  deriving newtype (BG.HasFFIType)

instance Marshal.StaticSize SDL_PowerState where
  staticSizeOf = \_ -> (4 :: Int)

  staticAlignment = \_ -> (4 :: Int)

instance Marshal.ReadRaw SDL_PowerState where
  readRaw =
    \ptr0 ->
      pure SDL_PowerState
        <*> Marshal.readRawByteOff ptr0 (0 :: Int)

instance Marshal.WriteRaw SDL_PowerState where
  writeRaw =
    \ptr0 ->
      \s1 ->
        case s1 of
          SDL_PowerState unwrap2 ->
            Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2

deriving via Marshal.EquivStorable SDL_PowerState instance BG.Storable SDL_PowerState

deriving via BG.CInt instance BG.Prim SDL_PowerState

instance CEnum.CEnum SDL_PowerState where
  type CEnumZ SDL_PowerState = BG.CInt

  toCEnum = SDL_PowerState

  fromCEnum = BG.getField @"unwrap"

  declaredValues =
    \_ ->
      CEnum.declaredValuesFromList
        [ (-1, BG.singleton "SDL_POWERSTATE_ERROR")
        , (0, BG.singleton "SDL_POWERSTATE_UNKNOWN")
        , (1, BG.singleton "SDL_POWERSTATE_ON_BATTERY")
        , (2, BG.singleton "SDL_POWERSTATE_NO_BATTERY")
        , (3, BG.singleton "SDL_POWERSTATE_CHARGING")
        , (4, BG.singleton "SDL_POWERSTATE_CHARGED")
        ]

  showsUndeclared =
    CEnum.showsWrappedUndeclared "SDL_PowerState"

  readPrecUndeclared =
    CEnum.readPrecWrappedUndeclared "SDL_PowerState"

  isDeclared = CEnum.seqIsDeclared

  mkDeclared = CEnum.seqMkDeclared

instance CEnum.SequentialCEnum SDL_PowerState where
  minDeclaredValue = SDL_POWERSTATE_ERROR

  maxDeclaredValue = SDL_POWERSTATE_CHARGED

instance Show SDL_PowerState where
  showsPrec = CEnum.shows

instance Read SDL_PowerState where
  readPrec = CEnum.readPrec

  readList = BG.readListDefault

  readListPrec = BG.readListPrecDefault

instance
  (ty ~ BG.CInt)
  => BG.CompatHasField.HasField "unwrap" SDL_PowerState ty
  where
  hasField =
    \x0 ->
      ( \y1 ->
          SDL_PowerState{unwrap = y1}
      , BG.getField @"unwrap" x0
      )

instance
  (ty ~ BG.CInt)
  => BG.HasField "unwrap" (BG.Ptr SDL_PowerState) (BG.Ptr ty)
  where
  getField = HasCField.fromPtr (BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_PowerState "unwrap" where
  type CFieldType SDL_PowerState "unwrap" = BG.CInt

  offset# = \_ -> \_ -> 0

-- | error determining power status
--
--     [C declaration]: @SDL_POWERSTATE_ERROR@, defined at @SDL3\/SDL_power.h 58:5@
pattern SDL_POWERSTATE_ERROR :: SDL_PowerState
pattern SDL_POWERSTATE_ERROR = SDL_PowerState (-1)

-- | cannot determine power status
--
--     [C declaration]: @SDL_POWERSTATE_UNKNOWN@, defined at @SDL3\/SDL_power.h 59:5@
pattern SDL_POWERSTATE_UNKNOWN :: SDL_PowerState
pattern SDL_POWERSTATE_UNKNOWN = SDL_PowerState 0

-- | Not plugged in, running on the battery
--
--     [C declaration]: @SDL_POWERSTATE_ON_BATTERY@, defined at @SDL3\/SDL_power.h 60:5@
pattern SDL_POWERSTATE_ON_BATTERY :: SDL_PowerState
pattern SDL_POWERSTATE_ON_BATTERY = SDL_PowerState 1

-- | Plugged in, no battery available
--
--     [C declaration]: @SDL_POWERSTATE_NO_BATTERY@, defined at @SDL3\/SDL_power.h 61:5@
pattern SDL_POWERSTATE_NO_BATTERY :: SDL_PowerState
pattern SDL_POWERSTATE_NO_BATTERY = SDL_PowerState 2

-- | Plugged in, charging battery
--
--     [C declaration]: @SDL_POWERSTATE_CHARGING@, defined at @SDL3\/SDL_power.h 62:5@
pattern SDL_POWERSTATE_CHARGING :: SDL_PowerState
pattern SDL_POWERSTATE_CHARGING = SDL_PowerState 3

-- | Plugged in, battery charged
--
--     [C declaration]: @SDL_POWERSTATE_CHARGED@, defined at @SDL3\/SDL_power.h 63:5@
pattern SDL_POWERSTATE_CHARGED :: SDL_PowerState
pattern SDL_POWERSTATE_CHARGED = SDL_PowerState 4