packages feed

emailaddress 0.1.0.0 → 0.1.2.0

raw patch · 3 files changed

+51/−3 lines, 3 filesdep +persistentPVP ok

version bump matches the API change (PVP)

Dependencies added: persistent

API changes (from Hackage documentation)

+ Text.Email.Validate: emailAddressFromText :: Text -> Maybe EmailAddress
+ Text.Email.Validate: toText :: EmailAddress -> Text
+ Text.Email.Validate: validateFromText :: Text -> Either String EmailAddress

Files

emailaddress.cabal view
@@ -1,5 +1,5 @@ name:                emailaddress-version:             0.1.0.0+version:             0.1.2.0 synopsis:            Wrapper around email-validate library adding instances for common type classes. description:         Please see README.md homepage:            https://github.com/cdepillabout/emailaddress#readme@@ -22,6 +22,7 @@                      , bytestring >= 0.9                      , email-validate >= 2                      , opaleye >= 0.4+                     , persistent >= 2                      , postgresql-simple >= 0.5                      , product-profunctors >= 0.6                      , profunctors >= 0.5
src/Text/Email/Validate.hs view
@@ -26,8 +26,12 @@       -- * Create EmailAddress     , emailAddress     , validate+    , emailAddressFromText+    , validateFromText       -- * Check validity     , isValid+      -- * Convert to Text+    , toText       -- * Convert back to ByteString     , toByteString     , localPart@@ -39,5 +43,6 @@     ) where  import Text.Email.Validate.Internal-    ( EmailAddress, canonicalizeEmail, domainPart, emailAddress, isValid-    , localPart, toByteString, validate, unsafeEmailAddress )+    ( EmailAddress, canonicalizeEmail, domainPart, emailAddress+    , emailAddressFromText, isValid, localPart, toByteString, toText, validate+    , validateFromText, unsafeEmailAddress )
src/Text/Email/Validate/Internal.hs view
@@ -11,21 +11,30 @@     , EmailValidate.canonicalizeEmail     , emailAddress     , validate+    , emailAddressFromText+    , validateFromText     , unsafeEmailAddress     , localPart     , domainPart     , toByteString+    , toText     ) where +import Control.Monad ((<=<)) import Data.Aeson (FromJSON(..), ToJSON(..), Value(..), withText) import Data.Aeson.Types (Parser)+import Data.Bifunctor (first) import Data.ByteString (ByteString) import Data.Data (Data) import Data.Monoid ((<>)) import Data.Profunctor (lmap) import Data.Profunctor.Product.Default (Default(def))+import Data.Proxy (Proxy(Proxy))+import Data.Text (Text, pack) import Data.Text.Encoding (decodeUtf8With, encodeUtf8) import Data.Text.Encoding.Error (lenientDecode)+import Database.Persist (PersistField(..), PersistValue)+import Database.Persist.Sql (PersistFieldSql(..), SqlType) import Database.PostgreSQL.Simple.FromField     ( Conversion, FieldParser, FromField(..), ResultError(..), returnError ) import Data.Typeable (Typeable)@@ -78,6 +87,19 @@     toJSON :: EmailAddress -> Value     toJSON = String . decodeUtf8With lenientDecode . toByteString +-- | Treat 'EmailAddress' just like a 'Text' value.+instance PersistField EmailAddress where+    toPersistValue :: EmailAddress -> PersistValue+    toPersistValue = toPersistValue . toText++    fromPersistValue :: PersistValue -> Either Text EmailAddress+    fromPersistValue = first pack . validateFromText <=< fromPersistValue++-- | Treat 'EmailAddress' just like a 'Text' value.+instance PersistFieldSql EmailAddress where+    sqlType :: Proxy EmailAddress -> SqlType+    sqlType _ = sqlType (Proxy :: Proxy Text)+ -- | Wrapper around 'EmailValidate.validate'. -- -- >>> validate "foo@gmail.com"@@ -100,6 +122,14 @@ emailAddress :: ByteString -> Maybe EmailAddress emailAddress = fmap EmailAddress . EmailValidate.emailAddress +-- | Create an 'EmailAddress' from a 'Text' value.  See 'validate'.+validateFromText :: Text -> Either String EmailAddress+validateFromText = validate . encodeUtf8++-- | Create an 'EmailAddress' from a 'Text' value.  See 'emailAddress'.+emailAddressFromText :: Text -> Maybe EmailAddress+emailAddressFromText = emailAddress . encodeUtf8+ -- | Wrapper around 'EmailValidate.unsafeEmailAddress'. -- -- Unsafely create an 'EmailAddress' from a local part and a domain part.  The@@ -155,3 +185,15 @@ -- "foo@gmail.com" toByteString :: EmailAddress -> ByteString toByteString = EmailValidate.toByteString . unEmailAddress++-- | Convert an email address to 'Text'.+--+-- This assumes the 'EmailAddress' is UTF8-encoded.+--+-- >>> let email = unsafeEmailAddress "foo" "gmail.com"+-- >>> email+-- "foo@gmail.com"+-- >>> toText email+-- "foo@gmail.com"+toText :: EmailAddress -> Text+toText = decodeUtf8With lenientDecode . toByteString