module Data.SpirV.Enum.KernelEnqueueFlags 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 KernelEnqueueFlags = KernelEnqueueFlags Word32 deriving (Eq, Ord, Storable) pattern NoWait :: KernelEnqueueFlags pattern NoWait = KernelEnqueueFlags 0 pattern WaitKernel :: KernelEnqueueFlags pattern WaitKernel = KernelEnqueueFlags 1 pattern WaitWorkGroup :: KernelEnqueueFlags pattern WaitWorkGroup = KernelEnqueueFlags 2 toName :: IsString a => KernelEnqueueFlags -> a toName x = case x of NoWait -> "NoWait" WaitKernel -> "WaitKernel" WaitWorkGroup -> "WaitWorkGroup" unknown -> fromString $ "KernelEnqueueFlags " ++ show unknown instance Show KernelEnqueueFlags where show = toName fromName :: (IsString a, Eq a) => a -> Maybe KernelEnqueueFlags fromName x = case x of "NoWait" -> Just NoWait "WaitKernel" -> Just WaitKernel "WaitWorkGroup" -> Just WaitWorkGroup _unknown -> Nothing instance Read KernelEnqueueFlags where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s