aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/json.scala
diff options
context:
space:
mode:
authorSergey Nastich <nastich@users.noreply.github.com>2018-09-20 13:43:28 -0400
committerGitHub <noreply@github.com>2018-09-20 13:43:28 -0400
commit388d631b75acec04440b8f285fd98d89bbd898db (patch)
treefddc1886d76c74956b26010e8b20c7670f475b7a /src/main/scala/xyz/driver/core/json.scala
parent3eb6a9e96bd8bf111490f390ea94a1c6d7677eff (diff)
downloaddriver-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.scala27
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"))
}
}