rattletrap-14.1.4: src/lib/Rattletrap/Utility/Helper.hs
-- | This module provides helper functions for converting replays to and from
-- both their binary format and JSON.
module Rattletrap.Utility.Helper where
import qualified Control.Exception as Exception
import qualified Data.Bifunctor as Bifunctor
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Lazy as LazyByteString
import qualified Rattletrap.ByteGet as ByteGet
import qualified Rattletrap.BytePut as BytePut
import qualified Rattletrap.Exception.InvalidJson as InvalidJson
import qualified Rattletrap.Type.Content as Content
import qualified Rattletrap.Type.Replay as Replay
import qualified Rattletrap.Type.Section as Section
import qualified Rattletrap.Utility.Json as Json
-- | Parses a raw replay.
decodeReplayFile ::
Bool ->
Bool ->
ByteString.ByteString ->
Either ([String], Exception.SomeException) Replay.Replay
decodeReplayFile fast = ByteGet.run . Replay.byteGet fast
-- | Encodes a replay as JSON.
encodeReplayJson :: Replay.Replay -> LazyByteString.ByteString
encodeReplayJson = Json.encodePretty
-- | Parses a JSON replay.
decodeReplayJson ::
ByteString.ByteString ->
Either ([String], Exception.SomeException) Replay.Replay
decodeReplayJson =
Bifunctor.first ((,) [] . Exception.toException . InvalidJson.InvalidJson)
. Json.decode
-- | Encodes a raw replay.
encodeReplayFile :: Bool -> Replay.Replay -> LazyByteString.ByteString
encodeReplayFile fast replay =
BytePut.toLazyByteString . Replay.bytePut $
if fast
then
replay
{ Replay.content = Section.create Content.bytePut Content.empty
}
else replay