{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE StrictData #-}

module Octane.Type.Message (Message(..)) where

import Data.Function ((&))

import qualified Control.DeepSeq as DeepSeq
import qualified Data.Binary as Binary
import qualified GHC.Generics as Generics
import qualified Octane.Type.Text as Text
import qualified Octane.Type.Word32 as Word32

-- | A debugging message. Replays do not have any of these anymore.
data Message = Message
    { frame :: Word32.Word32
    , name :: Text.Text
    , content :: Text.Text
    } deriving (Eq, Generics.Generic, Show)

instance Binary.Binary Message where
    get = Message <$> Binary.get <*> Binary.get <*> Binary.get
    put message = do
        message & frame & Binary.put
        message & name & Binary.put
        message & content & Binary.put

instance DeepSeq.NFData Message where