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

-- | A helpful assertion macro!
--
--     SDL assertions operate like your usual @assert@ macro, but with some added features:
--
--     * It uses a trick with the @sizeof@ operator, so disabled assertions vaporize out of the compiled code, but variables only referenced in the assertion won\'t trigger compiler warnings about being unused.
--
--     * It is safe to use with a dangling-else: @if (x) SDL_assert(y); else do_something();@
--
--     * It works the same everywhere, instead of counting on various platforms\' compiler and C runtime to behave.
--
--     * It provides multiple levels of assertion (SDL_assert, SDL_assert_release, SDL_assert_paranoid) instead of a single all-or-nothing option.
--
--     * It offers a variety of responses when an assertion fails (retry, trigger the debugger, abort the program, ignore the failure once, ignore it for the rest of the program\'s run).
--
--     * It tries to show the user a dialog by default, if possible, but the app can provide a callback to handle assertion failures however they like.
--
--     * It lets failed assertions be retried. Perhaps you had a network failure and just want to retry the test after plugging your network cable back in? You can.
--
--     * It lets the user ignore an assertion failure, if there\'s a harmless problem that one can continue past.
--
--     * It lets the user mark an assertion as ignored for the rest of the program\'s run; if there\'s a harmless problem that keeps popping up.
--
--     * It provides statistics and data on all failed assertions to the app.
--
--     * It allows the default assertion handler to be controlled with environment variables, in case an automated script needs to control it.
--
--     * It can be used as an aid to Clang\'s static analysis; it will treat SDL assertions as universally true (under the assumption that you are serious about the asserted claims and that your debug builds will detect when these claims were wrong). This can help the analyzer avoid false positives.
--
--     To use it: compile a debug build and just sprinkle around tests to check your code!
module SDL3.Sys.Bindgen.Assert (
  SDL3.Sys.Bindgen.Assert.sDL_ASSERT_LEVEL,
  SDL3.Sys.Bindgen.Assert.sDL_NULL_WHILE_LOOP_CONDITION,
  SDL3.Sys.Bindgen.Assert.SDL_AssertState (..),
  pattern SDL3.Sys.Bindgen.Assert.SDL_ASSERTION_RETRY,
  pattern SDL3.Sys.Bindgen.Assert.SDL_ASSERTION_BREAK,
  pattern SDL3.Sys.Bindgen.Assert.SDL_ASSERTION_ABORT,
  pattern SDL3.Sys.Bindgen.Assert.SDL_ASSERTION_IGNORE,
  pattern SDL3.Sys.Bindgen.Assert.SDL_ASSERTION_ALWAYS_IGNORE,
  SDL3.Sys.Bindgen.Assert.SDL_AssertData (..),
  SDL3.Sys.Bindgen.Assert.SDL_AssertionHandler_Aux (..),
  SDL3.Sys.Bindgen.Assert.SDL_AssertionHandler (..),
)
where

import Prelude (Eq, IO, Int, Ord, Read, Show, fmap, pure, (<*>), (>>), type (~))

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

-- | [C declaration]: @macro SDL_ASSERT_LEVEL@, defined at @SDL3\/SDL_assert.h 101:9@
sDL_ASSERT_LEVEL :: BG.CInt
sDL_ASSERT_LEVEL :: CInt
sDL_ASSERT_LEVEL = (CInt
2 :: BG.CInt)

-- | [C declaration]: @macro SDL_NULL_WHILE_LOOP_CONDITION@, defined at @SDL3\/SDL_assert.h 286:9@
sDL_NULL_WHILE_LOOP_CONDITION :: BG.CInt
sDL_NULL_WHILE_LOOP_CONDITION :: CInt
sDL_NULL_WHILE_LOOP_CONDITION = (CInt
0 :: BG.CInt)

-- | Possible outcomes from a triggered assertion.
--
--     When an enabled assertion triggers, it may call the assertion handler (possibly one provided by the app via SDL_SetAssertionHandler), which will return one of these values, possibly after asking the user.
--
--     Then SDL will respond based on this outcome (loop around to retry the condition, try to break in a debugger, kill the program, or ignore the problem).
--
--     @since 3.2.0
--
--     [C declaration]: @enum SDL_AssertState@, defined at @SDL3\/SDL_assert.h 319:14@
newtype SDL_AssertState = SDL_AssertState
  { SDL_AssertState -> CUInt
unwrap :: BG.CUInt
  }
  deriving stock ((forall x. SDL_AssertState -> Rep SDL_AssertState x)
-> (forall x. Rep SDL_AssertState x -> SDL_AssertState)
-> Generic SDL_AssertState
forall x. Rep SDL_AssertState x -> SDL_AssertState
forall x. SDL_AssertState -> Rep SDL_AssertState x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_AssertState -> Rep SDL_AssertState x
from :: forall x. SDL_AssertState -> Rep SDL_AssertState x
$cto :: forall x. Rep SDL_AssertState x -> SDL_AssertState
to :: forall x. Rep SDL_AssertState x -> SDL_AssertState
BG.Generic, SDL_AssertState -> SDL_AssertState -> Bool
(SDL_AssertState -> SDL_AssertState -> Bool)
-> (SDL_AssertState -> SDL_AssertState -> Bool)
-> Eq SDL_AssertState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_AssertState -> SDL_AssertState -> Bool
== :: SDL_AssertState -> SDL_AssertState -> Bool
$c/= :: SDL_AssertState -> SDL_AssertState -> Bool
/= :: SDL_AssertState -> SDL_AssertState -> Bool
Eq, Eq SDL_AssertState
Eq SDL_AssertState =>
(SDL_AssertState -> SDL_AssertState -> Ordering)
-> (SDL_AssertState -> SDL_AssertState -> Bool)
-> (SDL_AssertState -> SDL_AssertState -> Bool)
-> (SDL_AssertState -> SDL_AssertState -> Bool)
-> (SDL_AssertState -> SDL_AssertState -> Bool)
-> (SDL_AssertState -> SDL_AssertState -> SDL_AssertState)
-> (SDL_AssertState -> SDL_AssertState -> SDL_AssertState)
-> Ord SDL_AssertState
SDL_AssertState -> SDL_AssertState -> Bool
SDL_AssertState -> SDL_AssertState -> Ordering
SDL_AssertState -> SDL_AssertState -> SDL_AssertState
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_AssertState -> SDL_AssertState -> Ordering
compare :: SDL_AssertState -> SDL_AssertState -> Ordering
$c< :: SDL_AssertState -> SDL_AssertState -> Bool
< :: SDL_AssertState -> SDL_AssertState -> Bool
$c<= :: SDL_AssertState -> SDL_AssertState -> Bool
<= :: SDL_AssertState -> SDL_AssertState -> Bool
$c> :: SDL_AssertState -> SDL_AssertState -> Bool
> :: SDL_AssertState -> SDL_AssertState -> Bool
$c>= :: SDL_AssertState -> SDL_AssertState -> Bool
>= :: SDL_AssertState -> SDL_AssertState -> Bool
$cmax :: SDL_AssertState -> SDL_AssertState -> SDL_AssertState
max :: SDL_AssertState -> SDL_AssertState -> SDL_AssertState
$cmin :: SDL_AssertState -> SDL_AssertState -> SDL_AssertState
min :: SDL_AssertState -> SDL_AssertState -> SDL_AssertState
Ord)
  deriving newtype (FFIType SDL_AssertState -> SDL_AssertState
SDL_AssertState -> FFIType SDL_AssertState
(SDL_AssertState -> FFIType SDL_AssertState)
-> (FFIType SDL_AssertState -> SDL_AssertState)
-> HasFFIType SDL_AssertState
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_AssertState -> FFIType SDL_AssertState
toFFIType :: SDL_AssertState -> FFIType SDL_AssertState
$cfromFFIType :: FFIType SDL_AssertState -> SDL_AssertState
fromFFIType :: FFIType SDL_AssertState -> SDL_AssertState
BG.HasFFIType)

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

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

instance Marshal.ReadRaw SDL_AssertState where
  readRaw :: Ptr SDL_AssertState -> IO SDL_AssertState
readRaw =
    \Ptr SDL_AssertState
ptr0 ->
      (CUInt -> SDL_AssertState) -> IO (CUInt -> SDL_AssertState)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure CUInt -> SDL_AssertState
SDL_AssertState
        IO (CUInt -> SDL_AssertState) -> IO CUInt -> IO SDL_AssertState
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr SDL_AssertState -> Int -> IO CUInt
forall a b. ReadRaw a => Ptr b -> Int -> IO a
Marshal.readRawByteOff Ptr SDL_AssertState
ptr0 (Int
0 :: Int)

instance Marshal.WriteRaw SDL_AssertState where
  writeRaw :: Ptr SDL_AssertState -> SDL_AssertState -> IO ()
writeRaw =
    \Ptr SDL_AssertState
ptr0 ->
      \SDL_AssertState
s1 ->
        case SDL_AssertState
s1 of
          SDL_AssertState CUInt
unwrap2 ->
            Ptr SDL_AssertState -> Int -> CUInt -> IO ()
forall a b. WriteRaw a => Ptr b -> Int -> a -> IO ()
Marshal.writeRawByteOff Ptr SDL_AssertState
ptr0 (Int
0 :: Int) CUInt
unwrap2

deriving via Marshal.EquivStorable SDL_AssertState instance BG.Storable SDL_AssertState

deriving via BG.CUInt instance BG.Prim SDL_AssertState

instance CEnum.CEnum SDL_AssertState where
  type CEnumZ SDL_AssertState = BG.CUInt

  toCEnum :: CEnumZ SDL_AssertState -> SDL_AssertState
toCEnum = CUInt -> SDL_AssertState
CEnumZ SDL_AssertState -> SDL_AssertState
SDL_AssertState

  fromCEnum :: SDL_AssertState -> CEnumZ SDL_AssertState
fromCEnum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap"

  declaredValues :: forall (proxy :: * -> *).
proxy SDL_AssertState -> DeclaredValues SDL_AssertState
declaredValues =
    \proxy SDL_AssertState
_ ->
      [(CEnumZ SDL_AssertState, NonEmpty String)]
-> DeclaredValues SDL_AssertState
forall a.
Ord (CEnumZ a) =>
[(CEnumZ a, NonEmpty String)] -> DeclaredValues a
CEnum.declaredValuesFromList
        [ (CUInt
CEnumZ SDL_AssertState
0, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_ASSERTION_RETRY")
        , (CUInt
CEnumZ SDL_AssertState
1, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_ASSERTION_BREAK")
        , (CUInt
CEnumZ SDL_AssertState
2, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_ASSERTION_ABORT")
        , (CUInt
CEnumZ SDL_AssertState
3, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_ASSERTION_IGNORE")
        , (CUInt
CEnumZ SDL_AssertState
4, String -> NonEmpty String
forall a. a -> NonEmpty a
BG.singleton String
"SDL_ASSERTION_ALWAYS_IGNORE")
        ]

  showsUndeclared :: forall (proxy :: * -> *).
proxy SDL_AssertState -> Int -> CEnumZ SDL_AssertState -> ShowS
showsUndeclared =
    String
-> proxy SDL_AssertState -> Int -> CEnumZ SDL_AssertState -> ShowS
forall a (proxy :: * -> *).
Show (CEnumZ a) =>
String -> proxy a -> Int -> CEnumZ a -> ShowS
CEnum.showsWrappedUndeclared String
"SDL_AssertState"

  readPrecUndeclared :: ReadPrec SDL_AssertState
readPrecUndeclared =
    String -> ReadPrec SDL_AssertState
forall a. (CEnum a, Read (CEnumZ a)) => String -> ReadPrec a
CEnum.readPrecWrappedUndeclared String
"SDL_AssertState"

  isDeclared :: SDL_AssertState -> Bool
isDeclared = SDL_AssertState -> Bool
forall a. SequentialCEnum a => a -> Bool
CEnum.seqIsDeclared

  mkDeclared :: CEnumZ SDL_AssertState -> Maybe SDL_AssertState
mkDeclared = CEnumZ SDL_AssertState -> Maybe SDL_AssertState
forall a. SequentialCEnum a => CEnumZ a -> Maybe a
CEnum.seqMkDeclared

instance CEnum.SequentialCEnum SDL_AssertState where
  minDeclaredValue :: SDL_AssertState
minDeclaredValue = SDL_AssertState
SDL_ASSERTION_RETRY

  maxDeclaredValue :: SDL_AssertState
maxDeclaredValue = SDL_AssertState
SDL_ASSERTION_ALWAYS_IGNORE

instance Show SDL_AssertState where
  showsPrec :: Int -> SDL_AssertState -> ShowS
showsPrec = Int -> SDL_AssertState -> ShowS
forall a. CEnum a => Int -> a -> ShowS
CEnum.shows

instance Read SDL_AssertState where
  readPrec :: ReadPrec SDL_AssertState
readPrec = ReadPrec SDL_AssertState
forall a. CEnum a => ReadPrec a
CEnum.readPrec

  readList :: ReadS [SDL_AssertState]
readList = ReadS [SDL_AssertState]
forall a. Read a => ReadS [a]
BG.readListDefault

  readListPrec :: ReadPrec [SDL_AssertState]
readListPrec = ReadPrec [SDL_AssertState]
forall a. Read a => ReadPrec [a]
BG.readListPrecDefault

instance
  (ty ~ BG.CUInt)
  => BG.CompatHasField.HasField "unwrap" SDL_AssertState ty
  where
  hasField :: SDL_AssertState -> (ty -> SDL_AssertState, ty)
hasField =
    \SDL_AssertState
x0 ->
      ( \ty
y1 ->
          SDL_AssertState{unwrap :: CUInt
unwrap = ty
CUInt
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_AssertState
x0
      )

instance
  (ty ~ BG.CUInt)
  => BG.HasField "unwrap" (BG.Ptr SDL_AssertState) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertState -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_AssertState -> Ptr (CFieldType SDL_AssertState "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_AssertState "unwrap" where
  type CFieldType SDL_AssertState "unwrap" = BG.CUInt

  offset# :: Proxy# SDL_AssertState -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_AssertState
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | Retry the assert immediately.
--
--     [C declaration]: @SDL_ASSERTION_RETRY@, defined at @SDL3\/SDL_assert.h 321:5@
pattern SDL_ASSERTION_RETRY :: SDL_AssertState
pattern $mSDL_ASSERTION_RETRY :: forall {r}. SDL_AssertState -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_ASSERTION_RETRY :: SDL_AssertState
SDL_ASSERTION_RETRY = SDL_AssertState 0

-- | Make the debugger trigger a breakpoint.
--
--     [C declaration]: @SDL_ASSERTION_BREAK@, defined at @SDL3\/SDL_assert.h 322:5@
pattern SDL_ASSERTION_BREAK :: SDL_AssertState
pattern $mSDL_ASSERTION_BREAK :: forall {r}. SDL_AssertState -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_ASSERTION_BREAK :: SDL_AssertState
SDL_ASSERTION_BREAK = SDL_AssertState 1

-- | Terminate the program.
--
--     [C declaration]: @SDL_ASSERTION_ABORT@, defined at @SDL3\/SDL_assert.h 323:5@
pattern SDL_ASSERTION_ABORT :: SDL_AssertState
pattern $mSDL_ASSERTION_ABORT :: forall {r}. SDL_AssertState -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_ASSERTION_ABORT :: SDL_AssertState
SDL_ASSERTION_ABORT = SDL_AssertState 2

-- | Ignore the assert.
--
--     [C declaration]: @SDL_ASSERTION_IGNORE@, defined at @SDL3\/SDL_assert.h 324:5@
pattern SDL_ASSERTION_IGNORE :: SDL_AssertState
pattern $mSDL_ASSERTION_IGNORE :: forall {r}. SDL_AssertState -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_ASSERTION_IGNORE :: SDL_AssertState
SDL_ASSERTION_IGNORE = SDL_AssertState 3

-- | Ignore the assert from now on.
--
--     [C declaration]: @SDL_ASSERTION_ALWAYS_IGNORE@, defined at @SDL3\/SDL_assert.h 325:5@
pattern SDL_ASSERTION_ALWAYS_IGNORE :: SDL_AssertState
pattern $mSDL_ASSERTION_ALWAYS_IGNORE :: forall {r}. SDL_AssertState -> ((# #) -> r) -> ((# #) -> r) -> r
$bSDL_ASSERTION_ALWAYS_IGNORE :: SDL_AssertState
SDL_ASSERTION_ALWAYS_IGNORE = SDL_AssertState 4

-- | Information about an assertion failure.
--
--     This structure is filled in with information about a triggered assertion, used by the assertion handler, then added to the assertion report. This is returned as a linked list from @SDL_GetAssertionReport()@.
--
--     @since 3.2.0
--
--     [C declaration]: @struct SDL_AssertData@, defined at @SDL3\/SDL_assert.h 337:16@
data SDL_AssertData = SDL_AssertData
  { SDL_AssertData -> CBool
always_ignore :: BG.CBool
  -- ^ true if app should always continue when assertion is triggered.
  --
  --          [C declaration]: @always_ignore@, defined at @SDL3\/SDL_assert.h 339:10@
  , SDL_AssertData -> CUInt
trigger_count :: BG.CUInt
  -- ^ Number of times this assertion has been triggered.
  --
  --          [C declaration]: @trigger_count@, defined at @SDL3\/SDL_assert.h 340:18@
  , SDL_AssertData -> PtrConst CChar
condition :: PtrConst.PtrConst BG.CChar
  -- ^ A string of this assert\'s test code.
  --
  --          [C declaration]: @condition@, defined at @SDL3\/SDL_assert.h 341:17@
  , SDL_AssertData -> PtrConst CChar
filename :: PtrConst.PtrConst BG.CChar
  -- ^ The source file where this assert lives.
  --
  --          [C declaration]: @filename@, defined at @SDL3\/SDL_assert.h 342:17@
  , SDL_AssertData -> CInt
linenum :: BG.CInt
  -- ^ The line in @filename@ where this assert lives.
  --
  --          [C declaration]: @linenum@, defined at @SDL3\/SDL_assert.h 343:9@
  , SDL_AssertData -> PtrConst CChar
function :: PtrConst.PtrConst BG.CChar
  -- ^ The name of the function where this assert lives.
  --
  --          [C declaration]: @function@, defined at @SDL3\/SDL_assert.h 344:17@
  , SDL_AssertData -> PtrConst SDL_AssertData
next :: PtrConst.PtrConst SDL_AssertData
  -- ^ next item in the linked list.
  --
  --          [C declaration]: @next@, defined at @SDL3\/SDL_assert.h 345:34@
  }
  deriving stock ((forall x. SDL_AssertData -> Rep SDL_AssertData x)
-> (forall x. Rep SDL_AssertData x -> SDL_AssertData)
-> Generic SDL_AssertData
forall x. Rep SDL_AssertData x -> SDL_AssertData
forall x. SDL_AssertData -> Rep SDL_AssertData x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_AssertData -> Rep SDL_AssertData x
from :: forall x. SDL_AssertData -> Rep SDL_AssertData x
$cto :: forall x. Rep SDL_AssertData x -> SDL_AssertData
to :: forall x. Rep SDL_AssertData x -> SDL_AssertData
BG.Generic, SDL_AssertData -> SDL_AssertData -> Bool
(SDL_AssertData -> SDL_AssertData -> Bool)
-> (SDL_AssertData -> SDL_AssertData -> Bool) -> Eq SDL_AssertData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_AssertData -> SDL_AssertData -> Bool
== :: SDL_AssertData -> SDL_AssertData -> Bool
$c/= :: SDL_AssertData -> SDL_AssertData -> Bool
/= :: SDL_AssertData -> SDL_AssertData -> Bool
Eq, Int -> SDL_AssertData -> ShowS
[SDL_AssertData] -> ShowS
SDL_AssertData -> String
(Int -> SDL_AssertData -> ShowS)
-> (SDL_AssertData -> String)
-> ([SDL_AssertData] -> ShowS)
-> Show SDL_AssertData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_AssertData -> ShowS
showsPrec :: Int -> SDL_AssertData -> ShowS
$cshow :: SDL_AssertData -> String
show :: SDL_AssertData -> String
$cshowList :: [SDL_AssertData] -> ShowS
showList :: [SDL_AssertData] -> ShowS
Show)

instance Marshal.StaticSize SDL_AssertData where
  staticSizeOf :: Proxy SDL_AssertData -> Int
staticSizeOf = \Proxy SDL_AssertData
_ -> (Int
48 :: Int)

  staticAlignment :: Proxy SDL_AssertData -> Int
staticAlignment = \Proxy SDL_AssertData
_ -> (Int
8 :: Int)

instance Marshal.ReadRaw SDL_AssertData where
  readRaw :: Ptr SDL_AssertData -> IO SDL_AssertData
readRaw =
    \Ptr SDL_AssertData
ptr0 ->
      (CBool
 -> CUInt
 -> PtrConst CChar
 -> PtrConst CChar
 -> CInt
 -> PtrConst CChar
 -> PtrConst SDL_AssertData
 -> SDL_AssertData)
-> IO
     (CBool
      -> CUInt
      -> PtrConst CChar
      -> PtrConst CChar
      -> CInt
      -> PtrConst CChar
      -> PtrConst SDL_AssertData
      -> SDL_AssertData)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure CBool
-> CUInt
-> PtrConst CChar
-> PtrConst CChar
-> CInt
-> PtrConst CChar
-> PtrConst SDL_AssertData
-> SDL_AssertData
SDL_AssertData
        IO
  (CBool
   -> CUInt
   -> PtrConst CChar
   -> PtrConst CChar
   -> CInt
   -> PtrConst CChar
   -> PtrConst SDL_AssertData
   -> SDL_AssertData)
-> IO CBool
-> IO
     (CUInt
      -> PtrConst CChar
      -> PtrConst CChar
      -> CInt
      -> PtrConst CChar
      -> PtrConst SDL_AssertData
      -> SDL_AssertData)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "always_ignore"
-> Ptr SDL_AssertData
-> IO (CFieldType SDL_AssertData "always_ignore")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"always_ignore") Ptr SDL_AssertData
ptr0
        IO
  (CUInt
   -> PtrConst CChar
   -> PtrConst CChar
   -> CInt
   -> PtrConst CChar
   -> PtrConst SDL_AssertData
   -> SDL_AssertData)
-> IO CUInt
-> IO
     (PtrConst CChar
      -> PtrConst CChar
      -> CInt
      -> PtrConst CChar
      -> PtrConst SDL_AssertData
      -> SDL_AssertData)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "trigger_count"
-> Ptr SDL_AssertData
-> IO (CFieldType SDL_AssertData "trigger_count")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"trigger_count") Ptr SDL_AssertData
ptr0
        IO
  (PtrConst CChar
   -> PtrConst CChar
   -> CInt
   -> PtrConst CChar
   -> PtrConst SDL_AssertData
   -> SDL_AssertData)
-> IO (PtrConst CChar)
-> IO
     (PtrConst CChar
      -> CInt
      -> PtrConst CChar
      -> PtrConst SDL_AssertData
      -> SDL_AssertData)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "condition"
-> Ptr SDL_AssertData -> IO (CFieldType SDL_AssertData "condition")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"condition") Ptr SDL_AssertData
ptr0
        IO
  (PtrConst CChar
   -> CInt
   -> PtrConst CChar
   -> PtrConst SDL_AssertData
   -> SDL_AssertData)
-> IO (PtrConst CChar)
-> IO
     (CInt
      -> PtrConst CChar -> PtrConst SDL_AssertData -> SDL_AssertData)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "filename"
-> Ptr SDL_AssertData -> IO (CFieldType SDL_AssertData "filename")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"filename") Ptr SDL_AssertData
ptr0
        IO
  (CInt
   -> PtrConst CChar -> PtrConst SDL_AssertData -> SDL_AssertData)
-> IO CInt
-> IO (PtrConst CChar -> PtrConst SDL_AssertData -> SDL_AssertData)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "linenum"
-> Ptr SDL_AssertData -> IO (CFieldType SDL_AssertData "linenum")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"linenum") Ptr SDL_AssertData
ptr0
        IO (PtrConst CChar -> PtrConst SDL_AssertData -> SDL_AssertData)
-> IO (PtrConst CChar)
-> IO (PtrConst SDL_AssertData -> SDL_AssertData)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "function"
-> Ptr SDL_AssertData -> IO (CFieldType SDL_AssertData "function")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"function") Ptr SDL_AssertData
ptr0
        IO (PtrConst SDL_AssertData -> SDL_AssertData)
-> IO (PtrConst SDL_AssertData) -> IO SDL_AssertData
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Proxy "next"
-> Ptr SDL_AssertData -> IO (CFieldType SDL_AssertData "next")
forall a (field :: Symbol).
(HasCField a field, ReadRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> IO (CFieldType a field)
HasCField.readRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"next") Ptr SDL_AssertData
ptr0

instance Marshal.WriteRaw SDL_AssertData where
  writeRaw :: Ptr SDL_AssertData -> SDL_AssertData -> IO ()
writeRaw =
    \Ptr SDL_AssertData
ptr0 ->
      \SDL_AssertData
s1 ->
        case SDL_AssertData
s1 of
          SDL_AssertData
            CBool
always_ignore2
            CUInt
trigger_count3
            PtrConst CChar
condition4
            PtrConst CChar
filename5
            CInt
linenum6
            PtrConst CChar
function7
            PtrConst SDL_AssertData
next8 ->
              Proxy "always_ignore"
-> Ptr SDL_AssertData
-> CFieldType SDL_AssertData "always_ignore"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"always_ignore") Ptr SDL_AssertData
ptr0 CBool
CFieldType SDL_AssertData "always_ignore"
always_ignore2
                IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "trigger_count"
-> Ptr SDL_AssertData
-> CFieldType SDL_AssertData "trigger_count"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"trigger_count") Ptr SDL_AssertData
ptr0 CUInt
CFieldType SDL_AssertData "trigger_count"
trigger_count3
                IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "condition"
-> Ptr SDL_AssertData
-> CFieldType SDL_AssertData "condition"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"condition") Ptr SDL_AssertData
ptr0 PtrConst CChar
CFieldType SDL_AssertData "condition"
condition4
                IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "filename"
