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