module Data.SpirV.Reflect.TypeDescription 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

data TypeDescription = TypeDescription
  { TypeDescription -> Maybe Word32
id                 :: Maybe Word32
  , TypeDescription -> Maybe Op
op                 :: Maybe Enums.Op
  , TypeDescription -> Maybe Text
type_name          :: Maybe Text
  , TypeDescription -> Maybe Text
struct_member_name :: Maybe Text
  , TypeDescription -> StorageClass
storage_class      :: Enums.StorageClass
  , TypeDescription -> TypeFlags
type_flags         :: Enums.TypeFlags
  , TypeDescription -> Maybe Traits
traits             :: Maybe Traits
  , TypeDescription -> Vector TypeDescription
members            :: Vector TypeDescription
  }
  deriving (TypeDescription -> TypeDescription -> Bool
(TypeDescription -> TypeDescription -> Bool)
-> (TypeDescription -> TypeDescription -> Bool)
-> Eq TypeDescription
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TypeDescription -> TypeDescription -> Bool
$c/= :: TypeDescription -> TypeDescription -> Bool
== :: TypeDescription -> TypeDescription -> Bool
$c== :: TypeDescription -> TypeDescription -> Bool
Eq, Int -> TypeDescription -> ShowS
[TypeDescription] -> ShowS
TypeDescription -> String
(Int -> TypeDescription -> ShowS)
-> (TypeDescription -> String)
-> ([TypeDescription] -> ShowS)
-> Show TypeDescription
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TypeDescription] -> ShowS
$cshowList :: [TypeDescription] -> ShowS
show :: TypeDescription -> String
$cshow :: TypeDescription -> String
showsPrec :: Int -> TypeDescription -> ShowS
$cshowsPrec :: Int -> TypeDescription -> ShowS
Show, (forall x. TypeDescription -> Rep TypeDescription x)
-> (forall x. Rep TypeDescription x -> TypeDescription)
-> Generic TypeDescription
forall x. Rep TypeDescription x -> TypeDescription
forall x. TypeDescription -> Rep TypeDescription x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep TypeDescription x -> TypeDescription
$cfrom :: forall x. TypeDescription -> Rep TypeDescription x
Generic)

data Traits = Traits
  { Traits -> Numeric
numeric :: Traits.Numeric
  , Traits -> Image
image   :: Traits.Image
  , Traits -> Array
array   :: Traits.Array
  }
  deriving (Traits -> Traits -> Bool
(Traits -> Traits -> Bool)
-> (Traits -> Traits -> Bool) -> Eq Traits
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Traits -> Traits -> Bool
$c/= :: Traits -> Traits -> Bool
== :: Traits -> Traits -> Bool
$c== :: Traits -> Traits -> Bool
Eq, Int -> Traits -> ShowS
[Traits] -> ShowS
Traits -> String
(Int -> Traits -> ShowS)
-> (Traits -> String) -> ([Traits] -> ShowS) -> Show Traits
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Traits] -> ShowS
$cshowList :: [Traits] -> ShowS
show :: Traits -> String
$cshow :: Traits -> String
showsPrec :: Int -> Traits -> ShowS
$cshowsPrec :: Int -> Traits -> ShowS
Show, (forall x. Traits -> Rep Traits x)
-> (forall x. Rep Traits x -> Traits) -> Generic Traits
forall x. Rep Traits x -> Traits
forall x. Traits -> Rep Traits x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Traits x -> Traits
$cfrom :: forall x. Traits -> Rep Traits x
Generic)