module Rattletrap.Type.ObjectTarget 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 ObjectTarget = ObjectTarget { ObjectTarget -> Bool isActor :: Bool, ObjectTarget -> I32 targetIndex :: I32.I32 } deriving (ObjectTarget -> ObjectTarget -> Bool (ObjectTarget -> ObjectTarget -> Bool) -> (ObjectTarget -> ObjectTarget -> Bool) -> Eq ObjectTarget forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: ObjectTarget -> ObjectTarget -> Bool == :: ObjectTarget -> ObjectTarget -> Bool $c/= :: ObjectTarget -> ObjectTarget -> Bool /= :: ObjectTarget -> ObjectTarget -> Bool Eq, Int -> ObjectTarget -> ShowS [ObjectTarget] -> ShowS ObjectTarget -> String (Int -> ObjectTarget -> ShowS) -> (ObjectTarget -> String) -> ([ObjectTarget] -> ShowS) -> Show ObjectTarget forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> ObjectTarget -> ShowS showsPrec :: Int -> ObjectTarget -> ShowS $cshow :: ObjectTarget -> String show :: ObjectTarget -> String $cshowList :: [ObjectTarget] -> ShowS showList :: [ObjectTarget] -> ShowS Show) instance Json.FromJSON ObjectTarget where parseJSON :: Value -> Parser ObjectTarget parseJSON = String -> (Object -> Parser ObjectTarget) -> Value -> Parser ObjectTarget forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "ObjectTarget" ((Object -> Parser ObjectTarget) -> Value -> Parser ObjectTarget) -> (Object -> Parser ObjectTarget) -> Value -> Parser ObjectTarget forall a b. (a -> b) -> a -> b $ \Object object -> do Bool isActor <- Object -> String -> Parser Bool forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "is_actor" I32 targetIndex <- Object -> String -> Parser I32 forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "target_index" ObjectTarget -> Parser ObjectTarget forall a. a -> Parser a forall (f :: * -> *) a. Applicative f => a -> f a pure ObjectTarget { Bool isActor :: Bool isActor :: Bool isActor, I32 targetIndex :: I32 targetIndex :: I32 targetIndex } instance Json.ToJSON ObjectTarget where toJSON :: ObjectTarget -> Value toJSON ObjectTarget x = [(Key, Value)] -> Value Json.object [ String -> Bool -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "is_actor" (Bool -> (Key, Value)) -> Bool -> (Key, Value) forall a b. (a -> b) -> a -> b $ ObjectTarget -> Bool isActor ObjectTarget x, String -> I32 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "target_index" (I32 -> (Key, Value)) -> I32 -> (Key, Value) forall a b. (a -> b) -> a -> b $ ObjectTarget -> I32 targetIndex ObjectTarget x ] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "object-target" (Value -> Schema) -> Value -> Schema forall a b. (a -> b) -> a -> b $ [((Key, Value), Bool)] -> Value Schema.object [ (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "is_actor" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema Schema.boolean, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "target_index" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema I32.schema, Bool True) ] bitPut :: ObjectTarget -> BitPut.BitPut bitPut :: ObjectTarget -> BitPut bitPut ObjectTarget demolishAttribute = Bool -> BitPut BitPut.bool (ObjectTarget -> Bool isActor ObjectTarget demolishAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> I32 -> BitPut I32.bitPut (ObjectTarget -> I32 targetIndex ObjectTarget demolishAttribute) bitGet :: BitGet.BitGet ObjectTarget bitGet :: BitGet ObjectTarget bitGet = String -> BitGet ObjectTarget -> BitGet ObjectTarget forall a. String -> BitGet a -> BitGet a BitGet.label String "ObjectTarget" (BitGet ObjectTarget -> BitGet ObjectTarget) -> BitGet ObjectTarget -> BitGet ObjectTarget forall a b. (a -> b) -> a -> b $ do Bool isActor <- String -> BitGet Bool -> BitGet Bool forall a. String -> BitGet a -> BitGet a BitGet.label String "isActor" BitGet Bool BitGet.bool I32 targetIndex <- String -> BitGet I32 -> BitGet I32 forall a. String -> BitGet a -> BitGet a BitGet.label String "targetIndex" BitGet I32 I32.bitGet ObjectTarget -> BitGet ObjectTarget forall a. a -> Get BitString Identity a forall (f :: * -> *) a. Applicative f => a -> f a pure ObjectTarget { Bool isActor :: Bool isActor :: Bool isActor, I32 targetIndex :: I32 targetIndex :: I32 targetIndex }