{-# Language TemplateHaskell #-} {-| Module : Client.Message Description : Messages to be added to buffers Copyright : (c) Eric Mertens, 2016 License : ISC Maintainer : emertens@gmail.com This module provides the type used to track messages just before they are added to a window. -} module Client.Message ( -- * Client message type ClientMessage(..) , msgNetwork , msgBody , msgTime -- * Message body type , MessageBody(..) , _IrcBody , _ErrorBody , _ExitBody -- * Client message operations , msgText ) where import Control.Lens import Data.Text (Text) import qualified Data.Text as Text import Data.Time (ZonedTime) import Irc.Message data MessageBody = IrcBody !IrcMsg | ErrorBody !String | ExitBody makePrisms ''MessageBody data ClientMessage = ClientMessage { _msgNetwork :: !Text , _msgBody :: !MessageBody , _msgTime :: !ZonedTime } makeLenses ''ClientMessage -- | Compute a searchable text representation of the message msgText :: MessageBody -> Text msgText (IrcBody irc) = ircMsgText irc msgText (ErrorBody str) = Text.pack str msgText ExitBody = Text.empty