-> Ptr SDL_AssertData
-> CFieldType SDL_AssertData "filename"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"filename") Ptr SDL_AssertData
ptr0 PtrConst CChar
CFieldType SDL_AssertData "filename"
filename5
                IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "linenum"
-> Ptr SDL_AssertData
-> CFieldType SDL_AssertData "linenum"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"linenum") Ptr SDL_AssertData
ptr0 CInt
CFieldType SDL_AssertData "linenum"
linenum6
                IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "function"
-> Ptr SDL_AssertData
-> CFieldType SDL_AssertData "function"
-> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"function") Ptr SDL_AssertData
ptr0 PtrConst CChar
CFieldType SDL_AssertData "function"
function7
                IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Proxy "next"
-> Ptr SDL_AssertData -> CFieldType SDL_AssertData "next" -> IO ()
forall a (field :: Symbol).
(HasCField a field, WriteRaw (CFieldType a field)) =>
Proxy field -> Ptr a -> CFieldType a field -> IO ()
HasCField.writeRaw (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"next") Ptr SDL_AssertData
ptr0 PtrConst SDL_AssertData
CFieldType SDL_AssertData "next"
next8

deriving via Marshal.EquivStorable SDL_AssertData instance BG.Storable SDL_AssertData

deriving via Struct.IsStructViaReadRaw SDL_AssertData instance Struct.IsStruct SDL_AssertData

