module Data.SMTP.Types.Mime where import Data.Default.Class mimeVersionHeaderName :: String mimeVersionHeaderName = "Mime-Version" data ContentTypeHeader = ContentTypeHeader ContentType ContentTypeParameters deriving (Read, Show, Eq, Ord) data ContentType = MultiPartMime MultiPartType | MessageMime MessageType | ContentMime String deriving (Read, Show, Eq, Ord) data MultiPartType = FcmtpDigest | OtherMultiPartType String deriving (Read, Show, Eq, Ord) data MessageType = FcmtpResource | OtherMessageType String deriving (Read, Show, Eq, Ord) data ContentTypeParameters = ContentTypeParameters { boundary :: Maybe String, charset :: Maybe String, other :: [(String, String)] } deriving (Read, Show, Eq, Ord) instance Default ContentType where def = ContentMime "text/plain" instance Default ContentTypeParameters where def = ContentTypeParameters Nothing Nothing [] instance Default ContentTypeHeader where def = ContentTypeHeader def def{charset=Just "us-ascii"} contentTypeHeaderName :: String contentTypeHeaderName = "Content-Type" data BodyEncoding = B7BitEncoding | B8BitEncoding | BBinaryEncoding deriving (Eq, Ord, Bounded, Enum) data TransferEncoding = IdentityEncoding BodyEncoding | QPEncodedBody | Base64EncodedBody deriving (Eq, Ord) instance Default TransferEncoding where def = IdentityEncoding B7BitEncoding instance Show BodyEncoding where show B7BitEncoding = "7BIT" show B8BitEncoding = "8BITMIME" show BBinaryEncoding = "BINARYMIME" instance Show TransferEncoding where show (IdentityEncoding b) = case b of B7BitEncoding -> "7bit" B8BitEncoding -> "8bit" BBinaryEncoding -> "binary" show QPEncodedBody = "quoted-printable" show Base64EncodedBody = "base64" transferEncodingHeaderName :: String transferEncodingHeaderName = "Content-Transfer-Encoding" transferToBody :: TransferEncoding -> BodyEncoding transferToBody (IdentityEncoding e) = e transferToBody _ = B7BitEncoding