aboutsummaryrefslogtreecommitdiff
path: root/jvm/src/main/scala/xyz/driver/core/domain/package.scala
blob: a76e83ce1fc4c4ad86765e1ea063bfeb5f90903f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package xyz.driver.core

import com.google.i18n.phonenumbers.PhoneNumberUtil

package object domain {

  private val phoneUtil = PhoneNumberUtil.getInstance()

  /** Enhances the PhoneNumber companion object with methods only available on the JVM. */
  implicit class JvmPhoneNumber(val number: PhoneNumber.type) extends AnyVal {
    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))
    }
  }

}