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 = phoneUtil.parseAndKeepRawInput(phoneNumber, "US") if (!phoneUtil.isValidNumber(phone)) None else Some(PhoneNumber(phone.getCountryCode.toString, phone.getNationalNumber.toString)) } } }