module Colog.Syslog.Message
       ( -- * Message type
         Message (..)
         -- * Lenses
       , severity
       , content
         -- * Formatting
       , fmtMessageFlat
       ) where

import Universum

import Colog.Syslog.Priority (Severity(..))

import Fmt ((|+), (|++|))
import Lens.Micro (Lens', lens)

-- | This Type contains the info strictly REQUIRED by a syslog message
data Message = Message
    { msgSeverity :: !Severity -- ^ message 'Severity'
    , msgContent  :: !Text     -- ^ message content
    } deriving (Show)

-- | 'Lens' for a 'Message' severity
severity :: Lens' Message Severity
severity = lens msgSeverity $ \message svr -> message { msgSeverity = svr }

-- | 'Lens' for a 'Message' content
content :: Lens' Message Text
content = lens msgContent $ \message cnt -> message { msgContent = cnt }

-- | Simple formatting function to 'Text'
fmtMessageFlat :: Message -> Text
fmtMessageFlat Message {..} = msgSeverity|++|msgContent|+""