module Rattletrap.Type.Attribute.FlaggedByte 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 FlaggedByte = FlaggedByte { flag :: Bool, byte :: U8.U8 } deriving (Eq, Show) instance Json.FromJSON FlaggedByte where parseJSON = Json.withObject "FlaggedByte" $ \object -> do flag <- Json.required object "flag" byte <- Json.required object "byte" pure FlaggedByte {flag, byte} instance Json.ToJSON FlaggedByte where toJSON x = Json.object [Json.pair "flag" $ flag x, Json.pair "byte" $ byte x] schema :: Schema.Schema schema = Schema.named "attribute-flagged-byte" $ Schema.object [ (Json.pair "flag" $ Schema.ref Schema.boolean, True), (Json.pair "byte" $ Schema.ref U8.schema, True) ] bitPut :: FlaggedByte -> BitPut.BitPut bitPut flaggedByteAttribute = BitPut.bool (flag flaggedByteAttribute) <> U8.bitPut (byte flaggedByteAttribute) bitGet :: BitGet.BitGet FlaggedByte bitGet = BitGet.label "FlaggedByte" $ do flag <- BitGet.label "flag" BitGet.bool byte <- BitGet.label "byte" U8.bitGet pure FlaggedByte {flag, byte}