-- | This module provides helper functions for converting replays to and from
-- both their binary format and JSON.
module Rattletrap.Utility.Helper
  ( decodeReplayFile
  , encodeReplayJson
  , decodeReplayJson
  , encodeReplayFile
  ) where

import Rattletrap.Decode.Common
import Rattletrap.Decode.Replay
import Rattletrap.Encode.Replay
import Rattletrap.Type.Replay

import qualified Data.Aeson as Json
import qualified Data.Aeson.Encode.Pretty as Json
import qualified Data.Binary.Put as Binary
import qualified Data.ByteString.Lazy as LazyBytes

-- | Parses a raw replay.
decodeReplayFile :: LazyBytes.ByteString -> Either String Replay
decodeReplayFile = runDecode decodeReplay

-- | Encodes a replay as JSON.
encodeReplayJson :: Replay -> LazyBytes.ByteString
encodeReplayJson = Json.encodePretty' Json.defConfig
  { Json.confCompare = compare
  , Json.confIndent = Json.Spaces 2
  , Json.confTrailingNewline = True
  }

-- | Parses a JSON replay.
decodeReplayJson :: LazyBytes.ByteString -> Either String Replay
decodeReplayJson = Json.eitherDecode

-- | Encodes a raw replay.
encodeReplayFile :: Replay -> LazyBytes.ByteString
encodeReplayFile replay = Binary.runPut (putReplay replay)