Mime.hs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. module Data.SMTP.Types.Mime where
  2. import Data.Default.Class
  3. mimeVersionHeaderName :: String
  4. mimeVersionHeaderName = "Mime-Version"
  5. data ContentTypeHeader = ContentTypeHeader ContentType ContentTypeParameters deriving (Read, Show, Eq, Ord)
  6. data ContentType = MultiPartMime MultiPartType | MessageMime MessageType |
  7. ContentMime String deriving (Read, Show, Eq, Ord)
  8. data MultiPartType = FcmtpDigest | OtherMultiPartType String deriving (Read, Show, Eq, Ord)
  9. data MessageType = FcmtpResource | OtherMessageType String deriving (Read, Show, Eq, Ord)
  10. data ContentTypeParameters = ContentTypeParameters {
  11. boundary :: Maybe String, charset :: Maybe String, other :: [(String, String)]
  12. } deriving (Read, Show, Eq, Ord)
  13. instance Default ContentType where
  14. def = ContentMime "text/plain"
  15. instance Default ContentTypeParameters where
  16. def = ContentTypeParameters Nothing Nothing []
  17. instance Default ContentTypeHeader where
  18. def = ContentTypeHeader def def{charset=Just "us-ascii"}
  19. contentTypeHeaderName :: String
  20. contentTypeHeaderName = "Content-Type"
  21. data BodyEncoding = B7BitEncoding | B8BitEncoding | BBinaryEncoding deriving (Eq, Ord, Bounded, Enum)
  22. data TransferEncoding = IdentityEncoding BodyEncoding | QPEncodedBody | Base64EncodedBody deriving (Eq, Ord)
  23. instance Default TransferEncoding where
  24. def = IdentityEncoding B7BitEncoding
  25. instance Show BodyEncoding where
  26. show B7BitEncoding = "7BIT"
  27. show B8BitEncoding = "8BITMIME"
  28. show BBinaryEncoding = "BINARYMIME"
  29. instance Show TransferEncoding where
  30. show (IdentityEncoding b) = case b of
  31. B7BitEncoding -> "7bit"
  32. B8BitEncoding -> "8bit"
  33. BBinaryEncoding -> "binary"
  34. show QPEncodedBody = "quoted-printable"
  35. show Base64EncodedBody = "base64"
  36. transferEncodingHeaderName :: String
  37. transferEncodingHeaderName = "Content-Transfer-Encoding"
  38. transferToBody :: TransferEncoding -> BodyEncoding
  39. transferToBody (IdentityEncoding e) = e
  40. transferToBody _ = B7BitEncoding