Address.hs 821 B

123456789101112131415161718192021222324252627282930313233
  1. {-# LANGUAGE OverloadedStrings #-}
  2. module Data.SMTP.Types.Address where
  3. import qualified Data.SMTP.Account as Ac
  4. import qualified Data.SMTP.URI as URI
  5. import qualified Data.SMTP.Seal as Seal
  6. import qualified Data.Text as T
  7. import qualified Data.Attoparsec.Text as A
  8. import Text.StringConvert
  9. data Address = Address URI.URI
  10. deriving (Eq, Ord)
  11. instance Show Address where
  12. show (Address u) = show u
  13. headerName :: String
  14. headerName = "fCMTP-Address"
  15. host :: Address -> Ac.HostName
  16. host = Ac.domain . account
  17. account :: Address -> Ac.Account
  18. account (Address u) = URI.account u
  19. seal :: URI.URI -> Maybe Seal.Seal
  20. seal u = do
  21. se <- URI.getParameter "seal" u
  22. eitherToMaybe . A.parseOnly Seal.parseURISeal . T.pack $ se
  23. where
  24. eitherToMaybe (Left _) = Nothing
  25. eitherToMaybe (Right v) = Just v