aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorSergey Nastich <nastich@users.noreply.github.com>2018-08-21 18:17:13 -0400
committerGitHub <noreply@github.com>2018-08-21 18:17:13 -0400
commit4e903b7bd19dd9daf7172ab06fe2e52b6b1fdb60 (patch)
tree63f827beec87a3936d5e2486c3371125afd1498b /src/main
parent3db799ba16c669691a587bfe6df5199cc92bf4d4 (diff)
downloaddriver-core-4e903b7bd19dd9daf7172ab06fe2e52b6b1fdb60.tar.gz
driver-core-4e903b7bd19dd9daf7172ab06fe2e52b6b1fdb60.tar.bz2
driver-core-4e903b7bd19dd9daf7172ab06fe2e52b6b1fdb60.zip
Add json formats for country code and currency code (#197)v1.12.3
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/xyz/driver/core/json.scala11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala
index 959239e..e4a0cef 100644
--- a/src/main/scala/xyz/driver/core/json.scala
+++ b/src/main/scala/xyz/driver/core/json.scala
@@ -8,6 +8,7 @@ import akka.http.scaladsl.model.Uri.Path
import akka.http.scaladsl.server.PathMatcher.{Matched, Unmatched}
import akka.http.scaladsl.server._
import akka.http.scaladsl.unmarshalling.Unmarshaller
+import com.neovisionaries.i18n.{CountryCode, CurrencyCode}
import enumeratum._
import eu.timepit.refined.api.{Refined, Validate}
import eu.timepit.refined.collection.NonEmpty
@@ -19,6 +20,7 @@ import xyz.driver.core.domain.{Email, PhoneNumber}
import xyz.driver.core.rest.errors._
import xyz.driver.core.time.{Time, TimeOfDay}
+import scala.reflect.{ClassTag, classTag}
import scala.reflect.runtime.universe._
import scala.util.Try
@@ -234,6 +236,10 @@ object json {
JsString(obj.getHostAddress)
}
+ implicit val countryCodeFormat: JsonFormat[CountryCode] = javaEnumFormat[CountryCode]
+
+ implicit val currencyCodeFormat: JsonFormat[CurrencyCode] = javaEnumFormat[CurrencyCode]
+
object enumeratum {
def enumUnmarshaller[T <: EnumEntry](enum: Enum[T]): Unmarshaller[String, T] =
@@ -281,6 +287,11 @@ object json {
}
}
+ def javaEnumFormat[T <: java.lang.Enum[_]: ClassTag]: JsonFormat[T] = {
+ val values = classTag[T].runtimeClass.asInstanceOf[Class[T]].getEnumConstants
+ new EnumJsonFormat[T](values.map(v => v.name() -> v): _*)
+ }
+
class ValueClassFormat[T: TypeTag](writeValue: T => BigDecimal, create: BigDecimal => T) extends JsonFormat[T] {
def write(valueClass: T) = JsNumber(writeValue(valueClass))
def read(json: JsValue): T = json match {