natskell-0.3.0.0: internal/Types/Sub.hs
{-# LANGUAGE OverloadedStrings #-}
module Types.Sub where
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as LBS
import Transformers.Transformers (Transformer (..))
import Types.Msg (SID, Subject)
import Validators.Validators
data Sub = Sub
{ subject :: Subject
, queueGroup :: Maybe Subject
, sid :: SID
}
deriving (Eq, Show)
instance Transformer Sub where
transform subMsg =
case queueGroup subMsg of
Just queue -> LBS.fromChunks ["SUB ", subject subMsg, " ", queue, " ", sid subMsg, "\r\n"]
Nothing -> LBS.fromChunks ["SUB ", subject subMsg, " ", sid subMsg, "\r\n"]
instance Validator Sub where
validate s = do
validateSubject s
validateQueueGroup s
validateSid s
validateSubject :: Sub -> Either ByteString ()
validateSubject s
| subject s == "" = Left "explicit empty subject"
| otherwise = validateSubjectSyntax (subject s)
validateQueueGroup :: Sub -> Either ByteString ()
validateQueueGroup s
| queueGroup s == Just "" = Left "explicit empty queue group"
| otherwise = maybe (Right ()) validateQueueGroupSyntax (queueGroup s)
validateSid :: Sub -> Either ByteString ()
validateSid s
| sid s == "" = Left "explicit empty sid"
| otherwise = Right ()