natskell-1.0.0.1: internal/Types/Msg.hs
module Types.Msg
( Subject
, SID
, Payload
, Headers
, Msg (..)
, messageContentSize
) where
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
type Subject = ByteString
type SID = ByteString
type Payload = ByteString
type Headers = [(ByteString, ByteString)]
data Msg = Msg
{ subject :: Subject
, sid :: SID
, replyTo :: Maybe Subject
, payload :: Maybe Payload
, headers :: Maybe Headers
}
deriving (Eq, Show)
-- | Bytes retained for a NATS message body: encoded headers plus payload.
messageContentSize :: Maybe Headers -> Maybe Payload -> Int
messageContentSize maybeHeaders maybePayload =
fromInteger (min (toInteger (maxBound :: Int)) totalBytes)
where
totalBytes = headerBytes + maybe 0 (toInteger . BS.length) maybePayload
headerBytes :: Integer
headerBytes =
case maybeHeaders of
Nothing -> 0
Just headerPairs ->
12 + sum (map headerPairSize headerPairs)
headerPairSize (key, value) =
toInteger (BS.length key) + toInteger (BS.length value) + 3