aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Nastich <nastich@users.noreply.github.com>2018-04-17 17:22:13 -0400
committerGitHub <noreply@github.com>2018-04-17 17:22:13 -0400
commit979d16d518b05c9f702bb526388bd278b9c51cee (patch)
tree09d389de80c6882d58394e8513f3a267ecf476ba
parent137391fb1137c4d4986b47411ffcc57e4e9bacd0 (diff)
downloaddriver-core-979d16d518b05c9f702bb526388bd278b9c51cee.tar.gz
driver-core-979d16d518b05c9f702bb526388bd278b9c51cee.tar.bz2
driver-core-979d16d518b05c9f702bb526388bd278b9c51cee.zip
ListResponse and Unmarshallers improvementsv1.8.23
* Add an alternative `ListResponse` constructor allowing optional pagination * Unmarshal JsStrings from query parameters
-rw-r--r--src/main/scala/xyz/driver/core/json.scala6
-rw-r--r--src/main/scala/xyz/driver/core/rest/package.scala5
2 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 2d912d8..aeb3453 100644
--- a/src/main/scala/xyz/driver/core/json.scala
+++ b/src/main/scala/xyz/driver/core/json.scala
@@ -34,6 +34,12 @@ object json {
}
}
+ implicit def paramUnmarshaller[T](implicit reader: JsonReader[T]): Unmarshaller[String, T] =
+ Unmarshaller.firstOf(
+ Unmarshaller.strict((JsString(_: String)) andThen reader.read),
+ stringToValueUnmarshaller[T]
+ )
+
implicit def idFormat[T]: RootJsonFormat[Id[T]] = new RootJsonFormat[Id[T]] {
def write(id: Id[T]) = JsString(id.value)
diff --git a/src/main/scala/xyz/driver/core/rest/package.scala b/src/main/scala/xyz/driver/core/rest/package.scala
index 385a313..d8f004e 100644
--- a/src/main/scala/xyz/driver/core/rest/package.scala
+++ b/src/main/scala/xyz/driver/core/rest/package.scala
@@ -44,6 +44,11 @@ final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta)
object ListResponse {
+ def apply[T](items: Seq[T], size: Int, pagination: Option[Pagination]): ListResponse[T] =
+ ListResponse(
+ items = items,
+ meta = ListResponse.Meta(size, pagination.fold(1)(_.pageNumber), pagination.fold(size)(_.pageSize)))
+
final case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int)
object Meta {