module Text.Email.Validate
(isValid
,validate
,emailAddress
,canonicalizeEmail
,EmailAddress
,localPart
,domainPart
,toByteString)
where
import qualified Data.ByteString.Char8 as BS
import Data.ByteString (ByteString)
import Data.Attoparsec (parseOnly)
import Text.Email.Parser
emailAddress :: ByteString -> Maybe EmailAddress
emailAddress x =
case validate x of
Left _ -> Nothing
Right em -> Just em
canonicalizeEmail :: ByteString -> Maybe ByteString
canonicalizeEmail = fmap toByteString . emailAddress
isValid :: ByteString -> Bool
isValid x = let result = validate x in
either (const False) (const True) result
validate :: ByteString -> Either String EmailAddress
validate = parseOnly addrSpec