module Rattletrap.Type.Attribute.FlaggedInt where import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.I32 as I32 import qualified Rattletrap.Utility.Json as Json data FlaggedInt = FlaggedInt { FlaggedInt -> Bool flag :: Bool , FlaggedInt -> I32 int :: I32.I32 } deriving (FlaggedInt -> FlaggedInt -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: FlaggedInt -> FlaggedInt -> Bool $c/= :: FlaggedInt -> FlaggedInt -> Bool == :: FlaggedInt -> FlaggedInt -> Bool $c== :: FlaggedInt -> FlaggedInt -> Bool Eq, Int -> FlaggedInt -> ShowS [FlaggedInt] -> ShowS FlaggedInt -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [FlaggedInt] -> ShowS $cshowList :: [FlaggedInt] -> ShowS show :: FlaggedInt -> String $cshow :: FlaggedInt -> String showsPrec :: Int -> FlaggedInt -> ShowS $cshowsPrec :: Int -> FlaggedInt -> ShowS Show) instance Json.FromJSON FlaggedInt where parseJSON :: Value -> Parser FlaggedInt parseJSON = forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "FlaggedInt" forall a b. (a -> b) -> a -> b $ \Object object -> do Bool flag <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "flag" I32 int <- forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "int" forall (f :: * -> *) a. Applicative f => a -> f a pure FlaggedInt { Bool flag :: Bool flag :: Bool flag, I32 int :: I32 int :: I32 int } instance Json.ToJSON FlaggedInt where toJSON :: FlaggedInt -> Value toJSON FlaggedInt x = [(Key, Value)] -> Value Json.object [forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "flag" forall a b. (a -> b) -> a -> b $ FlaggedInt -> Bool flag FlaggedInt x, forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "int" forall a b. (a -> b) -> a -> b $ FlaggedInt -> I32 int FlaggedInt x] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-flagged-int" forall a b. (a -> b) -> a -> b $ [((Key, Value), Bool)] -> Value Schema.object [ (forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "flag" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.boolean, Bool True) , (forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "int" forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema I32.schema, Bool True) ] bitPut :: FlaggedInt -> BitPut.BitPut bitPut :: FlaggedInt -> BitPut bitPut FlaggedInt flaggedIntAttribute = Bool -> BitPut BitPut.bool (FlaggedInt -> Bool flag FlaggedInt flaggedIntAttribute) forall a. Semigroup a => a -> a -> a <> I32 -> BitPut I32.bitPut (FlaggedInt -> I32 int FlaggedInt flaggedIntAttribute) bitGet :: BitGet.BitGet FlaggedInt bitGet :: BitGet FlaggedInt bitGet = forall a. String -> BitGet a -> BitGet a BitGet.label String "FlaggedInt" forall a b. (a -> b) -> a -> b $ do Bool flag <- forall a. String -> BitGet a -> BitGet a BitGet.label String "flag" BitGet Bool BitGet.bool I32 int <- forall a. String -> BitGet a -> BitGet a BitGet.label String "int" BitGet I32 I32.bitGet forall (f :: * -> *) a. Applicative f => a -> f a pure FlaggedInt { Bool flag :: Bool flag :: Bool flag, I32 int :: I32 int :: I32 int }