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 -- type String -- subtype [(String, String)] -- parameters 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