-- | true if app should always continue when assertion is triggered.
--
--     [C declaration]: @always_ignore@, defined at @SDL3\/SDL_assert.h 339:10@
instance
  (ty ~ BG.CBool)
  => BG.CompatHasField.HasField "always_ignore" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { always_ignore :: CBool
always_ignore = ty
CBool
y1
            , trigger_count :: CUInt
trigger_count = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
            , condition :: PtrConst CChar
condition = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
            , filename :: PtrConst CChar
filename = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
            , linenum :: CInt
linenum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
            , function :: PtrConst CChar
function = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
            , next :: PtrConst SDL_AssertData
next = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
      )

instance
  (ty ~ BG.CBool)
  => BG.HasField "always_ignore" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField =
    Proxy "always_ignore"
-> Ptr SDL_AssertData
-> Ptr (CFieldType SDL_AssertData "always_ignore")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"always_ignore")

instance HasCField.HasCField SDL_AssertData "always_ignore" where
  type
    CFieldType SDL_AssertData "always_ignore" =
      BG.CBool

  offset# :: Proxy# SDL_AssertData -> Proxy# "always_ignore" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "always_ignore"
_ -> Int
0

-- | Number of times this assertion has been triggered.
--
--     [C declaration]: @trigger_count@, defined at @SDL3\/SDL_assert.h 340:18@
instance
  (ty ~ BG.CUInt)
  => BG.CompatHasField.HasField "trigger_count" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { trigger_count :: CUInt
trigger_count = ty
CUInt
y1
            , always_ignore :: CBool
always_ignore = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
            , condition :: PtrConst CChar
condition = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
            , filename :: PtrConst CChar
filename = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
            , linenum :: CInt
linenum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
            , function :: PtrConst CChar
function = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
            , next :: PtrConst SDL_AssertData
next = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
      )

