rattletrap-2.2.2: library/Rattletrap/Replay.hs
module Rattletrap.Replay where
import Rattletrap.Content
import Rattletrap.Header
import Rattletrap.Primitive.Section
import qualified Data.Binary as Binary
-- | A Rocket League replay.
data Replay = Replay
{ replayHeader :: Section Header
-- ^ This has most of the high-level metadata.
, replayContent :: Section Content
-- ^ This has most of the low-level game data.
} deriving (Eq, Ord, Show)
-- | Parses a raw replay. Use this with 'Data.Binary.Get.runGet'.
--
-- @
-- let replay = 'Data.Binary.Get.runGet' 'getReplay' bytes
-- @
getReplay :: Binary.Get Replay
getReplay = do
header <- getSection getHeader
let version = getVersion (sectionBody header)
let numFrames = getNumFrames (sectionBody header)
let maxChannels = getMaxChannels (sectionBody header)
content <- getSection (getContent version numFrames maxChannels)
pure (Replay header content)
-- | Generates a raw replay. Use this with 'Data.Binary.Put.runPut'.
--
-- @
-- let bytes = 'Data.Binary.Put.runPut' ('putReplay' replay)
-- @
putReplay :: Replay -> Binary.Put
putReplay replay = do
putSection putHeader (replayHeader replay)
putSection putContent (replayContent replay)