module Rattletrap.Encode.Section
( putSection
)
where
import Rattletrap.Encode.Word32le
import Rattletrap.Type.Section
import Rattletrap.Type.Word32le
import Rattletrap.Utility.Crc
import qualified Data.Binary as Binary
import qualified Data.Binary.Put as Binary
import qualified Data.ByteString as Bytes
import qualified Data.ByteString.Lazy as LazyBytes
putSection :: (a -> Binary.Put) -> Section a -> Binary.Put
putSection putBody section = do
let
rawBody =
LazyBytes.toStrict (Binary.runPut (putBody (sectionBody section)))
let size = Bytes.length rawBody
let crc = getCrc32 rawBody
putWord32 (Word32le (fromIntegral size))
putWord32 (Word32le crc)
Binary.putByteString rawBody