module WASH.Mail.Message where
import WASH.Mail.HeaderField
data Message =
Singlepart
{ getHeaders :: [Header]
, getLines :: [String]
, getDecoded :: [Char]
, getContentType :: ContentType
, getContentTransferEncoding :: ContentTransferEncoding
, getContentDisposition :: ContentDisposition
}
| Multipart
{ getHeaders :: [Header]
, getLines :: [String]
, getParts :: [Message]
, getContentType :: ContentType
, getContentTransferEncoding :: ContentTransferEncoding
, getContentDisposition :: ContentDisposition
}
deriving Show
isSinglePart (Singlepart {}) = True
isSinglePart _ = False
isMultiPart (Multipart {}) = True
isMultiPart _ = False
showHeader (Header (n, v)) = n ++ ": " ++ v
showParameters c_parameters =
foldr (\(n,v) f -> showString " ;" .
showString n .
showString "=\"" .
showString v .
showChar '\"' . f) id c_parameters
data ContentType =
ContentType String
String
[(String, String)]
instance Show ContentType where
showsPrec i (ContentType c_type c_subtype c_parameters) =
showString "Content-Type: " .
showString c_type .
showChar '/' .
showString c_subtype .
showParameters c_parameters
data ContentTransferEncoding =
ContentTransferEncoding String
instance Show ContentTransferEncoding where
showsPrec i (ContentTransferEncoding cte) =
showString "Content-Transfer-Encoding: " .
showString cte
data ContentDisposition =
ContentDisposition String [(String, String)]
instance Show ContentDisposition where
showsPrec i (ContentDisposition cdn c_parameters) =
showString "Content-Disposition: " .
showString cdn .
showParameters c_parameters
data ContentID =
ContentID String
instance Show ContentID where
showsPrec i (ContentID cid) =
showString "Content-ID: " .
showString cid
data ContentDescription =
ContentDescription String
instance Show ContentDescription where
showsPrec i (ContentDescription txt) =
showString "Content-Description: " .
showString txt