rattletrap-0.1.0: library/Rattletrap/AttributeValue/Reservation.hs
module Rattletrap.AttributeValue.Reservation where
import Rattletrap.AttributeValue.UniqueId
import Rattletrap.CompressedWord
import Rattletrap.Text
import Rattletrap.Word8
import qualified Data.Binary.Bits.Get as BinaryBit
import qualified Data.Binary.Bits.Put as BinaryBit
import qualified Data.Word as Word
data ReservationAttributeValue = ReservationAttributeValue
{ reservationAttributeValueNumber :: CompressedWord
, reservationAttributeValueUniqueId :: UniqueIdAttributeValue
, reservationAttributeValueName :: Maybe Text
, reservationAttributeValueUnknown1 :: Bool
, reservationAttributeValueUnknown2 :: Bool
, reservationAttributeValueUnknown3 :: Maybe Word.Word8
} deriving (Eq, Ord, Show)
getReservationAttributeValue :: (Int, Int)
-> BinaryBit.BitGet ReservationAttributeValue
getReservationAttributeValue version = do
number <- getCompressedWord 7
uniqueId <- getUniqueIdAttributeValue
name <-
if uniqueIdAttributeValueSystemId uniqueId == Word8 0
then pure Nothing
else do
name <- getTextBits
pure (Just name)
a <- BinaryBit.getBool
b <- BinaryBit.getBool
mc <-
if version < (868, 12)
then pure Nothing
else do
c <- BinaryBit.getWord8 6
pure (Just c)
pure (ReservationAttributeValue number uniqueId name a b mc)
putReservationAttributeValue :: ReservationAttributeValue -> BinaryBit.BitPut ()
putReservationAttributeValue reservationAttributeValue = do
putCompressedWord (reservationAttributeValueNumber reservationAttributeValue)
putUniqueIdAttributeValue
(reservationAttributeValueUniqueId reservationAttributeValue)
case reservationAttributeValueName reservationAttributeValue of
Nothing -> pure ()
Just name -> putTextBits name
BinaryBit.putBool
(reservationAttributeValueUnknown1 reservationAttributeValue)
BinaryBit.putBool
(reservationAttributeValueUnknown2 reservationAttributeValue)
case reservationAttributeValueUnknown3 reservationAttributeValue of
Nothing -> pure ()
Just c -> BinaryBit.putWord8 6 c