/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.2.6 * User agent: apibuilder app.apibuilder.io/bombas/storeback-api/0.2.6/play_2_6 */ package bombas.storeback.api.v0.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 bombas.storeback.api.v0.models.json._ implicit def jsonReadsStorebackApiBreadcrumb: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Breadcrumb] = { for { name <- (__ \ "name").readNullable[String] link <- (__ \ "link").readNullable[String] position <- (__ \ "position").readNullable[Int] } yield Breadcrumb(name, link, position) } def jsObjectBreadcrumb(obj: bombas.storeback.api.v0.models.Breadcrumb): play.api.libs.json.JsObject = { (obj.name match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("name" -> play.api.libs.json.JsString(x)) }) ++ (obj.link match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("link" -> play.api.libs.json.JsString(x)) }) ++ (obj.position match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("position" -> play.api.libs.json.JsNumber(x)) }) } implicit def jsonWritesStorebackApiBreadcrumb: play.api.libs.json.Writes[Breadcrumb] = { (obj: bombas.storeback.api.v0.models.Breadcrumb) => { bombas.storeback.api.v0.models.json.jsObjectBreadcrumb(obj) } } implicit def jsonReadsStorebackApiColor: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Color] = { for { id <- (__ \ "id").readNullable[String] position <- (__ \ "position").readNullable[Int] name <- (__ \ "name").readNullable[String] fill <- (__ \ "fill").readNullable[String] } yield Color(id, position, name, fill) } def jsObjectColor(obj: bombas.storeback.api.v0.models.Color): play.api.libs.json.JsObject = { (obj.id match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("id" -> play.api.libs.json.JsString(x)) }) ++ (obj.position match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("position" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.name match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("name" -> play.api.libs.json.JsString(x)) }) ++ (obj.fill match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("fill" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiColor: play.api.libs.json.Writes[Color] = { (obj: bombas.storeback.api.v0.models.Color) => { bombas.storeback.api.v0.models.json.jsObjectColor(obj) } } implicit def jsonReadsStorebackApiDetail: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Detail] = { for { iconHandle <- (__ \ "icon_handle").readNullable[String] title <- (__ \ "title").readNullable[String] tech <- (__ \ "tech").readNullable[Seq[bombas.storeback.api.v0.models.Tech]] } yield Detail(iconHandle, title, tech) } def jsObjectDetail(obj: bombas.storeback.api.v0.models.Detail): play.api.libs.json.JsObject = { (obj.iconHandle match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("icon_handle" -> play.api.libs.json.JsString(x)) }) ++ (obj.title match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("title" -> play.api.libs.json.JsString(x)) }) ++ (obj.tech match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("tech" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesStorebackApiDetail: play.api.libs.json.Writes[Detail] = { (obj: bombas.storeback.api.v0.models.Detail) => { bombas.storeback.api.v0.models.json.jsObjectDetail(obj) } } implicit def jsonReadsStorebackApiImage: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Image] = { for { id <- (__ \ "id").readNullable[Int] position <- (__ \ "position").readNullable[Int] alt <- (__ \ "alt").readNullable[String] src <- (__ \ "src").readNullable[String] } yield Image(id, position, alt, src) } def jsObjectImage(obj: bombas.storeback.api.v0.models.Image): play.api.libs.json.JsObject = { (obj.id match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("id" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.position match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("position" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.alt match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("alt" -> play.api.libs.json.JsString(x)) }) ++ (obj.src match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("src" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiImage: play.api.libs.json.Writes[Image] = { (obj: bombas.storeback.api.v0.models.Image) => { bombas.storeback.api.v0.models.json.jsObjectImage(obj) } } implicit def jsonReadsStorebackApiPrice: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Price] = { for { msrp <- (__ \ "msrp").readNullable[String] price <- (__ \ "price").readNullable[String] isDiscounted <- (__ \ "isDiscounted").readNullable[Boolean] percentOff <- (__ \ "percentOff").readNullable[String] } yield Price(msrp, price, isDiscounted, percentOff) } def jsObjectPrice(obj: bombas.storeback.api.v0.models.Price): play.api.libs.json.JsObject = { (obj.msrp match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("msrp" -> play.api.libs.json.JsString(x)) }) ++ (obj.price match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("price" -> play.api.libs.json.JsString(x)) }) ++ (obj.isDiscounted match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("isDiscounted" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.percentOff match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("percentOff" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiPrice: play.api.libs.json.Writes[Price] = { (obj: bombas.storeback.api.v0.models.Price) => { bombas.storeback.api.v0.models.json.jsObjectPrice(obj) } } implicit def jsonReadsStorebackApiProduct: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Product] = { for { id <- (__ \ "id").readNullable[Long] title <- (__ \ "title").readNullable[String] handle <- (__ \ "handle").readNullable[String] description <- (__ \ "description").readNullable[String] descriptionHtml <- (__ \ "description_html").readNullable[String] itemCount <- (__ \ "item_count").readNullable[Int] productType <- (__ \ "product_type").readNullable[String] gender <- (__ \ "gender").readNullable[String] colors <- (__ \ "colors").readNullable[Seq[bombas.storeback.api.v0.models.Color]] sizes <- (__ \ "sizes").readNullable[Seq[bombas.storeback.api.v0.models.Size]] images <- (__ \ "images").readNullable[Seq[_root_.play.api.libs.json.JsObject]] variants <- (__ \ "variants").readNullable[Seq[bombas.storeback.api.v0.models.Variant]] breadcrumbs <- (__ \ "breadcrumbs").readNullable[Seq[bombas.storeback.api.v0.models.Breadcrumb]] details <- (__ \ "details").readNullable[Seq[bombas.storeback.api.v0.models.Detail]] createdAt <- (__ \ "created_at").readNullable[String] updatedAt <- (__ \ "updated_at").readNullable[String] } yield Product( id, title, handle, description, descriptionHtml, itemCount, productType, gender, colors, sizes, images, variants, breadcrumbs, details, createdAt, updatedAt ) } def jsObjectProduct(obj: bombas.storeback.api.v0.models.Product): play.api.libs.json.JsObject = { (obj.id match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("id" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.title match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("title" -> play.api.libs.json.JsString(x)) }) ++ (obj.handle match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("handle" -> play.api.libs.json.JsString(x)) }) ++ (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.descriptionHtml match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("description_html" -> play.api.libs.json.JsString(x)) }) ++ (obj.itemCount match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("item_count" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.productType match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("product_type" -> play.api.libs.json.JsString(x)) }) ++ (obj.gender match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("gender" -> play.api.libs.json.JsString(x)) }) ++ (obj.colors match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("colors" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.sizes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("sizes" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.images match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("images" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.variants match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("variants" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.breadcrumbs match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("breadcrumbs" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.details match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("details" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.createdAt match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("created_at" -> play.api.libs.json.JsString(x)) }) ++ (obj.updatedAt match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("updated_at" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiProduct: play.api.libs.json.Writes[Product] = { (obj: bombas.storeback.api.v0.models.Product) => { bombas.storeback.api.v0.models.json.jsObjectProduct(obj) } } implicit def jsonReadsStorebackApiShipping: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Shipping] = { for { requiresShipping <- (__ \ "requires_shipping").readNullable[Boolean] grams <- (__ \ "grams").readNullable[Int] weight <- (__ \ "weight").readNullable[Int] weightUnit <- (__ \ "weight_unit").readNullable[String] } yield Shipping(requiresShipping, grams, weight, weightUnit) } def jsObjectShipping(obj: bombas.storeback.api.v0.models.Shipping): play.api.libs.json.JsObject = { (obj.requiresShipping match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("requires_shipping" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.grams match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("grams" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.weight match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("weight" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.weightUnit match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("weight_unit" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiShipping: play.api.libs.json.Writes[Shipping] = { (obj: bombas.storeback.api.v0.models.Shipping) => { bombas.storeback.api.v0.models.json.jsObjectShipping(obj) } } implicit def jsonReadsStorebackApiSize: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Size] = { for { name <- (__ \ "name").readNullable[String] values <- (__ \ "values").readNullable[Seq[bombas.storeback.api.v0.models.SizeValues]] } yield Size(name, values) } def jsObjectSize(obj: bombas.storeback.api.v0.models.Size): play.api.libs.json.JsObject = { (obj.name match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("name" -> play.api.libs.json.JsString(x)) }) ++ (obj.values match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("values" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesStorebackApiSize: play.api.libs.json.Writes[Size] = { (obj: bombas.storeback.api.v0.models.Size) => { bombas.storeback.api.v0.models.json.jsObjectSize(obj) } } implicit def jsonReadsStorebackApiSizeValues: play.api.libs.json.Reads[bombas.storeback.api.v0.models.SizeValues] = { for { id <- (__ \ "id").readNullable[String] name <- (__ \ "name").readNullable[String] guidance <- (__ \ "guidance").readNullable[String] } yield SizeValues(id, name, guidance) } def jsObjectSizeValues(obj: bombas.storeback.api.v0.models.SizeValues): play.api.libs.json.JsObject = { (obj.id match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("id" -> play.api.libs.json.JsString(x)) }) ++ (obj.name match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("name" -> play.api.libs.json.JsString(x)) }) ++ (obj.guidance match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("guidance" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiSizeValues: play.api.libs.json.Writes[SizeValues] = { (obj: bombas.storeback.api.v0.models.SizeValues) => { bombas.storeback.api.v0.models.json.jsObjectSizeValues(obj) } } implicit def jsonReadsStorebackApiTech: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Tech] = { for { title <- (__ \ "title").readNullable[String] handle <- (__ \ "handle").readNullable[String] content <- (__ \ "content").readNullable[String] } yield Tech(title, handle, content) } def jsObjectTech(obj: bombas.storeback.api.v0.models.Tech): play.api.libs.json.JsObject = { (obj.title match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("title" -> play.api.libs.json.JsString(x)) }) ++ (obj.handle match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("handle" -> play.api.libs.json.JsString(x)) }) ++ (obj.content match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("content" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesStorebackApiTech: play.api.libs.json.Writes[Tech] = { (obj: bombas.storeback.api.v0.models.Tech) => { bombas.storeback.api.v0.models.json.jsObjectTech(obj) } } implicit def jsonReadsStorebackApiVariant: play.api.libs.json.Reads[bombas.storeback.api.v0.models.Variant] = { for { id <- (__ \ "id").readNullable[Long] productId <- (__ \ "product_id").readNullable[Long] sku <- (__ \ "sku").readNullable[String] title <- (__ \ "title").readNullable[String] isAvailable <- (__ \ "is_available").readNullable[Boolean] price <- (__ \ "price").readNullable[bombas.storeback.api.v0.models.Price] shipping <- (__ \ "shipping").readNullable[bombas.storeback.api.v0.models.Shipping] createdAt <- (__ \ "created_at").readNullable[String] updatedAt <- (__ \ "updated_at").readNullable[String] sizes <- (__ \ "sizes").readNullable[Seq[bombas.storeback.api.v0.models.Size]] } yield Variant(id, productId, sku, title, isAvailable, price, shipping, createdAt, updatedAt, sizes) } def jsObjectVariant(obj: bombas.storeback.api.v0.models.Variant): play.api.libs.json.JsObject = { (obj.id match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("id" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.productId match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("product_id" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.sku match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("sku" -> play.api.libs.json.JsString(x)) }) ++ (obj.title match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("title" -> play.api.libs.json.JsString(x)) }) ++ (obj.isAvailable match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("is_available" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.price match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("price" -> bombas.storeback.api.v0.models.json.jsObjectPrice(x)) }) ++ (obj.shipping match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("shipping" -> bombas.storeback.api.v0.models.json.jsObjectShipping(x)) }) ++ (obj.createdAt match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("created_at" -> play.api.libs.json.JsString(x)) }) ++ (obj.updatedAt match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("updated_at" -> play.api.libs.json.JsString(x)) }) ++ (obj.sizes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("sizes" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesStorebackApiVariant: play.api.libs.json.Writes[Variant] = { (obj: bombas.storeback.api.v0.models.Variant) => { bombas.storeback.api.v0.models.json.jsObjectVariant(obj) } } }