module Rattletrap.Type.Attribute.Enum where import qualified Data.Word as Word import Prelude hiding (Enum) import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Utility.Json as Json newtype Enum = Enum { Enum -> Word16 value :: Word.Word16 } deriving (Enum -> Enum -> Bool (Enum -> Enum -> Bool) -> (Enum -> Enum -> Bool) -> Eq Enum forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Enum -> Enum -> Bool $c/= :: Enum -> Enum -> Bool == :: Enum -> Enum -> Bool $c== :: Enum -> Enum -> Bool Eq, Int -> Enum -> ShowS [Enum] -> ShowS Enum -> String (Int -> Enum -> ShowS) -> (Enum -> String) -> ([Enum] -> ShowS) -> Show Enum forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Enum] -> ShowS $cshowList :: [Enum] -> ShowS show :: Enum -> String $cshow :: Enum -> String showsPrec :: Int -> Enum -> ShowS $cshowsPrec :: Int -> Enum -> ShowS Show) instance Json.FromJSON Enum where parseJSON :: Value -> Parser Enum parseJSON = (Word16 -> Enum) -> Parser Word16 -> Parser Enum forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap Word16 -> Enum Enum (Parser Word16 -> Parser Enum) -> (Value -> Parser Word16) -> Value -> Parser Enum forall b c a. (b -> c) -> (a -> b) -> a -> c . Value -> Parser Word16 forall a. FromJSON a => Value -> Parser a Json.parseJSON instance Json.ToJSON Enum where toJSON :: Enum -> Value toJSON = Word16 -> Value forall a. ToJSON a => a -> Value Json.toJSON (Word16 -> Value) -> (Enum -> Word16) -> Enum -> Value forall b c a. (b -> c) -> (a -> b) -> a -> c . Enum -> Word16 value schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-enum" (Value -> Schema) -> Value -> Schema forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.integer bitPut :: Enum -> BitPut.BitPut bitPut :: Enum -> BitPut bitPut Enum enumAttribute = Int -> Word16 -> BitPut forall a. Bits a => Int -> a -> BitPut BitPut.bits Int 11 (Enum -> Word16 value Enum enumAttribute) bitGet :: BitGet.BitGet Enum bitGet :: BitGet Enum bitGet = Word16 -> Enum Enum (Word16 -> Enum) -> BitGet Word16 -> BitGet Enum forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Int -> BitGet Word16 forall a. Bits a => Int -> BitGet a BitGet.bits Int 11