module Data.SpirV.Enum.FunctionControl where import Data.Bits (Bits) 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 FunctionControl = FunctionControl Word32 deriving (Eq, Ord, Storable, Bits) pattern Inline :: FunctionControl pattern Inline = FunctionControl 0x1 pattern DontInline :: FunctionControl pattern DontInline = FunctionControl 0x2 pattern Pure :: FunctionControl pattern Pure = FunctionControl 0x4 pattern Const :: FunctionControl pattern Const = FunctionControl 0x8 pattern OptNoneINTEL :: FunctionControl pattern OptNoneINTEL = FunctionControl 0x10000 toName :: IsString a => FunctionControl -> a toName x = case x of Inline -> "Inline" DontInline -> "DontInline" Pure -> "Pure" Const -> "Const" OptNoneINTEL -> "OptNoneINTEL" unknown -> fromString $ "FunctionControl " ++ show unknown instance Show FunctionControl where show = toName fromName :: (IsString a, Eq a) => a -> Maybe FunctionControl fromName x = case x of "Inline" -> Just Inline "DontInline" -> Just DontInline "Pure" -> Just Pure "Const" -> Just Const "OptNoneINTEL" -> Just OptNoneINTEL _unknown -> Nothing instance Read FunctionControl where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s