module Rattletrap.Type.Attribute.CustomDemolishExtended where import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.Attribute.CustomDemolish as CustomDemolish import qualified Rattletrap.Type.ObjectTarget as ObjectTarget import qualified Rattletrap.Type.Version as Version import qualified Rattletrap.Utility.Json as Json data CustomDemolishExtended = CustomDemolishExtended { CustomDemolishExtended -> ObjectTarget attackerPri :: ObjectTarget.ObjectTarget, CustomDemolishExtended -> ObjectTarget selfDemoFx :: ObjectTarget.ObjectTarget, CustomDemolishExtended -> Bool selfDemolish :: Bool, CustomDemolishExtended -> CustomDemolish customDemolish :: CustomDemolish.CustomDemolish } deriving (CustomDemolishExtended -> CustomDemolishExtended -> Bool (CustomDemolishExtended -> CustomDemolishExtended -> Bool) -> (CustomDemolishExtended -> CustomDemolishExtended -> Bool) -> Eq CustomDemolishExtended forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: CustomDemolishExtended -> CustomDemolishExtended -> Bool == :: CustomDemolishExtended -> CustomDemolishExtended -> Bool $c/= :: CustomDemolishExtended -> CustomDemolishExtended -> Bool /= :: CustomDemolishExtended -> CustomDemolishExtended -> Bool Eq, Int -> CustomDemolishExtended -> ShowS [CustomDemolishExtended] -> ShowS CustomDemolishExtended -> String (Int -> CustomDemolishExtended -> ShowS) -> (CustomDemolishExtended -> String) -> ([CustomDemolishExtended] -> ShowS) -> Show CustomDemolishExtended forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> CustomDemolishExtended -> ShowS showsPrec :: Int -> CustomDemolishExtended -> ShowS $cshow :: CustomDemolishExtended -> String show :: CustomDemolishExtended -> String $cshowList :: [CustomDemolishExtended] -> ShowS showList :: [CustomDemolishExtended] -> ShowS Show) instance Json.FromJSON CustomDemolishExtended where parseJSON :: Value -> Parser CustomDemolishExtended parseJSON = String -> (Object -> Parser CustomDemolishExtended) -> Value -> Parser CustomDemolishExtended forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "CustomDemolishExtended" ((Object -> Parser CustomDemolishExtended) -> Value -> Parser CustomDemolishExtended) -> (Object -> Parser CustomDemolishExtended) -> Value -> Parser CustomDemolishExtended forall a b. (a -> b) -> a -> b $ \Object object -> do attackerPri <- Object -> String -> Parser ObjectTarget forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "attacker_pri" selfDemoFx <- Json.required object "self_demo_fx" selfDemolish <- Json.required object "self_demolish" customDemolish <- Json.required object "custom_demolish" pure CustomDemolishExtended { attackerPri, selfDemoFx, selfDemolish, customDemolish } instance Json.ToJSON CustomDemolishExtended where toJSON :: CustomDemolishExtended -> Value toJSON CustomDemolishExtended x = [(Key, Value)] -> Value Json.object [ String -> ObjectTarget -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "attacker_pri" (ObjectTarget -> (Key, Value)) -> ObjectTarget -> (Key, Value) forall a b. (a -> b) -> a -> b $ CustomDemolishExtended -> ObjectTarget attackerPri CustomDemolishExtended x, String -> ObjectTarget -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "self_demo_fx" (ObjectTarget -> (Key, Value)) -> ObjectTarget -> (Key, Value) forall a b. (a -> b) -> a -> b $ CustomDemolishExtended -> ObjectTarget selfDemoFx CustomDemolishExtended x, String -> Bool -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "self_demolish" (Bool -> (Key, Value)) -> Bool -> (Key, Value) forall a b. (a -> b) -> a -> b $ CustomDemolishExtended -> Bool selfDemolish CustomDemolishExtended x, String -> CustomDemolish -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "custom_demolish" (CustomDemolish -> (Key, Value)) -> CustomDemolish -> (Key, Value) forall a b. (a -> b) -> a -> b $ CustomDemolishExtended -> CustomDemolish customDemolish CustomDemolishExtended x ] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-custom-demolish-extended" (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 "attacker_pri" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema ObjectTarget.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "self_demo_fx" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema ObjectTarget.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "self_demolish" (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 "custom_demolish" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema CustomDemolish.schema, Bool True) ] bitPut :: CustomDemolishExtended -> BitPut.BitPut bitPut :: CustomDemolishExtended -> BitPut bitPut CustomDemolishExtended demolishAttribute = ObjectTarget -> BitPut ObjectTarget.bitPut (CustomDemolishExtended -> ObjectTarget attackerPri CustomDemolishExtended demolishAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> ObjectTarget -> BitPut ObjectTarget.bitPut (CustomDemolishExtended -> ObjectTarget selfDemoFx CustomDemolishExtended demolishAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> Bool -> BitPut BitPut.bool (CustomDemolishExtended -> Bool selfDemolish CustomDemolishExtended demolishAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> CustomDemolish -> BitPut CustomDemolish.bitPut (CustomDemolishExtended -> CustomDemolish customDemolish CustomDemolishExtended demolishAttribute) bitGet :: Version.Version -> BitGet.BitGet CustomDemolishExtended bitGet :: Version -> BitGet CustomDemolishExtended bitGet Version version = String -> BitGet CustomDemolishExtended -> BitGet CustomDemolishExtended forall a. String -> BitGet a -> BitGet a BitGet.label String "CustomDemolishExtended" (BitGet CustomDemolishExtended -> BitGet CustomDemolishExtended) -> BitGet CustomDemolishExtended -> BitGet CustomDemolishExtended forall a b. (a -> b) -> a -> b $ do attackerPri <- String -> BitGet ObjectTarget -> BitGet ObjectTarget forall a. String -> BitGet a -> BitGet a BitGet.label String "attackerPri" BitGet ObjectTarget ObjectTarget.bitGet selfDemoFx <- BitGet.label "selfDemoFx" ObjectTarget.bitGet selfDemolish <- BitGet.label "selfDemolish" BitGet.bool customDemolish <- BitGet.label "customDemolish" $ CustomDemolish.bitGet version pure CustomDemolishExtended { attackerPri, selfDemoFx, selfDemolish, customDemolish }