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