{-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-}
module Ros.Internal.Log where
import qualified Prelude as P
import Prelude ((.))
import qualified Data.Typeable as T
import Control.Applicative
import Ros.Internal.RosBinary
import Ros.Internal.Msg.MsgInfo
import Ros.Internal.Msg.HeaderSupport
import qualified Data.Word as Word
import qualified Ros.Internal.Header as Header

data Log = Log { header   :: Header.Header
               , level    :: Word.Word8
               , name     :: P.String
               , msg      :: P.String
               , file     :: P.String
               , function :: P.String
               , line     :: Word.Word32
               , topics   :: [P.String]
               } deriving (P.Show, P.Eq, P.Ord, T.Typeable)

instance RosBinary Log where
  put obj' = put (header obj') *> put (level obj') *> put (name obj') *> put (msg obj') *> put (file obj') *> put (function obj') *> put (line obj') *> putList (topics obj')
  get = Log <$> get <*> get <*> get <*> get <*> get <*> get <*> get <*> getList
  putMsg = putStampedMsg

instance HasHeader Log where
  getSequence = Header.seq . header
  getFrame = Header.frame_id . header
  getStamp = Header.stamp . header
  setSequence seq x' = x' { header = (header x') { Header.seq = seq } }

instance MsgInfo Log where
  sourceMD5 _ = "acffd30cd6b6de30f120938c17c593fb"
  msgTypeName _ = "rosgraph_msgs/Log"

dEBUG :: Word.Word8
dEBUG = 1

iNFO :: Word.Word8
iNFO = 2

wARN :: Word.Word8
wARN = 4

eRROR :: Word.Word8
eRROR = 8

fATAL :: Word.Word8
fATAL = 16