Resource.hs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. module Data.SMTP.Types.Resource where
  2. import Data.SMTP.Types.Seal
  3. import Data.SMTP.Types.URI
  4. --import Data.SMTP.Account (Account)
  5. import qualified Data.SMTP.Types.Mime as Mime
  6. --import qualified System.IO.Uniform as UIO
  7. import qualified Data.ByteString.Lazy as LBS
  8. import Data.Char
  9. data Header = Header (String, String) deriving (Read, Show, Eq, Ord)
  10. data RevisionInfo = RevisionInfo {
  11. current :: Revision,
  12. bases :: [Revision]
  13. } deriving (Eq, Ord, Read, Show)
  14. data Resource = Resource {
  15. mimeType :: Mime.ContentType,
  16. publicHeaders :: [Header],
  17. seal :: Maybe Seal,
  18. revision :: Maybe RevisionInfo,
  19. bodyData :: ResourceData}
  20. type ResourceData = LBS.ByteString
  21. getHeader :: [Header] -> String -> Maybe Header
  22. getHeader [] _ = Nothing
  23. getHeader (h@(Header (hk, _)) : hh) k
  24. | map toLower hk == map toLower k = Just h
  25. | otherwise = getHeader hh k
  26. getHeaderValue :: [Header] -> String -> Maybe String
  27. getHeaderValue hh h = case getHeader hh h of
  28. Just (Header (_, v)) -> Just v
  29. Nothing -> Nothing
  30. getMultiple :: [Header] -> String -> [Header]
  31. getMultiple hh h = filter (\(Header (k, _)) -> k == h) hh
  32. getMultipleValue :: [Header] -> String -> [String]
  33. getMultipleValue hh = map (\(Header (_, v)) -> v) . getMultiple hh
  34. revisionHeader :: String
  35. revisionHeader = "FCMTP-Revision"
  36. baseHeader :: String
  37. baseHeader = "FCMTP-Revision-Base"
  38. headersRevision :: [Header] -> Maybe RevisionInfo
  39. headersRevision hh = do
  40. curr <- Revision <$> getHeaderValue hh revisionHeader
  41. let bb = map Revision $ getMultipleValue hh baseHeader
  42. return $ RevisionInfo curr bb