module Data.SpirV.Enum.ImageChannelOrder 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 ImageChannelOrder = ImageChannelOrder Word32 deriving (Eq, Ord, Storable) pattern R :: ImageChannelOrder pattern R = ImageChannelOrder 0 pattern A :: ImageChannelOrder pattern A = ImageChannelOrder 1 pattern RG :: ImageChannelOrder pattern RG = ImageChannelOrder 2 pattern RA :: ImageChannelOrder pattern RA = ImageChannelOrder 3 pattern RGB :: ImageChannelOrder pattern RGB = ImageChannelOrder 4 pattern RGBA :: ImageChannelOrder pattern RGBA = ImageChannelOrder 5 pattern BGRA :: ImageChannelOrder pattern BGRA = ImageChannelOrder 6 pattern ARGB :: ImageChannelOrder pattern ARGB = ImageChannelOrder 7 pattern Intensity :: ImageChannelOrder pattern Intensity = ImageChannelOrder 8 pattern Luminance :: ImageChannelOrder pattern Luminance = ImageChannelOrder 9 pattern Rx :: ImageChannelOrder pattern Rx = ImageChannelOrder 10 pattern RGx :: ImageChannelOrder pattern RGx = ImageChannelOrder 11 pattern RGBx :: ImageChannelOrder pattern RGBx = ImageChannelOrder 12 pattern Depth :: ImageChannelOrder pattern Depth = ImageChannelOrder 13 pattern DepthStencil :: ImageChannelOrder pattern DepthStencil = ImageChannelOrder 14 pattern SRGB :: ImageChannelOrder pattern SRGB = ImageChannelOrder 15 pattern SRGBx :: ImageChannelOrder pattern SRGBx = ImageChannelOrder 16 pattern SRGBA :: ImageChannelOrder pattern SRGBA = ImageChannelOrder 17 pattern SBGRA :: ImageChannelOrder pattern SBGRA = ImageChannelOrder 18 pattern ABGR :: ImageChannelOrder pattern ABGR = ImageChannelOrder 19 toName :: IsString a => ImageChannelOrder -> a toName x = case x of R -> "R" A -> "A" RG -> "RG" RA -> "RA" RGB -> "RGB" RGBA -> "RGBA" BGRA -> "BGRA" ARGB -> "ARGB" Intensity -> "Intensity" Luminance -> "Luminance" Rx -> "Rx" RGx -> "RGx" RGBx -> "RGBx" Depth -> "Depth" DepthStencil -> "DepthStencil" SRGB -> "sRGB" SRGBx -> "sRGBx" SRGBA -> "sRGBA" SBGRA -> "sBGRA" ABGR -> "ABGR" unknown -> fromString $ "ImageChannelOrder " ++ show unknown instance Show ImageChannelOrder where show = toName fromName :: (IsString a, Eq a) => a -> Maybe ImageChannelOrder fromName x = case x of "R" -> Just R "A" -> Just A "RG" -> Just RG "RA" -> Just RA "RGB" -> Just RGB "RGBA" -> Just RGBA "BGRA" -> Just BGRA "ARGB" -> Just ARGB "Intensity" -> Just Intensity "Luminance" -> Just Luminance "Rx" -> Just Rx "RGx" -> Just RGx "RGBx" -> Just RGBx "Depth" -> Just Depth "DepthStencil" -> Just DepthStencil "sRGB" -> Just SRGB "sRGBx" -> Just SRGBx "sRGBA" -> Just SRGBA "sBGRA" -> Just SBGRA "ABGR" -> Just ABGR _unknown -> Nothing instance Read ImageChannelOrder where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s