module Data.SpirV.Reflect.BlockVariable
  ( BlockVariable(..)
  , WordOffset(..)
  ) where

import Data.Text (Text)
import Data.Vector (Vector)
import GHC.Generics (Generic)
import Data.Word (Word32)

import Data.SpirV.Reflect.Enums qualified as Enums
import Data.SpirV.Reflect.Traits qualified as Traits
import Data.SpirV.Reflect.TypeDescription (TypeDescription)

data BlockVariable = BlockVariable
  { BlockVariable -> Maybe Word32
spirv_id         :: Maybe Word32
  , BlockVariable -> Maybe Text
name             :: Maybe Text
  , BlockVariable -> Word32
offset           :: Word32
  , BlockVariable -> Word32
absolute_offset  :: Word32
  , BlockVariable -> Word32
size             :: Word32
  , BlockVariable -> Word32
padded_size      :: Word32
  , BlockVariable -> DecorationFlags
decorations      :: Enums.DecorationFlags
  , BlockVariable -> Numeric
numeric          :: Traits.Numeric
  , BlockVariable -> Array
array            :: Traits.Array
  , BlockVariable -> Vector BlockVariable
members          :: Vector BlockVariable
  , BlockVariable -> Maybe TypeDescription
type_description :: Maybe TypeDescription
  , BlockVariable -> Maybe WordOffset
word_offset      :: Maybe WordOffset
  }
  deriving (BlockVariable -> BlockVariable -> Bool
(BlockVariable -> BlockVariable -> Bool)
-> (BlockVariable -> BlockVariable -> Bool) -> Eq BlockVariable
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: BlockVariable -> BlockVariable -> Bool
== :: BlockVariable -> BlockVariable -> Bool
$c/= :: BlockVariable -> BlockVariable -> Bool
/= :: BlockVariable -> BlockVariable -> Bool
Eq, Int -> BlockVariable -> ShowS
[BlockVariable] -> ShowS
BlockVariable -> String
(Int -> BlockVariable -> ShowS)
-> (BlockVariable -> String)
-> ([BlockVariable] -> ShowS)
-> Show BlockVariable
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> BlockVariable -> ShowS
showsPrec :: Int -> BlockVariable -> ShowS
$cshow :: BlockVariable -> String
show :: BlockVariable -> String
$cshowList :: [BlockVariable] -> ShowS
showList :: [BlockVariable] -> ShowS
Show, (forall x. BlockVariable -> Rep BlockVariable x)
-> (forall x. Rep BlockVariable x -> BlockVariable)
-> Generic BlockVariable
forall x. Rep BlockVariable x -> BlockVariable
forall x. BlockVariable -> Rep BlockVariable x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. BlockVariable -> Rep BlockVariable x
from :: forall x. BlockVariable -> Rep BlockVariable x
$cto :: forall x. Rep BlockVariable x -> BlockVariable
to :: forall x. Rep BlockVariable x -> BlockVariable
Generic)

newtype WordOffset = WordOffset
  { WordOffset -> Word32
offset :: Word32
  }
  deriving (WordOffset -> WordOffset -> Bool
(WordOffset -> WordOffset -> Bool)
-> (WordOffset -> WordOffset -> Bool) -> Eq WordOffset
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: WordOffset -> WordOffset -> Bool
== :: WordOffset -> WordOffset -> Bool
$c/= :: WordOffset -> WordOffset -> Bool
/= :: WordOffset -> WordOffset -> Bool
Eq, Int -> WordOffset -> ShowS
[WordOffset] -> ShowS
WordOffset -> String
(Int -> WordOffset -> ShowS)
-> (WordOffset -> String)
-> ([WordOffset] -> ShowS)
-> Show WordOffset
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> WordOffset -> ShowS
showsPrec :: Int -> WordOffset -> ShowS
$cshow :: WordOffset -> String
show :: WordOffset -> String
$cshowList :: [WordOffset] -> ShowS
showList :: [WordOffset] -> ShowS
Show, (forall x. WordOffset -> Rep WordOffset x)
-> (forall x. Rep WordOffset x -> WordOffset) -> Generic WordOffset
forall x. Rep WordOffset x -> WordOffset
forall x. WordOffset -> Rep WordOffset x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. WordOffset -> Rep WordOffset x
from :: forall x. WordOffset -> Rep WordOffset x
$cto :: forall x. Rep WordOffset x -> WordOffset
to :: forall x. Rep WordOffset x -> WordOffset
Generic)