instance
  (ty ~ BG.CUInt)
  => BG.HasField "trigger_count" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField =
    Proxy "trigger_count"
-> Ptr SDL_AssertData
-> Ptr (CFieldType SDL_AssertData "trigger_count")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"trigger_count")

instance HasCField.HasCField SDL_AssertData "trigger_count" where
  type
    CFieldType SDL_AssertData "trigger_count" =
      BG.CUInt

  offset# :: Proxy# SDL_AssertData -> Proxy# "trigger_count" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "trigger_count"
_ -> Int
4

-- | A string of this assert\'s test code.
--
--     [C declaration]: @condition@, defined at @SDL3\/SDL_assert.h 341:17@
instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.CompatHasField.HasField "condition" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { condition :: PtrConst CChar
condition = ty
PtrConst CChar
y1
            , always_ignore :: CBool
always_ignore = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
            , trigger_count :: CUInt
trigger_count = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
            , filename :: PtrConst CChar
filename = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
            , linenum :: CInt
linenum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
            , function :: PtrConst CChar
function = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
            , next :: PtrConst SDL_AssertData
next = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
      )

instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.HasField "condition" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField = Proxy "condition"
-> Ptr SDL_AssertData
-> Ptr (CFieldType SDL_AssertData "condition")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"condition")

