module Rattletrap.Type.Attribute.TeamPaint where import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.U32 as U32 import qualified Rattletrap.Type.U8 as U8 import qualified Rattletrap.Utility.Json as Json data TeamPaint = TeamPaint { TeamPaint -> U8 team :: U8.U8, TeamPaint -> U8 primaryColor :: U8.U8, TeamPaint -> U8 accentColor :: U8.U8, TeamPaint -> U32 primaryFinish :: U32.U32, TeamPaint -> U32 accentFinish :: U32.U32 } deriving (TeamPaint -> TeamPaint -> Bool (TeamPaint -> TeamPaint -> Bool) -> (TeamPaint -> TeamPaint -> Bool) -> Eq TeamPaint forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: TeamPaint -> TeamPaint -> Bool == :: TeamPaint -> TeamPaint -> Bool $c/= :: TeamPaint -> TeamPaint -> Bool /= :: TeamPaint -> TeamPaint -> Bool Eq, Int -> TeamPaint -> ShowS [TeamPaint] -> ShowS TeamPaint -> String (Int -> TeamPaint -> ShowS) -> (TeamPaint -> String) -> ([TeamPaint] -> ShowS) -> Show TeamPaint forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> TeamPaint -> ShowS showsPrec :: Int -> TeamPaint -> ShowS $cshow :: TeamPaint -> String show :: TeamPaint -> String $cshowList :: [TeamPaint] -> ShowS showList :: [TeamPaint] -> ShowS Show) instance Json.FromJSON TeamPaint where parseJSON :: Value -> Parser TeamPaint parseJSON = String -> (Object -> Parser TeamPaint) -> Value -> Parser TeamPaint forall a. String -> (Object -> Parser a) -> Value -> Parser a Json.withObject String "TeamPaint" ((Object -> Parser TeamPaint) -> Value -> Parser TeamPaint) -> (Object -> Parser TeamPaint) -> Value -> Parser TeamPaint forall a b. (a -> b) -> a -> b $ \Object object -> do team <- Object -> String -> Parser U8 forall value. FromJSON value => Object -> String -> Parser value Json.required Object object String "team" primaryColor <- Json.required object "primary_color" accentColor <- Json.required object "accent_color" primaryFinish <- Json.required object "primary_finish" accentFinish <- Json.required object "accent_finish" pure TeamPaint { team, primaryColor, accentColor, primaryFinish, accentFinish } instance Json.ToJSON TeamPaint where toJSON :: TeamPaint -> Value toJSON TeamPaint x = [(Key, Value)] -> Value Json.object [ String -> U8 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "team" (U8 -> (Key, Value)) -> U8 -> (Key, Value) forall a b. (a -> b) -> a -> b $ TeamPaint -> U8 team TeamPaint x, String -> U8 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "primary_color" (U8 -> (Key, Value)) -> U8 -> (Key, Value) forall a b. (a -> b) -> a -> b $ TeamPaint -> U8 primaryColor TeamPaint x, String -> U8 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "accent_color" (U8 -> (Key, Value)) -> U8 -> (Key, Value) forall a b. (a -> b) -> a -> b $ TeamPaint -> U8 accentColor TeamPaint x, String -> U32 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "primary_finish" (U32 -> (Key, Value)) -> U32 -> (Key, Value) forall a b. (a -> b) -> a -> b $ TeamPaint -> U32 primaryFinish TeamPaint x, String -> U32 -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "accent_finish" (U32 -> (Key, Value)) -> U32 -> (Key, Value) forall a b. (a -> b) -> a -> b $ TeamPaint -> U32 accentFinish TeamPaint x ] schema :: Schema.Schema schema :: Schema schema = String -> Value -> Schema Schema.named String "attribute-team-paint" (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 "team" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U8.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "primary_color" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U8.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "accent_color" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U8.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "primary_finish" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U32.schema, Bool True), (String -> Value -> (Key, Value) forall value e p. (ToJSON value, KeyValue e p) => String -> value -> p Json.pair String "accent_finish" (Value -> (Key, Value)) -> Value -> (Key, Value) forall a b. (a -> b) -> a -> b $ Schema -> Value Schema.ref Schema U32.schema, Bool True) ] bitPut :: TeamPaint -> BitPut.BitPut bitPut :: TeamPaint -> BitPut bitPut TeamPaint teamPaintAttribute = U8 -> BitPut U8.bitPut (TeamPaint -> U8 team TeamPaint teamPaintAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U8 -> BitPut U8.bitPut (TeamPaint -> U8 primaryColor TeamPaint teamPaintAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U8 -> BitPut U8.bitPut (TeamPaint -> U8 accentColor TeamPaint teamPaintAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U32 -> BitPut U32.bitPut (TeamPaint -> U32 primaryFinish TeamPaint teamPaintAttribute) BitPut -> BitPut -> BitPut forall a. Semigroup a => a -> a -> a <> U32 -> BitPut U32.bitPut (TeamPaint -> U32 accentFinish TeamPaint teamPaintAttribute) bitGet :: BitGet.BitGet TeamPaint bitGet :: BitGet TeamPaint bitGet = String -> BitGet TeamPaint -> BitGet TeamPaint forall a. String -> BitGet a -> BitGet a BitGet.label String "TeamPaint" (BitGet TeamPaint -> BitGet TeamPaint) -> BitGet TeamPaint -> BitGet TeamPaint forall a b. (a -> b) -> a -> b $ do team <- String -> BitGet U8 -> BitGet U8 forall a. String -> BitGet a -> BitGet a BitGet.label String "team" BitGet U8 U8.bitGet primaryColor <- BitGet.label "primaryColor" U8.bitGet accentColor <- BitGet.label "accentColor" U8.bitGet primaryFinish <- BitGet.label "primaryFinish" U32.bitGet accentFinish <- BitGet.label "accentFinish" U32.bitGet pure TeamPaint { team, primaryColor, accentColor, primaryFinish, accentFinish }