module Rattletrap.Type.Attribute.ClubColors where import qualified Rattletrap.BitGet as BitGet import qualified Rattletrap.BitPut as BitPut import qualified Rattletrap.Schema as Schema import qualified Rattletrap.Type.U8 as U8 import qualified Rattletrap.Utility.Json as Json data ClubColors = ClubColors { blueFlag :: Bool, blueColor :: U8.U8, orangeFlag :: Bool, orangeColor :: U8.U8 } deriving (Eq, Show) instance Json.FromJSON ClubColors where parseJSON = Json.withObject "ClubColors" $ \object -> do blueFlag <- Json.required object "blue_flag" blueColor <- Json.required object "blue_color" orangeFlag <- Json.required object "orange_flag" orangeColor <- Json.required object "orange_color" pure ClubColors {blueFlag, blueColor, orangeFlag, orangeColor} instance Json.ToJSON ClubColors where toJSON x = Json.object [ Json.pair "blue_flag" $ blueFlag x, Json.pair "blue_color" $ blueColor x, Json.pair "orange_flag" $ orangeFlag x, Json.pair "orange_color" $ orangeColor x ] schema :: Schema.Schema schema = Schema.named "attribute-club-colors" $ Schema.object [ (Json.pair "blue_flag" $ Schema.ref Schema.boolean, True), (Json.pair "blue_color" $ Schema.ref U8.schema, True), (Json.pair "orange_flag" $ Schema.ref Schema.boolean, True), (Json.pair "orange_color" $ Schema.ref U8.schema, True) ] bitPut :: ClubColors -> BitPut.BitPut bitPut clubColorsAttribute = BitPut.bool (blueFlag clubColorsAttribute) <> U8.bitPut (blueColor clubColorsAttribute) <> BitPut.bool (orangeFlag clubColorsAttribute) <> U8.bitPut (orangeColor clubColorsAttribute) bitGet :: BitGet.BitGet ClubColors bitGet = BitGet.label "ClubColors" $ do blueFlag <- BitGet.label "blueFlag" BitGet.bool blueColor <- BitGet.label "blueColor" U8.bitGet orangeFlag <- BitGet.label "orangeFlag" BitGet.bool orangeColor <- BitGet.label "orangeColor" U8.bitGet pure ClubColors {blueFlag, blueColor, orangeFlag, orangeColor}