aboutsummaryrefslogtreecommitdiff
path: root/jvm/src/main/scala/xyz/driver/core/domain.scala
diff options
context:
space:
mode:
Diffstat (limited to 'jvm/src/main/scala/xyz/driver/core/domain.scala')
-rw-r--r--jvm/src/main/scala/xyz/driver/core/domain.scala46
1 files changed, 46 insertions, 0 deletions
diff --git a/jvm/src/main/scala/xyz/driver/core/domain.scala b/jvm/src/main/scala/xyz/driver/core/domain.scala
new file mode 100644
index 0000000..fa3b5c4
--- /dev/null
+++ b/jvm/src/main/scala/xyz/driver/core/domain.scala
@@ -0,0 +1,46 @@
+package xyz.driver.core
+
+import com.google.i18n.phonenumbers.PhoneNumberUtil
+import scalaz.Equal
+import scalaz.std.string._
+import scalaz.syntax.equal._
+
+object domain {
+
+ final case class Email(username: String, domain: String) {
+ override def toString: String = username + "@" + domain
+ }
+
+ object Email {
+ implicit val emailEqual: Equal[Email] = Equal.equal {
+ case (left, right) => left.toString.toLowerCase === right.toString.toLowerCase
+ }
+
+ def parse(emailString: String): Option[Email] = {
+ Some(emailString.split("@")) collect {
+ case Array(username, domain) => Email(username, domain)
+ }
+ }
+ }
+
+ final case class PhoneNumber(countryCode: String = "1", number: String) {
+ override def toString: String = s"+$countryCode $number"
+ }
+
+ object PhoneNumber {
+
+ private val phoneUtil = PhoneNumberUtil.getInstance()
+
+ def parse(phoneNumber: String): Option[PhoneNumber] = {
+ val phone = scala.util.Try(phoneUtil.parseAndKeepRawInput(phoneNumber, "US")).toOption
+
+ val validated = phone match {
+ case None => None
+ case Some(pn) =>
+ if (!phoneUtil.isValidNumber(pn)) None
+ else Some(pn)
+ }
+ validated.map(pn => PhoneNumber(pn.getCountryCode.toString, pn.getNationalNumber.toString))
+ }
+ }
+}