git.iko.soy/typeable/email-validate-extra
on master help sign in
Move the Text.Email.Utils to a separate package (#4811)

* Fix for build * Create extra-email-validate * Rename the module and package * Minor edits

commit55e8ee2a7abe0f277065f175922ee2462ed5a877 authorRadaevaVera <65042772+RadaevaVera@users.noreply.github.com> dateThu 30 Jul 2020, 11:48 (6 years ago)
4 files changed+63
LICENSE+1 Setup.hs+2 email-validate-extra.cabal+19 src/Text/Email/Extra.hs+41
LICENSEnew file+1
@@ -0,0 +1 @@
1+Copyright © 2020, Antorica LLC
Setup.hsnew file+2
@@ -0,0 +1,2 @@
1+import Distribution.Simple
2+main = defaultMain
email-validate-extra.cabalnew file+19
@@ -0,0 +1,19 @@
1+cabal-version: 2.4
2+
3+name: email-validate-extra
4+version: 0.0.0.0
5+license-file: LICENSE
6+author: typeable.io
7+build-type: Simple
8+
9+library
10+ hs-source-dirs: src
11+ default-language: Haskell2010
12+ default-extensions: QuasiQuotes
13+ build-depends: base >=4.10 && <4.13
14+ , bytestring
15+ , email-validate
16+ , pcre-heavy
17+ , text
18+ exposed-modules: Text.Email.Extra
19+
src/Text/Email/Extra.hsnew file+41
@@ -0,0 +1,41 @@
1+{-# LANGUAGE CPP #-}
2+module Text.Email.Extra
3+ ( validateEmail
4+ , emailToText
5+ ) where
6+
7+import Control.Monad ((<=<))
8+import Data.ByteString (ByteString)
9+import Data.Text (Text)
10+import Data.Text as T (unpack)
11+import Data.Text.Encoding as T (decodeUtf8)
12+import Text.Email.Validate (EmailAddress)
13+import Text.Email.Validate as Email (validate, domainPart, toByteString)
14+
15+#ifndef ghcjs_HOST_OS
16+import Text.Regex.PCRE.Heavy (re, (=~))
17+
18+validateEmailDomain :: EmailAddress -> Either String EmailAddress
19+validateEmailDomain email =
20+ if emailDomain =~ domainRegex
21+ then Right email
22+ else Left $ errorMessage <> (T.unpack $ T.decodeUtf8 emailDomain)
23+ where
24+ emailDomain = Email.domainPart email
25+ domainRegex = [re|^[^.]+(?:\.[^.]+)*\.[^.]{2,}$|]
26+ errorMessage = "email domain is not valid: " :: String
27+#endif
28+
29+validateEmail :: ByteString -> Either String EmailAddress
30+#ifndef ghcjs_HOST_OS
31+validateEmail = validateEmailDomain <=< Email.validate
32+#else
33+validateEmail = error "validateEmail: unimplemented in GHCJS"
34+#endif
35+
36+emailToText :: EmailAddress -> Text
37+#ifndef ghcjs_HOST_OS
38+emailToText = T.decodeUtf8 . toByteString
39+#else
40+emailToText = error "emailToText: unimplemented in GHCJS"
41+#endif