instance HasCField.HasCField SDL_AssertData "condition" where
  type
    CFieldType SDL_AssertData "condition" =
      PtrConst.PtrConst BG.CChar

  offset# :: Proxy# SDL_AssertData -> Proxy# "condition" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "condition"
_ -> Int
8

-- | The source file where this assert lives.
--
--     [C declaration]: @filename@, defined at @SDL3\/SDL_assert.h 342:17@
instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.CompatHasField.HasField "filename" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { filename :: PtrConst CChar
filename = ty
PtrConst CChar
y1
            , always_ignore :: CBool
always_ignore = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
            , trigger_count :: CUInt
trigger_count = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
            , condition :: PtrConst CChar
condition = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
            , linenum :: CInt
linenum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
            , function :: PtrConst CChar
function = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
            , next :: PtrConst SDL_AssertData
next = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
      )

instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.HasField "filename" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField = Proxy "filename"
-> Ptr SDL_AssertData -> Ptr (CFieldType SDL_AssertData "filename")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"filename")

instance HasCField.HasCField SDL_AssertData "filename" where
  type
    CFieldType SDL_AssertData "filename" =
      PtrConst.PtrConst BG.CChar

  offset# :: Proxy# SDL_AssertData -> Proxy# "filename" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "filename"
_ -> Int
16

-- | The line in @filename@ where this assert lives.
--
--     [C declaration]: @linenum@, defined at @SDL3\/SDL_assert.h 343:9@
instance
  (ty ~ BG.CInt)
  => BG.CompatHasField.HasField "linenum" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { linenum :: CInt
linenum = ty
CInt
y1
            , always_ignore :: CBool
always_ignore = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
            , trigger_count :: CUInt
trigger_count = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
            , condition :: PtrConst CChar
condition = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
            , filename :: PtrConst CChar
filename = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
            , function :: PtrConst CChar
function = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
            , next :: PtrConst SDL_AssertData
next = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
      )

instance
  (ty ~ BG.CInt)
  => BG.HasField "linenum" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField = Proxy "linenum"
-> Ptr SDL_AssertData -> Ptr (CFieldType SDL_AssertData "linenum")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"linenum")

instance HasCField.HasCField SDL_AssertData "linenum" where
  type CFieldType SDL_AssertData "linenum" = BG.CInt

  offset# :: Proxy# SDL_AssertData -> Proxy# "linenum" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "linenum"
_ -> Int
24

-- | The name of the function where this assert lives.
--
--     [C declaration]: @function@, defined at @SDL3\/SDL_assert.h 344:17@
instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.CompatHasField.HasField "function" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { function :: PtrConst CChar
function = ty
PtrConst CChar
y1
            , always_ignore :: CBool
always_ignore = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
            , trigger_count :: CUInt
trigger_count = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
            , condition :: PtrConst CChar
condition = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
            , filename :: PtrConst CChar
filename = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
            , linenum :: CInt
linenum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
            , next :: PtrConst SDL_AssertData
next = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
      )

instance
  (ty ~ PtrConst.PtrConst BG.CChar)
  => BG.HasField "function" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField = Proxy "function"
