diff options
author | Sergey Nastich <nastich@users.noreply.github.com> | 2018-09-20 13:43:28 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-09-20 13:43:28 -0400 |
commit | 388d631b75acec04440b8f285fd98d89bbd898db (patch) | |
tree | fddc1886d76c74956b26010e8b20c7670f475b7a /src/main/scala/xyz/driver/core/json.scala | |
parent | 3eb6a9e96bd8bf111490f390ea94a1c6d7677eff (diff) | |
download | driver-core-388d631b75acec04440b8f285fd98d89bbd898db.tar.gz driver-core-388d631b75acec04440b8f285fd98d89bbd898db.tar.bz2 driver-core-388d631b75acec04440b8f285fd98d89bbd898db.zip |
DFC-775 Improve PhoneNumber (backport from master without TN extensions) (#223)v1.14.4
Diffstat (limited to 'src/main/scala/xyz/driver/core/json.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/json.scala | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index d9319e9..d87e0c4 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -234,11 +234,30 @@ object json { } } + def PhoneInPath: PathMatcher1[PhoneNumber] = new PathMatcher1[PhoneNumber] { + def apply(path: Path) = path match { + case Path.Segment(segment, tail) => + PhoneNumber + .parse(segment) + .map(parsed => Matched(tail, Tuple1(parsed))) + .getOrElse(Unmatched) + case _ => Unmatched + } + } + implicit object phoneNumberFormat extends RootJsonFormat[PhoneNumber] { - private val basicFormat = jsonFormat2(PhoneNumber.apply) - override def write(obj: PhoneNumber): JsValue = basicFormat.write(obj) - override def read(json: JsValue): PhoneNumber = { - PhoneNumber.parse(basicFormat.read(json).toString).getOrElse(deserializationError("Invalid phone number")) + + private val basicFormat = jsonFormat2(PhoneNumber.apply) + + def write(obj: PhoneNumber): JsValue = basicFormat.write(obj) + + def read(json: JsValue): PhoneNumber = { + val maybePhone = json match { + case JsString(number) => PhoneNumber.parse(number) + case obj: JsObject => PhoneNumber.parse(basicFormat.read(obj).toString) + case _ => None + } + maybePhone.getOrElse(deserializationError("Invalid phone number")) } } |