packages feed

natskell-0.0.0.1: internal/Types/Unsub.hs

{-# LANGUAGE OverloadedStrings #-}

module Types.Unsub where

import           Data.ByteString           (ByteString)
import qualified Data.ByteString.Char8     as BC
import qualified Data.ByteString.Lazy      as LBS
import           Transformers.Transformers (Transformer (..))
import           Types.Msg                 (SID)
import           Validators.Validators

data Unsub = Unsub
               { sid    :: SID
               , maxMsg :: Maybe Int
               }
  deriving (Eq, Show)

instance Transformer Unsub where
  transform unsubMsg =
    case maxMsg unsubMsg of
      Just count -> LBS.fromChunks ["UNSUB ", sid unsubMsg, " ", BC.pack (show count), "\r\n"]
      Nothing -> LBS.fromChunks ["UNSUB ", sid unsubMsg, "\r\n"]

instance Validator Unsub where
  validate u = do
    validateSid u

validateSid :: Unsub -> Either ByteString ()
validateSid u
  | sid u == "" = Left "explicit empty sid"
  | otherwise = Right ()