module Network.HaskellNet.IMAP.Types
( MailboxName
, UID
, Charset
, MailboxInfo(..)
, Flag(..)
, Attribute(..)
, MboxUpdate(..)
, StatusCode(..)
, ServerResponse(..)
, MailboxStatus(..)
, RespDerivs(..)
, emptyMboxInfo
)
where
import Data.Word
( Word64
)
import Text.Packrat.Parse
( Result
, Derivs(..)
)
import Text.Packrat.Pos
( Pos
)
type MailboxName = String
type UID = Word64
type Charset = String
data MailboxInfo = MboxInfo { _mailbox :: MailboxName
, _exists :: Integer
, _recent :: Integer
, _flags :: [Flag]
, _permanentFlags :: [Flag]
, _isWritable :: Bool
, _isFlagWritable :: Bool
, _uidNext :: UID
, _uidValidity :: UID
}
deriving (Show, Eq)
data Flag = Seen
| Answered
| Flagged
| Deleted
| Draft
| Recent
| Keyword String
deriving Eq
instance Show Flag where
showsPrec d f = showParen (d > app_prec) $ showString $ showFlag f
where app_prec = 10
showFlag Seen = "\\Seen"
showFlag Answered = "\\Answered"
showFlag Flagged = "\\Flagged"
showFlag Deleted = "\\Deleted"
showFlag Draft = "\\Draft"
showFlag Recent = "\\Recent"
showFlag (Keyword s) = "\\" ++ s
data Attribute = Noinferiors
| Noselect
| Marked
| Unmarked
| OtherAttr String
deriving (Show, Eq)
data MboxUpdate = MboxUpdate { exists :: Maybe Integer
, recent :: Maybe Integer }
deriving (Show, Eq)
data StatusCode = ALERT
| BADCHARSET [Charset]
| CAPABILITY_sc [String]
| PARSE
| PERMANENTFLAGS [Flag]
| READ_ONLY
| READ_WRITE
| TRYCREATE
| UIDNEXT_sc UID
| UIDVALIDITY_sc UID
| UNSEEN_sc Integer
deriving (Eq, Show)
data ServerResponse = OK (Maybe StatusCode) String
| NO (Maybe StatusCode) String
| BAD (Maybe StatusCode) String
| PREAUTH (Maybe StatusCode) String
deriving (Eq, Show)
data MailboxStatus = MESSAGES
| RECENT
| UIDNEXT
| UIDVALIDITY
deriving (Show, Read, Eq)
data RespDerivs =
RespDerivs { dvFlags :: Result RespDerivs [Flag]
, advTag :: Result RespDerivs String
, advChar :: Result RespDerivs Char
, advPos :: Pos
}
instance Derivs RespDerivs where
dvChar = advChar
dvPos = advPos
emptyMboxInfo :: MailboxInfo
emptyMboxInfo = MboxInfo "" 0 0 [] [] False False 0 0