module Rattletrap.Type.Attribute.StatEvent 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 StatEvent = StatEvent { StatEvent -> Bool unknown :: Bool , StatEvent -> I32 objectId :: I32.I32 } deriving (StatEvent -> StatEvent -> Bool (StatEvent -> StatEvent -> Bool) -> (StatEvent -> StatEvent -> Bool) -> Eq StatEvent forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: StatEvent -> StatEvent -> Bool $c/= :: StatEvent -> StatEvent -> Bool == :: StatEvent -> StatEvent -> Bool $c== :: StatEvent -> StatEvent -> Bool Eq, Int -> StatEvent -> ShowS [StatEvent] -> ShowS StatEvent -> String (Int -> StatEvent -> ShowS) -> (StatEvent -> String) -> ([StatEvent] -> ShowS) -> Show StatEvent forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [StatEvent] -> ShowS $cshowList :: [StatEvent] -> ShowS show :: StatEvent -> String $cshow :: StatEvent -> String showsPrec :: Int -> StatEvent -> ShowS $cshowsPrec :: Int -> StatEvent -> ShowS Show) instance Json.FromJSON StatEvent where parseJSON :: Value -> Parser StatEvent parseJSON = String -> (Object -> Parser StatEvent) -> Value -> Parser StatEvent forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "StatEvent" ((Object -> Parser StatEvent) -> Value -> Parser StatEvent) -> (Object -> Parser StatEvent) -> Value -> Parser StatEvent forall a b. (a -> b) -> a -> b $ \Object object -> do Bool unknown <- Object -> String -> Parser Bool forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "unknown" I32 objectId <- Object -> String -> Parser I32 forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "object_id" StatEvent -> Parser StatEvent forall (f :: * -> *) a. Applicative f => a -> f a pure StatEvent :: Bool -> I32 -> StatEvent StatEvent { Bool unknown :: Bool unknown :: Bool unknown, I32 objectId :: I32 objectId :: I32 objectId } instance Json.ToJSON StatEvent where toJSON :: StatEvent -> Value toJSON StatEvent x = [Pair] -> Value Json.object [String -> Bool -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "unknown" (Bool -> Pair) -> Bool -> Pair forall a b. (a -> b) -> a -> b $ StatEvent -> Bool unknown StatEvent x, String -> I32 -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "object_id" (I32 -> Pair) -> I32 -> Pair forall a b. (a -> b) -> a -> b $ StatEvent -> I32 objectId StatEvent x] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-stat-event" (Value -> Schema) -> Value -> Schema forall a b. (a -> b) -> a -> b $ [(Pair, Bool)] -> Value Schema.object [ (String -> Value -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "unknown" (Value -> Pair) -> Value -> Pair forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.boolean, Bool True) , (String -> Value -> Pair forall value pair. (ToJSON value, KeyValue pair) => String -> value -> pair Json.pair String "object_id" (Value -> Pair) -> Value -> Pair forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema I32.schema, Bool True) ] bitPut :: StatEvent -> BitPut.BitPut bitPut :: StatEvent -> BitPut bitPut StatEvent statEventAttribute = Bool -> BitPut BitPut.bool (StatEvent -> Bool unknown StatEvent statEventAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> I32 -> BitPut I32.bitPut (StatEvent -> I32 objectId StatEvent statEventAttribute) bitGet :: BitGet.BitGet StatEvent bitGet :: BitGet StatEvent bitGet = Bool -> I32 -> StatEvent StatEvent (Bool -> I32 -> StatEvent) -> BitGet Bool -> BitGet (I32 -> StatEvent) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> BitGet Bool BitGet.bool BitGet (I32 -> StatEvent) -> BitGet I32 -> BitGet StatEvent forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> BitGet I32 I32.bitGet