packages feed

octane-0.4.16: library/Octane/Type/Replay.hs

{-# LANGUAGE DeriveGeneric #-}

module Octane.Type.Replay (Replay(..)) where

import qualified Control.DeepSeq as DeepSeq
import qualified Data.Aeson.Types as Aeson
import qualified Data.Binary as Binary
import Data.Function ((&))
import qualified GHC.Generics as Generics
import qualified Octane.Type.Actor as Actor
import qualified Octane.Type.CacheItem as CacheItem
import qualified Octane.Type.KeyFrame as KeyFrame
import qualified Octane.Type.Mark as Mark
import qualified Octane.Type.Message as Message
import qualified Octane.Type.Primitive.Dictionary as Dictionary
import qualified Octane.Type.Primitive.List as List
import qualified Octane.Type.Primitive.PCString as PCString
import qualified Octane.Type.Primitive.Stream as Stream
import qualified Octane.Type.Primitive.Word32LE as Word32LE
import qualified Octane.Type.Property as Property

data Replay = Replay
    { replaySize1 :: Word32LE.Word32LE
    , replayCRC1 :: Word32LE.Word32LE
    , replayVersion1 :: Word32LE.Word32LE
    , replayVersion2 :: Word32LE.Word32LE
    , replayLabel :: PCString.PCString
    , replayProperties :: Dictionary.Dictionary Property.Property
    , replaySize2 :: Word32LE.Word32LE
    , replayCRC2 :: Word32LE.Word32LE
    , replayLevels :: List.List PCString.PCString
    , replayKeyFrames :: List.List KeyFrame.KeyFrame
    , replayStream :: Stream.Stream
    , replayMessages :: List.List Message.Message
    , replayMarks :: List.List Mark.Mark
    , replayPackages :: List.List PCString.PCString
    , replayObjects :: List.List PCString.PCString
    , replayNames :: List.List PCString.PCString
    , replayActors :: List.List Actor.Actor
    , replayCacheItems :: List.List CacheItem.CacheItem
    } deriving (Eq,Generics.Generic,Show)

instance Binary.Binary Replay where
    get =
        Replay <$> Binary.get <*> Binary.get <*> Binary.get <*> Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get <*>
        Binary.get
    put replay = do
        replay & replaySize1 & Binary.put
        replay & replayCRC1 & Binary.put
        replay & replayVersion1 & Binary.put
        replay & replayVersion2 & Binary.put
        replay & replayLabel & Binary.put
        replay & replayProperties & Binary.put
        replay & replaySize2 & Binary.put
        replay & replayCRC2 & Binary.put
        replay & replayLevels & Binary.put
        replay & replayKeyFrames & Binary.put
        replay & replayStream & Binary.put
        replay & replayMessages & Binary.put
        replay & replayMarks & Binary.put
        replay & replayPackages & Binary.put
        replay & replayObjects & Binary.put
        replay & replayNames & Binary.put
        replay & replayActors & Binary.put
        replay & replayCacheItems & Binary.put

instance DeepSeq.NFData Replay

instance Aeson.ToJSON Replay where
    toJSON =
        Aeson.genericToJSON
            Aeson.defaultOptions
            { Aeson.fieldLabelModifier = drop 6
            }