-> Ptr SDL_AssertData -> Ptr (CFieldType SDL_AssertData "function")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"function")

instance HasCField.HasCField SDL_AssertData "function" where
  type
    CFieldType SDL_AssertData "function" =
      PtrConst.PtrConst BG.CChar

  offset# :: Proxy# SDL_AssertData -> Proxy# "function" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "function"
_ -> Int
32

-- | next item in the linked list.
--
--     [C declaration]: @next@, defined at @SDL3\/SDL_assert.h 345:34@
instance
  (ty ~ PtrConst.PtrConst SDL_AssertData)
  => BG.CompatHasField.HasField "next" SDL_AssertData ty
  where
  hasField :: SDL_AssertData -> (ty -> SDL_AssertData, ty)
hasField =
    \SDL_AssertData
x0 ->
      ( \ty
y1 ->
          SDL_AssertData
            { next :: PtrConst SDL_AssertData
next = ty
PtrConst SDL_AssertData
y1
            , always_ignore :: CBool
always_ignore = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"always_ignore" SDL_AssertData
x0
            , trigger_count :: CUInt
trigger_count = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"trigger_count" SDL_AssertData
x0
            , condition :: PtrConst CChar
condition = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"condition" SDL_AssertData
x0
            , filename :: PtrConst CChar
filename = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"filename" SDL_AssertData
x0
            , linenum :: CInt
linenum = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"linenum" SDL_AssertData
x0
            , function :: PtrConst CChar
function = forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"function" SDL_AssertData
x0
            }
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"next" SDL_AssertData
x0
      )

instance
  (ty ~ PtrConst.PtrConst SDL_AssertData)
  => BG.HasField "next" (BG.Ptr SDL_AssertData) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertData -> Ptr ty
getField = Proxy "next"
-> Ptr SDL_AssertData -> Ptr (CFieldType SDL_AssertData "next")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"next")

instance HasCField.HasCField SDL_AssertData "next" where
  type
    CFieldType SDL_AssertData "next" =
      PtrConst.PtrConst SDL_AssertData

  offset# :: Proxy# SDL_AssertData -> Proxy# "next" -> Int
offset# = \Proxy# SDL_AssertData
_ -> \Proxy# "next"
_ -> Int
40

-- | Auxiliary type used by 'SDL_AssertionHandler'
--
--     [C declaration]: @SDL_AssertionHandler@, defined at @SDL3\/SDL_assert.h 578:35@
newtype SDL_AssertionHandler_Aux = SDL_AssertionHandler_Aux
  { SDL_AssertionHandler_Aux
-> PtrConst SDL_AssertData -> Ptr Void -> IO SDL_AssertState
unwrap :: PtrConst.PtrConst SDL_AssertData -> BG.Ptr BG.Void -> IO SDL_AssertState
  }
  deriving stock ((forall x.
 SDL_AssertionHandler_Aux -> Rep SDL_AssertionHandler_Aux x)
-> (forall x.
    Rep SDL_AssertionHandler_Aux x -> SDL_AssertionHandler_Aux)
-> Generic SDL_AssertionHandler_Aux
forall x.
Rep SDL_AssertionHandler_Aux x -> SDL_AssertionHandler_Aux
forall x.
SDL_AssertionHandler_Aux -> Rep SDL_AssertionHandler_Aux x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x.
SDL_AssertionHandler_Aux -> Rep SDL_AssertionHandler_Aux x
from :: forall x.
SDL_AssertionHandler_Aux -> Rep SDL_AssertionHandler_Aux x
$cto :: forall x.
Rep SDL_AssertionHandler_Aux x -> SDL_AssertionHandler_Aux
to :: forall x.
Rep SDL_AssertionHandler_Aux x -> SDL_AssertionHandler_Aux
BG.Generic)

-- __unique:__ @toSDL_AssertionHandler_Aux@
foreign import ccall safe "wrapper"
  hs_bindgen_4cf4facc2fb068b6_base
    :: (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
    -> IO (BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt))

-- __unique:__ @toSDL_AssertionHandler_Aux@
hs_bindgen_4cf4facc2fb068b6
  :: SDL_AssertionHandler_Aux
  -> IO (BG.FunPtr SDL_AssertionHandler_Aux)
hs_bindgen_4cf4facc2fb068b6 :: SDL_AssertionHandler_Aux -> IO (FunPtr SDL_AssertionHandler_Aux)
hs_bindgen_4cf4facc2fb068b6 =
  \SDL_AssertionHandler_Aux
fun0 ->
    (FunPtr (Ptr Void -> Ptr Void -> IO CUInt)
 -> FunPtr SDL_AssertionHandler_Aux)
-> IO (FunPtr (Ptr Void -> Ptr Void -> IO CUInt))
-> IO (FunPtr SDL_AssertionHandler_Aux)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
      FunPtr (Ptr Void -> Ptr Void -> IO CUInt)
-> FunPtr SDL_AssertionHandler_Aux
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr
      ( (Ptr Void -> Ptr Void -> IO CUInt)
-> IO (FunPtr (Ptr Void -> Ptr Void -> IO CUInt))
hs_bindgen_4cf4facc2fb068b6_base
          ( \Ptr Void
x1 ->
              \Ptr Void
x2 ->
                (SDL_AssertState -> CUInt) -> IO SDL_AssertState -> IO CUInt
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap SDL_AssertState -> CUInt
SDL_AssertState -> FFIType SDL_AssertState
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType (forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_AssertionHandler_Aux
fun0 (FFIType (PtrConst SDL_AssertData) -> PtrConst SDL_AssertData
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Ptr Void
FFIType (PtrConst SDL_AssertData)
x1) (FFIType (Ptr Void) -> Ptr Void
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType Ptr Void
FFIType (Ptr Void)
x2))
          )
      )

-- __unique:__ @fromSDL_AssertionHandler_Aux@
foreign import ccall safe "dynamic"
  hs_bindgen_a1f4d13109856a1b_base
    :: BG.FunPtr (BG.Ptr BG.Void -> BG.Ptr BG.Void -> IO BG.CUInt)
    -> BG.Ptr BG.Void
    -> BG.Ptr BG.Void
    -> IO BG.CUInt

-- __unique:__ @fromSDL_AssertionHandler_Aux@
hs_bindgen_a1f4d13109856a1b
  :: BG.FunPtr SDL_AssertionHandler_Aux
  -> SDL_AssertionHandler_Aux
hs_bindgen_a1f4d13109856a1b :: FunPtr SDL_AssertionHandler_Aux -> SDL_AssertionHandler_Aux
hs_bindgen_a1f4d13109856a1b =
  \FunPtr SDL_AssertionHandler_Aux
funPtr0 ->
    (PtrConst SDL_AssertData -> Ptr Void -> IO SDL_AssertState)
