module Text.Email.Text where import Data.Attoparsec.ByteString qualified as Attoparsec.B import Data.Text qualified as T import Data.Text.Encoding qualified as T import Text.Email.Parser toText :: EmailAddress -> T.Text toText :: EmailAddress -> Text toText EmailAddress emailAddress = case ByteString -> Either UnicodeException Text T.decodeUtf8' (ByteString -> Either UnicodeException Text) -> ByteString -> Either UnicodeException Text forall a b. (a -> b) -> a -> b $ EmailAddress -> ByteString toByteString EmailAddress emailAddress of Left UnicodeException err -> [Char] -> Text forall a. HasCallStack => [Char] -> a error ([Char] -> Text) -> [Char] -> Text forall a b. (a -> b) -> a -> b $ [Char] "Failed to decode EmailAddress: " [Char] -> [Char] -> [Char] forall a. Semigroup a => a -> a -> a <> UnicodeException -> [Char] forall a. Show a => a -> [Char] show UnicodeException err Right Text text -> Text text fromText :: T.Text -> Either String EmailAddress fromText :: Text -> Either [Char] EmailAddress fromText Text text = Parser EmailAddress -> ByteString -> Either [Char] EmailAddress forall a. Parser a -> ByteString -> Either [Char] a Attoparsec.B.parseOnly (Parser EmailAddress addrSpec Parser EmailAddress -> Parser ByteString () -> Parser EmailAddress forall a b. Parser ByteString a -> Parser ByteString b -> Parser ByteString a forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* Parser ByteString () forall t. Chunk t => Parser t () Attoparsec.B.endOfInput) (ByteString -> Either [Char] EmailAddress) -> ByteString -> Either [Char] EmailAddress forall a b. (a -> b) -> a -> b $ Text -> ByteString T.encodeUtf8 Text text fromTextUnsafe :: T.Text -> EmailAddress fromTextUnsafe :: Text -> EmailAddress fromTextUnsafe Text text = case Text -> Either [Char] EmailAddress fromText Text text of Left [Char] err -> [Char] -> EmailAddress forall a. HasCallStack => [Char] -> a error ([Char] -> EmailAddress) -> [Char] -> EmailAddress forall a b. (a -> b) -> a -> b $ [Char] "Failed to parse EmailAddress: " [Char] -> [Char] -> [Char] forall a. Semigroup a => a -> a -> a <> [Char] -> [Char] forall a. Show a => a -> [Char] show [Char] err Right EmailAddress emailAddress -> EmailAddress emailAddress