diff options
author | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-18 15:00:26 +0700 |
---|---|---|
committer | Kseniya Tomskikh <ktomskih@datamonsters.co> | 2017-10-19 13:02:44 +0700 |
commit | 61d03bffcb6000268bb600d5336fb490056837f9 (patch) | |
tree | dbad0340d28dbe5835c80cf75f93d142a5327578 /src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala | |
parent | 0c8a7c3f1920e38a0606de91be5793c4f2a1d40a (diff) | |
download | rest-query-61d03bffcb6000268bb600d5336fb490056837f9.tar.gz rest-query-61d03bffcb6000268bb600d5336fb490056837f9.tar.bz2 rest-query-61d03bffcb6000268bb600d5336fb490056837f9.zip |
Created list response for each entity
Diffstat (limited to 'src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala')
-rw-r--r-- | src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala | 62 |
1 files changed, 0 insertions, 62 deletions
diff --git a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala b/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala deleted file mode 100644 index 4afe0ee..0000000 --- a/src/main/scala/xyz/driver/pdsuidomain/formats/json/sprayformats/ListResponse.scala +++ /dev/null @@ -1,62 +0,0 @@ -package xyz.driver.pdsuidomain.formats.json.sprayformats - -import java.time.LocalDateTime - -import spray.json._ -import spray.json.DefaultJsonProtocol._ -import xyz.driver.pdsuicommon.db.Pagination -import xyz.driver.pdsuidomain.formats.json.sprayformats.common._ - -final case class ListResponse[+T](items: Seq[T], meta: ListResponse.Meta) - -object ListResponse { - private val itemsField = "items" - private val metaField = "meta" - - final case class Meta(itemsCount: Int, pageNumber: Int, pageSize: Int, lastUpdate: Option[LocalDateTime]) - - object Meta { - def apply(itemsCount: Int, pagination: Pagination, lastUpdate: Option[LocalDateTime]): Meta = { - Meta( - itemsCount, - pagination.pageNumber, - pagination.pageSize, - lastUpdate - ) - } - } - - implicit val listResponseMetaFormat: RootJsonFormat[Meta] = jsonFormat4(Meta.apply) - - implicit def listResponseWriter[T: JsonWriter]: RootJsonWriter[ListResponse[T]] = - new RootJsonWriter[ListResponse[T]] { - override def write(listResponse: ListResponse[T]): JsValue = { - JsObject( - itemsField -> listResponse.items.map(_.toJson).toJson, - metaField -> listResponse.meta.toJson - ) - } - } - - implicit def listResponseReader[T: JsonReader]: RootJsonReader[ListResponse[T]] = - new RootJsonReader[ListResponse[T]] { - override def read(json: JsValue): ListResponse[T] = json match { - case JsObject(fields) => - val items = fields - .get(itemsField) - .map { - case JsArray(elements) => elements.map(_.convertTo[T])(collection.breakOut) - case x => deserializationError(s"Expected Array as JsArray, but got $x") - } - .getOrElse(deserializationError(s"ListResponse json object does not contain `$itemsField` field: $json")) - - val meta = fields - .get(metaField) - .map(_.convertTo[Meta]) - .getOrElse(deserializationError(s"ListResponse json object does not contain `$metaField` field: $json")) - - ListResponse(items, meta) - case _ => deserializationError(s"Expected ListResponse json object, but got $json") - } - } -} |