on 34f36f5 help sign in
1 file changed+24−12
since splitsnapshots
unifiedsplit
src/Data/Email.hs+24−12
src/Data/Email.hs+24−12
@@ -7,18 +7,20 @@ module Data.Email
77 , _EmailEmailAddress
88 ) where
99
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
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.Extra (validateEmail)
22+import Text.Email.Parser
23+import Text.Email.Validate (EmailAddress)
2224
2325newtype Email
2426 = Email
@@ -50,5 +52,15 @@ instance Arbitrary Email where
5052 host <- elements ["example.com", "gmail.com" :: Text]
5153 return $ Email $ user <> host
5254
55+instance ToJSON EmailAddress where
56+ toJSON = toJSON . view (re _EmailEmailAddress . _Email)
57+
58+instance FromJSON EmailAddress where
59+ parseJSON = withText "EmailAddress" $ \s -> do
60+ let ea = s ^? re _Email . _EmailEmailAddress
61+ case ea of
62+ Just x -> pure x
63+ Nothing -> mzero
64+
5365toEmail :: EmailAddress -> Email
5466toEmail = Email . decodeUtf8 . toByteString