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