module Rattletrap.AttributeValue.FlaggedInt where

import Rattletrap.Int32

import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit

data FlaggedIntAttributeValue = FlaggedIntAttributeValue
  { flaggedIntAttributeValueFlag :: Bool
  , flaggedIntAttributeValueInt :: Int32
  } deriving (Eq, Ord, Show)

getFlaggedIntAttributeValue :: BinaryBit.BitGet FlaggedIntAttributeValue
getFlaggedIntAttributeValue = do
  flag <- BinaryBit.getBool
  int <- getInt32Bits
  pure (FlaggedIntAttributeValue flag int)

putFlaggedIntAttributeValue :: FlaggedIntAttributeValue -> BinaryBit.BitPut ()
putFlaggedIntAttributeValue flaggedIntAttributeValue = do
  BinaryBit.putBool (flaggedIntAttributeValueFlag flaggedIntAttributeValue)
  putInt32Bits (flaggedIntAttributeValueInt flaggedIntAttributeValue)