email-validate-1.0.0: src/Text/Email/Validate.hs
module Text.Email.Validate
(isValid
,validate
,emailAddress
,canonicalizeEmail
,EmailAddress -- re-exported
,localPart
,domainPart
,toByteString)
where
import qualified Data.ByteString.Char8 as BS
import Data.ByteString (ByteString)
import Data.Attoparsec (parseOnly)
import Text.Email.Parser
-- | Smart constructor for an email address
emailAddress :: ByteString -> Maybe EmailAddress
emailAddress x =
case validate x of
Left _ -> Nothing
Right em -> Just em
-- | Checks that an email is valid and returns a version of it
-- where comments and whitespace have been removed.
canonicalizeEmail :: ByteString -> Maybe ByteString
canonicalizeEmail = fmap toByteString . emailAddress
-- | Validates whether a particular string is an email address
-- according to RFC5322.
isValid :: ByteString -> Bool
isValid x = let result = validate x in
either (const False) (const True) result
-- | If you want to find out *why* a particular string is not
-- an email address, use this.
validate :: ByteString -> Either String EmailAddress
validate = parseOnly addrSpec