module Data.SpirV.Enum.SourceLanguage 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 SourceLanguage = SourceLanguage Word32
  deriving (SourceLanguage -> SourceLanguage -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SourceLanguage -> SourceLanguage -> Bool
$c/= :: SourceLanguage -> SourceLanguage -> Bool
== :: SourceLanguage -> SourceLanguage -> Bool
$c== :: SourceLanguage -> SourceLanguage -> Bool
Eq, Eq SourceLanguage
SourceLanguage -> SourceLanguage -> Bool
SourceLanguage -> SourceLanguage -> Ordering
SourceLanguage -> SourceLanguage -> SourceLanguage
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
min :: SourceLanguage -> SourceLanguage -> SourceLanguage
$cmin :: SourceLanguage -> SourceLanguage -> SourceLanguage
max :: SourceLanguage -> SourceLanguage -> SourceLanguage
$cmax :: SourceLanguage -> SourceLanguage -> SourceLanguage
>= :: SourceLanguage -> SourceLanguage -> Bool
$c>= :: SourceLanguage -> SourceLanguage -> Bool
> :: SourceLanguage -> SourceLanguage -> Bool
$c> :: SourceLanguage -> SourceLanguage -> Bool
<= :: SourceLanguage -> SourceLanguage -> Bool
$c<= :: SourceLanguage -> SourceLanguage -> Bool
< :: SourceLanguage -> SourceLanguage -> Bool
$c< :: SourceLanguage -> SourceLanguage -> Bool
compare :: SourceLanguage -> SourceLanguage -> Ordering
$ccompare :: SourceLanguage -> SourceLanguage -> Ordering
Ord, Ptr SourceLanguage -> IO SourceLanguage
Ptr SourceLanguage -> Int -> IO SourceLanguage
Ptr SourceLanguage -> Int -> SourceLanguage -> IO ()
Ptr SourceLanguage -> SourceLanguage -> IO ()
SourceLanguage -> Int
forall b. Ptr b -> Int -> IO SourceLanguage
forall b. Ptr b -> Int -> SourceLanguage -> 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
poke :: Ptr SourceLanguage -> SourceLanguage -> IO ()
$cpoke :: Ptr SourceLanguage -> SourceLanguage -> IO ()
peek :: Ptr SourceLanguage -> IO SourceLanguage
$cpeek :: Ptr SourceLanguage -> IO SourceLanguage
pokeByteOff :: forall b. Ptr b -> Int -> SourceLanguage -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> SourceLanguage -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO SourceLanguage
$cpeekByteOff :: forall b. Ptr b -> Int -> IO SourceLanguage
pokeElemOff :: Ptr SourceLanguage -> Int -> SourceLanguage -> IO ()
$cpokeElemOff :: Ptr SourceLanguage -> Int -> SourceLanguage -> IO ()
peekElemOff :: Ptr SourceLanguage -> Int -> IO SourceLanguage
$cpeekElemOff :: Ptr SourceLanguage -> Int -> IO SourceLanguage
alignment :: SourceLanguage -> Int
$calignment :: SourceLanguage -> Int
sizeOf :: SourceLanguage -> Int
$csizeOf :: SourceLanguage -> Int
Storable)

pattern Unknown :: SourceLanguage
pattern $bUnknown :: SourceLanguage
$mUnknown :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
Unknown = SourceLanguage 0

pattern ESSL :: SourceLanguage
pattern $bESSL :: SourceLanguage
$mESSL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
ESSL = SourceLanguage 1

pattern GLSL :: SourceLanguage
pattern $bGLSL :: SourceLanguage
$mGLSL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
GLSL = SourceLanguage 2

pattern OpenCL_C :: SourceLanguage
pattern $bOpenCL_C :: SourceLanguage
$mOpenCL_C :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
OpenCL_C = SourceLanguage 3

pattern OpenCL_CPP :: SourceLanguage
pattern $bOpenCL_CPP :: SourceLanguage
$mOpenCL_CPP :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
OpenCL_CPP = SourceLanguage 4

pattern HLSL :: SourceLanguage
pattern $bHLSL :: SourceLanguage
$mHLSL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
HLSL = SourceLanguage 5

pattern CPP_for_OpenCL :: SourceLanguage
pattern $bCPP_for_OpenCL :: SourceLanguage
$mCPP_for_OpenCL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
CPP_for_OpenCL = SourceLanguage 6

pattern SYCL :: SourceLanguage
pattern $bSYCL :: SourceLanguage
$mSYCL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
SYCL = SourceLanguage 7

toName :: IsString a => SourceLanguage -> a
toName :: forall a. IsString a => SourceLanguage -> a
toName SourceLanguage
x = case SourceLanguage
x of
  SourceLanguage
Unknown -> a
"Unknown"
  SourceLanguage
ESSL -> a
"ESSL"
  SourceLanguage
GLSL -> a
"GLSL"
  SourceLanguage
OpenCL_C -> a
"OpenCL_C"
  SourceLanguage
OpenCL_CPP -> a
"OpenCL_CPP"
  SourceLanguage
HLSL -> a
"HLSL"
  SourceLanguage
CPP_for_OpenCL -> a
"CPP_for_OpenCL"
  SourceLanguage
SYCL -> a
"SYCL"
  SourceLanguage
unknown -> forall a. IsString a => [Char] -> a
fromString forall a b. (a -> b) -> a -> b
$ [Char]
"SourceLanguage " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> [Char]
show SourceLanguage
unknown

instance Show SourceLanguage where
  show :: SourceLanguage -> [Char]
show = forall a. IsString a => SourceLanguage -> a
toName

fromName :: (IsString a, Eq a) => a -> Maybe SourceLanguage
fromName :: forall a. (IsString a, Eq a) => a -> Maybe SourceLanguage
fromName a
x = case a
x of
  a
"Unknown" -> forall a. a -> Maybe a
Just SourceLanguage
Unknown
  a
"ESSL" -> forall a. a -> Maybe a
Just SourceLanguage
ESSL
  a
"GLSL" -> forall a. a -> Maybe a
Just SourceLanguage
GLSL
  a
"OpenCL_C" -> forall a. a -> Maybe a
Just SourceLanguage
OpenCL_C
  a
"OpenCL_CPP" -> forall a. a -> Maybe a
Just SourceLanguage
OpenCL_CPP
  a
"HLSL" -> forall a. a -> Maybe a
Just SourceLanguage
HLSL
  a
"CPP_for_OpenCL" -> forall a. a -> Maybe a
Just SourceLanguage
CPP_for_OpenCL
  a
"SYCL" -> forall a. a -> Maybe a
Just SourceLanguage
SYCL
  a
_unknown -> forall a. Maybe a
Nothing

instance Read SourceLanguage where
  readPrec :: ReadPrec SourceLanguage
readPrec = forall a. ReadPrec a -> ReadPrec a
Read.parens do
    Lex.Ident [Char]
s <- ReadPrec Lexeme
Read.lexP
    forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. ReadPrec a
pfail forall (f :: * -> *) a. Applicative f => a -> f a
pure forall a b. (a -> b) -> a -> b
$ forall a. (IsString a, Eq a) => a -> Maybe SourceLanguage
fromName [Char]
s