on master help sign in
email.cabal+4−3
since splitsnapshots
unifiedsplit
@@ -1,18 +1,19 @@
1+cabal-version: 2.4
1name: email
2name: email
2synopsis: Reusable Email data type.
3synopsis: Reusable Email data type.
3version: 0.0.0.1
4version: 0.0.0.1
4−license: AllRightsReserved
5+license-file: LICENSE
5license-file: LICENSE
6license-file: LICENSE
6author: Denis Redozubov
7author: Denis Redozubov
7maintainer: denis.redozubov@gmail.com
8maintainer: denis.redozubov@gmail.com
8category: Web
9category: Web
9build-type: Simple
10build-type: Simple
10−cabal-version: >=1.10
11library
11library
12− build-depends: base >=4.10 && <4.13
12+ build-depends: base >=4.10 && <5
13 , aeson
13 , aeson
14 , bytestring
14 , bytestring
15 , email-validate
15 , email-validate
16+ , email-validate-extra
16 , lens >= 4.13
17 , lens >= 4.13
17 , QuickCheck
18 , QuickCheck
18 , text >= 1.2.1.3
19 , text >= 1.2.1.3
src/Data/Email.hs+13−24
@@ -7,19 +7,18 @@ module Data.Email
7 , _EmailEmailAddress
7 , _EmailEmailAddress
8 ) where
8 ) where
9
9
10−import Control.Lens hiding (elements)
10+import Control.Lens hiding (elements)
11−import Control.Monad
12−import Data.Aeson as JSON
11+import Data.Aeson as JSON
13−import Data.ByteString
12+import Data.ByteString
14−import Data.ByteString.Lens
13+import Data.ByteString.Lens
15−import Data.String
14+import Data.String
16−import Data.Text as T
15+import Data.Text as T
17−import Data.Text.Encoding (decodeUtf8)
16+import Data.Text.Encoding (decodeUtf8)
18−import Data.Text.Lens
17+import Data.Text.Lens
19−import Test.QuickCheck.Arbitrary
18+import Test.QuickCheck.Arbitrary
20−import Test.QuickCheck.Gen (elements)
19+import Test.QuickCheck.Gen (elements)
20+import Text.Email.Extra (validateEmail)
21−import Text.Email.Parser
21+import Text.Email.Parser
22−import Text.Email.Validate (EmailAddress, emailAddress)
23
22
24newtype Email
23newtype Email
25 = Email
24 = Email
@@ -30,7 +29,7 @@ makePrisms ''Email
30
29
31-- | "Orphaned" prism.
30-- | "Orphaned" prism.
32_EmailAddress :: Prism' ByteString EmailAddress
31_EmailAddress :: Prism' ByteString EmailAddress
33−_EmailAddress = prism' toByteString emailAddress
32+_EmailAddress = prism' toByteString (preview _Right . validateEmail)
34
33
35-- | Can be used like this:
34-- | Can be used like this:
36--
35--
@@ -51,15 +50,5 @@ instance Arbitrary Email where
51 host <- elements ["example.com", "gmail.com" :: Text]
50 host <- elements ["example.com", "gmail.com" :: Text]
52 return $ Email $ user <> host
51 return $ Email $ user <> host
53
52
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−
64toEmail :: EmailAddress -> Email
53toEmail :: EmailAddress -> Email
65toEmail = Email . decodeUtf8 . toByteString
54toEmail = Email . decodeUtf8 . toByteString