/** * Generated by API Builder - https://www.apibuilder.io * Service version: 1.0.1 * User agent: apibuilder app.apibuilder.io/gilt/gilt-public-api/1.0.1/play_2_6 */ package com.gilt.public.api.models package object json { import play.api.libs.json.{__, JsString, Writes} import play.api.libs.functional.syntax._ import play.api.libs.json.Writes._ import play.api.libs.json.Reads._ import com.gilt.public.api.models.json._ implicit val jsonReadsGiltPublicApiStore: play.api.libs.json.Reads[com.gilt.public.api.models.Store] = new play.api.libs.json.Reads[com.gilt.public.api.models.Store] { def reads(js: play.api.libs.json.JsValue): play.api.libs.json.JsResult[com.gilt.public.api.models.Store] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(com.gilt.public.api.models.Store(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(com.gilt.public.api.models.Store(v)) case _: play.api.libs.json.JsError => (js \ "store").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(com.gilt.public.api.models.Store(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesGiltPublicApiStore(obj: com.gilt.public.api.models.Store) = { play.api.libs.json.JsString(obj.toString) } def jsObjectStore(obj: com.gilt.public.api.models.Store) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesGiltPublicApiStore: play.api.libs.json.Writes[Store] = { (obj: com.gilt.public.api.models.Store) => { com.gilt.public.api.models.json.jsonWritesGiltPublicApiStore(obj) } } implicit def jsonReadsGiltPublicApiProduct: play.api.libs.json.Reads[com.gilt.public.api.models.Product] = { for { name <- (__ \ "name").read[String] product <- (__ \ "product").read[String] id <- (__ \ "id").read[Long] brand <- (__ \ "brand").read[String] url <- (__ \ "url").read[String] content <- (__ \ "content").read[com.gilt.public.api.models.ProductContent] categories <- (__ \ "categories").read[Seq[String]] imageUrls <- (__ \ "image_urls").read[_root_.play.api.libs.json.JsObject] skus <- (__ \ "skus").read[Seq[com.gilt.public.api.models.Sku]] } yield Product(name, product, id, brand, url, content, categories, imageUrls, skus) } def jsObjectProduct(obj: com.gilt.public.api.models.Product): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "product" -> play.api.libs.json.JsString(obj.product), "id" -> play.api.libs.json.JsNumber(obj.id), "brand" -> play.api.libs.json.JsString(obj.brand), "url" -> play.api.libs.json.JsString(obj.url), "content" -> com.gilt.public.api.models.json.jsObjectProductContent(obj.content), "categories" -> play.api.libs.json.Json.toJson(obj.categories), "image_urls" -> obj.imageUrls, "skus" -> play.api.libs.json.Json.toJson(obj.skus) ) } implicit def jsonWritesGiltPublicApiProduct: play.api.libs.json.Writes[Product] = { (obj: com.gilt.public.api.models.Product) => { com.gilt.public.api.models.json.jsObjectProduct(obj) } } implicit def jsonReadsGiltPublicApiProductCategories : play.api.libs.json.Reads[com.gilt.public.api.models.ProductCategories] = { (__ \ "categories").read[Seq[String]].map { x => ProductCategories(categories = x) } } def jsObjectProductCategories(obj: com.gilt.public.api.models.ProductCategories): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "categories" -> play.api.libs.json.Json.toJson(obj.categories) ) } implicit def jsonWritesGiltPublicApiProductCategories: play.api.libs.json.Writes[ProductCategories] = { (obj: com.gilt.public.api.models.ProductCategories) => { com.gilt.public.api.models.json.jsObjectProductCategories(obj) } } implicit def jsonReadsGiltPublicApiProductContent : play.api.libs.json.Reads[com.gilt.public.api.models.ProductContent] = { for { description <- (__ \ "description").readNullable[String] fitNotes <- (__ \ "fit_notes").readNullable[String] material <- (__ \ "material").readNullable[String] careInstructions <- (__ \ "care_instructions").readNullable[String] origin <- (__ \ "origin").readNullable[String] } yield ProductContent(description, fitNotes, material, careInstructions, origin) } def jsObjectProductContent(obj: com.gilt.public.api.models.ProductContent): play.api.libs.json.JsObject = { (obj.description match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("description" -> play.api.libs.json.JsString(x)) }) ++ (obj.fitNotes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("fit_notes" -> play.api.libs.json.JsString(x)) }) ++ (obj.material match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("material" -> play.api.libs.json.JsString(x)) }) ++ (obj.careInstructions match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("care_instructions" -> play.api.libs.json.JsString(x)) }) ++ (obj.origin match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("origin" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesGiltPublicApiProductContent: play.api.libs.json.Writes[ProductContent] = { (obj: com.gilt.public.api.models.ProductContent) => { com.gilt.public.api.models.json.jsObjectProductContent(obj) } } implicit def jsonReadsGiltPublicApiSaleDetail: play.api.libs.json.Reads[com.gilt.public.api.models.SaleDetail] = { for { name <- (__ \ "name").read[String] sale <- (__ \ "sale").read[String] saleKey <- (__ \ "sale_key").read[String] store <- (__ \ "store").read[com.gilt.public.api.models.Store] description <- (__ \ "description").readNullable[String] saleUrl <- (__ \ "sale_url").read[String] begins <- (__ \ "begins").read[_root_.java.time.OffsetDateTime] ends <- (__ \ "ends").readNullable[_root_.java.time.OffsetDateTime] imageUrls <- (__ \ "image_urls").read[_root_.play.api.libs.json.JsObject] products <- (__ \ "products").readNullable[Seq[String]] } yield SaleDetail(name, sale, saleKey, store, description, saleUrl, begins, ends, imageUrls, products) } def jsObjectSaleDetail(obj: com.gilt.public.api.models.SaleDetail): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "sale" -> play.api.libs.json.JsString(obj.sale), "sale_key" -> play.api.libs.json.JsString(obj.saleKey), "store" -> play.api.libs.json.JsString(obj.store.toString), "sale_url" -> play.api.libs.json.JsString(obj.saleUrl), "begins" -> play.api.libs.json.JsString(obj.begins.toString), "image_urls" -> obj.imageUrls ) ++ (obj.description match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("description" -> play.api.libs.json.JsString(x)) }) ++ (obj.ends match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("ends" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.products match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("products" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesGiltPublicApiSaleDetail: play.api.libs.json.Writes[SaleDetail] = { (obj: com.gilt.public.api.models.SaleDetail) => { com.gilt.public.api.models.json.jsObjectSaleDetail(obj) } } implicit def jsonReadsGiltPublicApiSaleList: play.api.libs.json.Reads[com.gilt.public.api.models.SaleList] = { (__ \ "sales").read[Seq[com.gilt.public.api.models.SaleDetail]].map { x => SaleList(sales = x) } } def jsObjectSaleList(obj: com.gilt.public.api.models.SaleList): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "sales" -> play.api.libs.json.Json.toJson(obj.sales) ) } implicit def jsonWritesGiltPublicApiSaleList: play.api.libs.json.Writes[SaleList] = { (obj: com.gilt.public.api.models.SaleList) => { com.gilt.public.api.models.json.jsObjectSaleList(obj) } } implicit def jsonReadsGiltPublicApiSku: play.api.libs.json.Reads[com.gilt.public.api.models.Sku] = { for { id <- (__ \ "id").read[Long] inventoryStatus <- (__ \ "inventory_status").read[String] msrpPrice <- (__ \ "msrp_price").read[BigDecimal] salePrice <- (__ \ "sale_price").read[BigDecimal] shippingSurcharge <- (__ \ "shipping_surcharge").readNullable[BigDecimal] attributes <- (__ \ "attributes").read[Seq[_root_.play.api.libs.json.JsObject]] } yield Sku(id, inventoryStatus, msrpPrice, salePrice, shippingSurcharge, attributes) } def jsObjectSku(obj: com.gilt.public.api.models.Sku): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "id" -> play.api.libs.json.JsNumber(obj.id), "inventory_status" -> play.api.libs.json.JsString(obj.inventoryStatus), "msrp_price" -> play.api.libs.json.JsNumber(obj.msrpPrice), "sale_price" -> play.api.libs.json.JsNumber(obj.salePrice), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (obj.shippingSurcharge match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("shipping_surcharge" -> play.api.libs.json.JsNumber(x)) }) } implicit def jsonWritesGiltPublicApiSku: play.api.libs.json.Writes[Sku] = { (obj: com.gilt.public.api.models.Sku) => { com.gilt.public.api.models.json.jsObjectSku(obj) } } }