-> SDL_AssertionHandler_Aux
SDL_AssertionHandler_Aux
      ( \PtrConst SDL_AssertData
x1 ->
          \Ptr Void
x2 ->
            (CUInt -> SDL_AssertState) -> IO CUInt -> IO SDL_AssertState
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
              CUInt -> SDL_AssertState
FFIType SDL_AssertState -> SDL_AssertState
forall a. HasFFIType a => FFIType a -> a
BG.fromFFIType
              (FunPtr (Ptr Void -> Ptr Void -> IO CUInt)
-> Ptr Void -> Ptr Void -> IO CUInt
hs_bindgen_a1f4d13109856a1b_base (FunPtr SDL_AssertionHandler_Aux
-> FunPtr (Ptr Void -> Ptr Void -> IO CUInt)
forall a b. FunPtr a -> FunPtr b
BG.castFunPtr FunPtr SDL_AssertionHandler_Aux
funPtr0) (PtrConst SDL_AssertData -> FFIType (PtrConst SDL_AssertData)
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType PtrConst SDL_AssertData
x1) (Ptr Void -> FFIType (Ptr Void)
forall a. HasFFIType a => a -> FFIType a
BG.toFFIType Ptr Void
x2))
      )

instance BG.ToFunPtr SDL_AssertionHandler_Aux where
  toFunPtr :: SDL_AssertionHandler_Aux -> IO (FunPtr SDL_AssertionHandler_Aux)
toFunPtr = SDL_AssertionHandler_Aux -> IO (FunPtr SDL_AssertionHandler_Aux)
hs_bindgen_4cf4facc2fb068b6

instance BG.FromFunPtr SDL_AssertionHandler_Aux where
  fromFunPtr :: FunPtr SDL_AssertionHandler_Aux -> SDL_AssertionHandler_Aux
fromFunPtr = FunPtr SDL_AssertionHandler_Aux -> SDL_AssertionHandler_Aux
hs_bindgen_a1f4d13109856a1b

instance
  (ty ~ (PtrConst.PtrConst SDL_AssertData -> BG.Ptr BG.Void -> IO SDL_AssertState))
  => BG.CompatHasField.HasField "unwrap" SDL_AssertionHandler_Aux ty
  where
  hasField :: SDL_AssertionHandler_Aux -> (ty -> SDL_AssertionHandler_Aux, ty)
hasField =
    \SDL_AssertionHandler_Aux
