@@ -7,19 +7,18 @@ module Data.Email
77 , _EmailEmailAddress
88 ) where
99
10−import Control.Lens hiding (elements)
11−import Control.Monad
12−import Data.Aeson as JSON
13−import Data.ByteString
14−import Data.ByteString.Lens
15−import Data.String
16−import Data.Text as T
17−import Data.Text.Encoding (decodeUtf8)
18−import Data.Text.Lens
19−import Test.QuickCheck.Arbitrary
20−import Test.QuickCheck.Gen (elements)
21−import Text.Email.Parser
22−import Text.Email.Validate (EmailAddress, emailAddress)
10+import Control.Lens hiding (elements)
11+import Data.Aeson as JSON
12+import Data.ByteString
13+import Data.ByteString.Lens
14+import Data.String
15+import Data.Text as T
16+import Data.Text.Encoding (decodeUtf8)
17+import Data.Text.Lens
18+import Test.QuickCheck.Arbitrary
19+import Test.QuickCheck.Gen (elements)
20+import Text.Email.Extra (validateEmail)
21+import Text.Email.Parser
2322
2423newtype Email
2524 = Email
@@ -30,7 +29,7 @@ makePrisms ''Email
3029
3130-- | "Orphaned" prism.
3231_EmailAddress :: Prism' ByteString EmailAddress
33−_EmailAddress = prism' toByteString emailAddress
32+_EmailAddress = prism' toByteString (preview _Right . validateEmail)
3433
3534-- | Can be used like this:
3635--
@@ -51,15 +50,5 @@ instance Arbitrary Email where
5150 host <- elements ["example.com", "gmail.com" :: Text]
5251 return $ Email $ user <> host
5352
54−instance ToJSON EmailAddress where
55− toJSON = toJSON . view (re _EmailEmailAddress . _Email)
56−
57−instance FromJSON EmailAddress where
58− parseJSON = withText "EmailAddress" $ \s -> do
59− let ea = s ^? re _Email . _EmailEmailAddress
60− case ea of
61− Just x -> pure x
62− Nothing -> mzero
63−
6453toEmail :: EmailAddress -> Email
6554toEmail = Email . decodeUtf8 . toByteString