module Data.SpirV.Enum.ImageChannelDataType where import Data.String (IsString(..)) import Data.Word (Word32) import Foreign (Storable(..)) import GHC.Read (Read(..)) import Text.ParserCombinators.ReadPrec (pfail) import qualified GHC.Read as Read import qualified Text.Read.Lex as Lex newtype ImageChannelDataType = ImageChannelDataType Word32 deriving (Eq, Ord, Storable) pattern SnormInt8 :: ImageChannelDataType pattern SnormInt8 = ImageChannelDataType 0 pattern SnormInt16 :: ImageChannelDataType pattern SnormInt16 = ImageChannelDataType 1 pattern UnormInt8 :: ImageChannelDataType pattern UnormInt8 = ImageChannelDataType 2 pattern UnormInt16 :: ImageChannelDataType pattern UnormInt16 = ImageChannelDataType 3 pattern UnormShort565 :: ImageChannelDataType pattern UnormShort565 = ImageChannelDataType 4 pattern UnormShort555 :: ImageChannelDataType pattern UnormShort555 = ImageChannelDataType 5 pattern UnormInt101010 :: ImageChannelDataType pattern UnormInt101010 = ImageChannelDataType 6 pattern SignedInt8 :: ImageChannelDataType pattern SignedInt8 = ImageChannelDataType 7 pattern SignedInt16 :: ImageChannelDataType pattern SignedInt16 = ImageChannelDataType 8 pattern SignedInt32 :: ImageChannelDataType pattern SignedInt32 = ImageChannelDataType 9 pattern UnsignedInt8 :: ImageChannelDataType pattern UnsignedInt8 = ImageChannelDataType 10 pattern UnsignedInt16 :: ImageChannelDataType pattern UnsignedInt16 = ImageChannelDataType 11 pattern UnsignedInt32 :: ImageChannelDataType pattern UnsignedInt32 = ImageChannelDataType 12 pattern HalfFloat :: ImageChannelDataType pattern HalfFloat = ImageChannelDataType 13 pattern Float :: ImageChannelDataType pattern Float = ImageChannelDataType 14 pattern UnormInt24 :: ImageChannelDataType pattern UnormInt24 = ImageChannelDataType 15 pattern UnormInt101010_2 :: ImageChannelDataType pattern UnormInt101010_2 = ImageChannelDataType 16 toName :: IsString a => ImageChannelDataType -> a toName x = case x of SnormInt8 -> "SnormInt8" SnormInt16 -> "SnormInt16" UnormInt8 -> "UnormInt8" UnormInt16 -> "UnormInt16" UnormShort565 -> "UnormShort565" UnormShort555 -> "UnormShort555" UnormInt101010 -> "UnormInt101010" SignedInt8 -> "SignedInt8" SignedInt16 -> "SignedInt16" SignedInt32 -> "SignedInt32" UnsignedInt8 -> "UnsignedInt8" UnsignedInt16 -> "UnsignedInt16" UnsignedInt32 -> "UnsignedInt32" HalfFloat -> "HalfFloat" Float -> "Float" UnormInt24 -> "UnormInt24" UnormInt101010_2 -> "UnormInt101010_2" unknown -> fromString $ "ImageChannelDataType " ++ show unknown instance Show ImageChannelDataType where show = toName fromName :: (IsString a, Eq a) => a -> Maybe ImageChannelDataType fromName x = case x of "SnormInt8" -> Just SnormInt8 "SnormInt16" -> Just SnormInt16 "UnormInt8" -> Just UnormInt8 "UnormInt16" -> Just UnormInt16 "UnormShort565" -> Just UnormShort565 "UnormShort555" -> Just UnormShort555 "UnormInt101010" -> Just UnormInt101010 "SignedInt8" -> Just SignedInt8 "SignedInt16" -> Just SignedInt16 "SignedInt32" -> Just SignedInt32 "UnsignedInt8" -> Just UnsignedInt8 "UnsignedInt16" -> Just UnsignedInt16 "UnsignedInt32" -> Just UnsignedInt32 "HalfFloat" -> Just HalfFloat "Float" -> Just Float "UnormInt24" -> Just UnormInt24 "UnormInt101010_2" -> Just UnormInt101010_2 _unknown -> Nothing instance Read ImageChannelDataType where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s