x0 ->
      ( \ty
y1 ->
          SDL_AssertionHandler_Aux{unwrap :: PtrConst SDL_AssertData -> Ptr Void -> IO SDL_AssertState
unwrap = ty
PtrConst SDL_AssertData -> Ptr Void -> IO SDL_AssertState
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_AssertionHandler_Aux
x0
      )

instance
  (ty ~ (PtrConst.PtrConst SDL_AssertData -> BG.Ptr BG.Void -> IO SDL_AssertState))
  => BG.HasField "unwrap" (BG.Ptr SDL_AssertionHandler_Aux) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertionHandler_Aux -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_AssertionHandler_Aux
-> Ptr (CFieldType SDL_AssertionHandler_Aux "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_AssertionHandler_Aux "unwrap" where
  type
    CFieldType SDL_AssertionHandler_Aux "unwrap" =
      PtrConst.PtrConst SDL_AssertData -> BG.Ptr BG.Void -> IO SDL_AssertState

  offset# :: Proxy# SDL_AssertionHandler_Aux -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_AssertionHandler_Aux
_ -> \Proxy# "unwrap"
_ -> Int
0

-- | A callback that fires when an SDL assertion fails.
--
--     [@data@]: a pointer to the 'SDL_AssertData' structure corresponding to the current assertion.
--
--     [@userdata@]: what was passed as @userdata@ to @SDL_SetAssertionHandler()@.
--
--     [Returns]: an 'SDL_AssertState' value indicating how to handle the failure.
--
--     [Thread safety]: This callback may be called from any thread that triggers an assert at any time.
--
--     @since 3.2.0
--
--     [C declaration]: @SDL_AssertionHandler@, defined at @SDL3\/SDL_assert.h 578:35@
newtype SDL_AssertionHandler = SDL_AssertionHandler
  { SDL_AssertionHandler -> FunPtr SDL_AssertionHandler_Aux
unwrap :: BG.FunPtr SDL_AssertionHandler_Aux
  }
  deriving stock ((forall x. SDL_AssertionHandler -> Rep SDL_AssertionHandler x)
-> (forall x. Rep SDL_AssertionHandler x -> SDL_AssertionHandler)
-> Generic SDL_AssertionHandler
forall x. Rep SDL_AssertionHandler x -> SDL_AssertionHandler
forall x. SDL_AssertionHandler -> Rep SDL_AssertionHandler x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SDL_AssertionHandler -> Rep SDL_AssertionHandler x
from :: forall x. SDL_AssertionHandler -> Rep SDL_AssertionHandler x
$cto :: forall x. Rep SDL_AssertionHandler x -> SDL_AssertionHandler
to :: forall x. Rep SDL_AssertionHandler x -> SDL_AssertionHandler
BG.Generic, SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
(SDL_AssertionHandler -> SDL_AssertionHandler -> Bool)
-> (SDL_AssertionHandler -> SDL_AssertionHandler -> Bool)
-> Eq SDL_AssertionHandler
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
== :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
$c/= :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
/= :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
Eq, Eq SDL_AssertionHandler
Eq SDL_AssertionHandler =>
(SDL_AssertionHandler -> SDL_AssertionHandler -> Ordering)
-> (SDL_AssertionHandler -> SDL_AssertionHandler -> Bool)
-> (SDL_AssertionHandler -> SDL_AssertionHandler -> Bool)
-> (SDL_AssertionHandler -> SDL_AssertionHandler -> Bool)
-> (SDL_AssertionHandler -> SDL_AssertionHandler -> Bool)
-> (SDL_AssertionHandler
    -> SDL_AssertionHandler -> SDL_AssertionHandler)
-> (SDL_AssertionHandler
    -> SDL_AssertionHandler -> SDL_AssertionHandler)
-> Ord SDL_AssertionHandler
SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
SDL_AssertionHandler -> SDL_AssertionHandler -> Ordering
SDL_AssertionHandler
-> SDL_AssertionHandler -> SDL_AssertionHandler
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: SDL_AssertionHandler -> SDL_AssertionHandler -> Ordering
compare :: SDL_AssertionHandler -> SDL_AssertionHandler -> Ordering
$c< :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
< :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
$c<= :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
<= :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
$c> :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
> :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
$c>= :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
>= :: SDL_AssertionHandler -> SDL_AssertionHandler -> Bool
$cmax :: SDL_AssertionHandler
-> SDL_AssertionHandler -> SDL_AssertionHandler
max :: SDL_AssertionHandler
-> SDL_AssertionHandler -> SDL_AssertionHandler
$cmin :: SDL_AssertionHandler
-> SDL_AssertionHandler -> SDL_AssertionHandler
min :: SDL_AssertionHandler
-> SDL_AssertionHandler -> SDL_AssertionHandler
Ord, Int -> SDL_AssertionHandler -> ShowS
[SDL_AssertionHandler] -> ShowS
SDL_AssertionHandler -> String
(Int -> SDL_AssertionHandler -> ShowS)
-> (SDL_AssertionHandler -> String)
-> ([SDL_AssertionHandler] -> ShowS)
-> Show SDL_AssertionHandler
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SDL_AssertionHandler -> ShowS
showsPrec :: Int -> SDL_AssertionHandler -> ShowS
$cshow :: SDL_AssertionHandler -> String
show :: SDL_AssertionHandler -> String
$cshowList :: [SDL_AssertionHandler] -> ShowS
showList :: [SDL_AssertionHandler] -> ShowS
Show)
  deriving newtype
    ( FFIType SDL_AssertionHandler -> SDL_AssertionHandler
SDL_AssertionHandler -> FFIType SDL_AssertionHandler
(SDL_AssertionHandler -> FFIType SDL_AssertionHandler)
-> (FFIType SDL_AssertionHandler -> SDL_AssertionHandler)
-> HasFFIType SDL_AssertionHandler
forall a. (a -> FFIType a) -> (FFIType a -> a) -> HasFFIType a
$ctoFFIType :: SDL_AssertionHandler -> FFIType SDL_AssertionHandler
toFFIType :: SDL_AssertionHandler -> FFIType SDL_AssertionHandler
$cfromFFIType :: FFIType SDL_AssertionHandler -> SDL_AssertionHandler
fromFFIType :: FFIType SDL_AssertionHandler -> SDL_AssertionHandler
BG.HasFFIType
    , Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler
Ptr SDL_AssertionHandler -> Int -> IO SDL_AssertionHandler
Ptr SDL_AssertionHandler -> Int -> SDL_AssertionHandler -> IO ()
Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ()
SDL_AssertionHandler -> Int
(SDL_AssertionHandler -> Int)
-> (SDL_AssertionHandler -> Int)
-> (Ptr SDL_AssertionHandler -> Int -> IO SDL_AssertionHandler)
-> (Ptr SDL_AssertionHandler
    -> Int -> SDL_AssertionHandler -> IO ())
-> (forall b. Ptr b -> Int -> IO SDL_AssertionHandler)
-> (forall b. Ptr b -> Int -> SDL_AssertionHandler -> IO ())
-> (Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler)
-> (Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ())
-> Storable SDL_AssertionHandler
forall b. Ptr b -> Int -> IO SDL_AssertionHandler
forall b. Ptr b -> Int -> SDL_AssertionHandler -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
$csizeOf :: SDL_AssertionHandler -> Int
sizeOf :: SDL_AssertionHandler -> Int
$calignment :: SDL_AssertionHandler -> Int
alignment :: SDL_AssertionHandler -> Int
$cpeekElemOff :: Ptr SDL_AssertionHandler -> Int -> IO SDL_AssertionHandler
peekElemOff :: Ptr SDL_AssertionHandler -> Int -> IO SDL_AssertionHandler
$cpokeElemOff :: Ptr SDL_AssertionHandler -> Int -> SDL_AssertionHandler -> IO ()
pokeElemOff :: Ptr SDL_AssertionHandler -> Int -> SDL_AssertionHandler -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SDL_AssertionHandler
peekByteOff :: forall b. Ptr b -> Int -> IO SDL_AssertionHandler
$cpokeByteOff :: forall b. Ptr b -> Int -> SDL_AssertionHandler -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> SDL_AssertionHandler -> IO ()
$cpeek :: Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler
peek :: Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler
$cpoke :: Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ()
poke :: Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ()
BG.Storable
    , Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler
(Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler)
-> ReadRaw SDL_AssertionHandler
forall a. (Ptr a -> IO a) -> ReadRaw a
$creadRaw :: Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler
readRaw :: Ptr SDL_AssertionHandler -> IO SDL_AssertionHandler
Marshal.ReadRaw
    , Proxy SDL_AssertionHandler -> Int
(Proxy SDL_AssertionHandler -> Int)
-> (Proxy SDL_AssertionHandler -> Int)
-> StaticSize SDL_AssertionHandler
forall a. (Proxy a -> Int) -> (Proxy a -> Int) -> StaticSize a
$cstaticSizeOf :: Proxy SDL_AssertionHandler -> Int
staticSizeOf :: Proxy SDL_AssertionHandler -> Int
$cstaticAlignment :: Proxy SDL_AssertionHandler -> Int
staticAlignment :: Proxy SDL_AssertionHandler -> Int
Marshal.StaticSize
    , Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ()
(Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ())
-> WriteRaw SDL_AssertionHandler
forall a. (Ptr a -> a -> IO ()) -> WriteRaw a
$cwriteRaw :: Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ()
writeRaw :: Ptr SDL_AssertionHandler -> SDL_AssertionHandler -> IO ()
Marshal.WriteRaw
    )

instance
  (ty ~ BG.FunPtr SDL_AssertionHandler_Aux)
  => BG.CompatHasField.HasField "unwrap" SDL_AssertionHandler ty
  where
  hasField :: SDL_AssertionHandler -> (ty -> SDL_AssertionHandler, ty)
hasField =
    \SDL_AssertionHandler
x0 ->
      ( \ty
y1 ->
          SDL_AssertionHandler{unwrap :: FunPtr SDL_AssertionHandler_Aux
unwrap = ty
FunPtr SDL_AssertionHandler_Aux
y1}
      , forall {k} (x :: k) r a. HasField x r a => r -> a
forall (x :: Symbol) r a. HasField x r a => r -> a
BG.getField @"unwrap" SDL_AssertionHandler
x0
      )

instance
  (ty ~ BG.FunPtr SDL_AssertionHandler_Aux)
  => BG.HasField "unwrap" (BG.Ptr SDL_AssertionHandler) (BG.Ptr ty)
  where
  getField :: Ptr SDL_AssertionHandler -> Ptr ty
getField = Proxy "unwrap"
-> Ptr SDL_AssertionHandler
-> Ptr (CFieldType SDL_AssertionHandler "unwrap")
forall a (field :: Symbol).
HasCField a field =>
Proxy field -> Ptr a -> Ptr (CFieldType a field)
HasCField.fromPtr (forall {k} (t :: k). Proxy t
forall (t :: Symbol). Proxy t
BG.Proxy @"unwrap")

instance HasCField.HasCField SDL_AssertionHandler "unwrap" where
  type
    CFieldType SDL_AssertionHandler "unwrap" =
      BG.FunPtr SDL_AssertionHandler_Aux

  offset# :: Proxy# SDL_AssertionHandler -> Proxy# "unwrap" -> Int
offset# = \Proxy# SDL_AssertionHandler
_ -> \Proxy# "unwrap"
_ -> Int
0