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