{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TypeSynonymInstances #-}

module Data.SpirV.Enum.SourceLanguage where

import Data.Word (Word32)
import Foreign.Storable (Storable)

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

instance Show SourceLanguage where
  showsPrec :: Int -> SourceLanguage -> ShowS
showsPrec Int
p (SourceLanguage Word32
v) = case Word32
v of
    Word32
0 -> String -> ShowS
showString String
"Unknown"
    Word32
1 -> String -> ShowS
showString String
"ESSL"
    Word32
2 -> String -> ShowS
showString String
"GLSL"
    Word32
3 -> String -> ShowS
showString String
"OpenCL_C"
    Word32
4 -> String -> ShowS
showString String
"OpenCL_CPP"
    Word32
5 -> String -> ShowS
showString String
"HLSL"
    Word32
6 -> String -> ShowS
showString String
"CPP_for_OpenCL"
    Word32
7 -> String -> ShowS
showString String
"SYCL"
    Word32
8 -> String -> ShowS
showString String
"HERO_C"
    Word32
9 -> String -> ShowS
showString String
"NZSL"
    Word32
10 -> String -> ShowS
showString String
"WGSL"
    Word32
11 -> String -> ShowS
showString String
"Slang"
    Word32
12 -> String -> ShowS
showString String
"Zig"
    Word32
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ String -> ShowS
showString String
"SourceLanguage " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Word32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec (Int
p Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Word32
x

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

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

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

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

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

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

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

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

pattern HERO_C :: SourceLanguage
pattern $mHERO_C :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
$bHERO_C :: SourceLanguage
HERO_C = SourceLanguage 8

pattern NZSL :: SourceLanguage
pattern $mNZSL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
$bNZSL :: SourceLanguage
NZSL = SourceLanguage 9

pattern WGSL :: SourceLanguage
pattern $mWGSL :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
$bWGSL :: SourceLanguage
WGSL = SourceLanguage 10

pattern Slang :: SourceLanguage
pattern $mSlang :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
$bSlang :: SourceLanguage
Slang = SourceLanguage 11

pattern Zig :: SourceLanguage
pattern $mZig :: forall {r}. SourceLanguage -> ((# #) -> r) -> ((# #) -> r) -> r
$bZig :: SourceLanguage
Zig = SourceLanguage 12