/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.12.14 * User agent: apibuilder app.apibuilder.io/apicollective/apibuilder-swagger/0.12.14/play_2_6 */ package io.apibuilder.swagger.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 io.apibuilder.swagger.v0.models.json._ implicit val jsonReadsApibuilderSwaggerApiKeyInType : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ApiKeyInType] = new play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ApiKeyInType] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.swagger.v0.models.ApiKeyInType] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ApiKeyInType(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ApiKeyInType(v)) case _: play.api.libs.json.JsError => (js \ "api_key_in_type").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ApiKeyInType(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSwaggerApiKeyInType(obj: io.apibuilder.swagger.v0.models.ApiKeyInType) = { play.api.libs.json.JsString(obj.toString) } def jsObjectApiKeyInType(obj: io.apibuilder.swagger.v0.models.ApiKeyInType) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSwaggerApiKeyInType: play.api.libs.json.Writes[ApiKeyInType] = { (obj: io.apibuilder.swagger.v0.models.ApiKeyInType) => { io.apibuilder.swagger.v0.models.json.jsonWritesApibuilderSwaggerApiKeyInType(obj) } } implicit val jsonReadsApibuilderSwaggerCollectionFormatType : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.CollectionFormatType] = new play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.CollectionFormatType] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.swagger.v0.models.CollectionFormatType] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.CollectionFormatType(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.CollectionFormatType(v)) case _: play.api.libs.json.JsError => (js \ "collection_format_type").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.CollectionFormatType(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSwaggerCollectionFormatType(obj: io.apibuilder.swagger.v0.models.CollectionFormatType) = { play.api.libs.json.JsString(obj.toString) } def jsObjectCollectionFormatType(obj: io.apibuilder.swagger.v0.models.CollectionFormatType) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSwaggerCollectionFormatType: play.api.libs.json.Writes[CollectionFormatType] = { (obj: io.apibuilder.swagger.v0.models.CollectionFormatType) => { io.apibuilder.swagger.v0.models.json.jsonWritesApibuilderSwaggerCollectionFormatType(obj) } } implicit val jsonReadsApibuilderSwaggerFormatType : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.FormatType] = new play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.FormatType] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.swagger.v0.models.FormatType] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.FormatType(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.FormatType(v)) case _: play.api.libs.json.JsError => (js \ "format_type").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.FormatType(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSwaggerFormatType(obj: io.apibuilder.swagger.v0.models.FormatType) = { play.api.libs.json.JsString(obj.toString) } def jsObjectFormatType(obj: io.apibuilder.swagger.v0.models.FormatType) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSwaggerFormatType: play.api.libs.json.Writes[FormatType] = { (obj: io.apibuilder.swagger.v0.models.FormatType) => { io.apibuilder.swagger.v0.models.json.jsonWritesApibuilderSwaggerFormatType(obj) } } implicit val jsonReadsApibuilderSwaggerItemsType : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ItemsType] = new play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ItemsType] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.swagger.v0.models.ItemsType] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ItemsType(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ItemsType(v)) case _: play.api.libs.json.JsError => (js \ "items_type").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ItemsType(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSwaggerItemsType(obj: io.apibuilder.swagger.v0.models.ItemsType) = { play.api.libs.json.JsString(obj.toString) } def jsObjectItemsType(obj: io.apibuilder.swagger.v0.models.ItemsType) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSwaggerItemsType: play.api.libs.json.Writes[ItemsType] = { (obj: io.apibuilder.swagger.v0.models.ItemsType) => { io.apibuilder.swagger.v0.models.json.jsonWritesApibuilderSwaggerItemsType(obj) } } implicit val jsonReadsApibuilderSwaggerParameterInType : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ParameterInType] = new play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ParameterInType] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.swagger.v0.models.ParameterInType] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ParameterInType(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ParameterInType(v)) case _: play.api.libs.json.JsError => (js \ "parameter_in_type").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.ParameterInType(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSwaggerParameterInType(obj: io.apibuilder.swagger.v0.models.ParameterInType) = { play.api.libs.json.JsString(obj.toString) } def jsObjectParameterInType(obj: io.apibuilder.swagger.v0.models.ParameterInType) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSwaggerParameterInType: play.api.libs.json.Writes[ParameterInType] = { (obj: io.apibuilder.swagger.v0.models.ParameterInType) => { io.apibuilder.swagger.v0.models.json.jsonWritesApibuilderSwaggerParameterInType(obj) } } implicit val jsonReadsApibuilderSwaggerSecuritySchemeType : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.SecuritySchemeType] = new play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.SecuritySchemeType] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.swagger.v0.models.SecuritySchemeType] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.SecuritySchemeType(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.SecuritySchemeType(v)) case _: play.api.libs.json.JsError => (js \ "security_scheme_type").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.swagger.v0.models.SecuritySchemeType(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSwaggerSecuritySchemeType(obj: io.apibuilder.swagger.v0.models.SecuritySchemeType) = { play.api.libs.json.JsString(obj.toString) } def jsObjectSecuritySchemeType(obj: io.apibuilder.swagger.v0.models.SecuritySchemeType) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSwaggerSecuritySchemeType: play.api.libs.json.Writes[SecuritySchemeType] = { (obj: io.apibuilder.swagger.v0.models.SecuritySchemeType) => { io.apibuilder.swagger.v0.models.json.jsonWritesApibuilderSwaggerSecuritySchemeType(obj) } } implicit def jsonReadsApibuilderSwaggerContact: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Contact] = { for { name <- (__ \ "name").readNullable[String] url <- (__ \ "url").readNullable[String] email <- (__ \ "email").readNullable[String] } yield Contact(name, url, email) } def jsObjectContact(obj: io.apibuilder.swagger.v0.models.Contact): 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.url match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("url" -> play.api.libs.json.JsString(x)) }) ++ (obj.email match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("email" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesApibuilderSwaggerContact: play.api.libs.json.Writes[Contact] = { (obj: io.apibuilder.swagger.v0.models.Contact) => { io.apibuilder.swagger.v0.models.json.jsObjectContact(obj) } } implicit def jsonReadsApibuilderSwaggerExternalDocumentation : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ExternalDocumentation] = { for { description <- (__ \ "description").readNullable[String] url <- (__ \ "url").read[String] } yield ExternalDocumentation(description, url) } def jsObjectExternalDocumentation( obj: io.apibuilder.swagger.v0.models.ExternalDocumentation ): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "url" -> play.api.libs.json.JsString(obj.url) ) ++ (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)) }) } implicit def jsonWritesApibuilderSwaggerExternalDocumentation: play.api.libs.json.Writes[ExternalDocumentation] = { (obj: io.apibuilder.swagger.v0.models.ExternalDocumentation) => { io.apibuilder.swagger.v0.models.json.jsObjectExternalDocumentation(obj) } } implicit def jsonReadsApibuilderSwaggerHeader: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Header] = { for { description <- (__ \ "description").readNullable[String] `type` <- (__ \ "type").read[io.apibuilder.swagger.v0.models.ItemsType] format <- (__ \ "format").readNullable[io.apibuilder.swagger.v0.models.FormatType] items <- (__ \ "items").readNullable[io.apibuilder.swagger.v0.models.Items] collectionFormat <- (__ \ "collectionFormat").readNullable[io.apibuilder.swagger.v0.models.CollectionFormatType] default <- (__ \ "default").readNullable[_root_.play.api.libs.json.JsObject] maximum <- (__ \ "maximum").readNullable[Long] exclusiveMaximum <- (__ \ "exclusiveMaximum").readNullable[Boolean] minimum <- (__ \ "minimum").readNullable[Long] exclusiveMinimum <- (__ \ "exclusiveMinimum").readNullable[Boolean] maxLength <- (__ \ "maxLength").readNullable[Int] minLength <- (__ \ "minLength").readNullable[Int] pattern <- (__ \ "pattern").readNullable[String] maxItems <- (__ \ "maxItems").readNullable[Int] minItems <- (__ \ "minItems").readNullable[Int] uniqueItems <- (__ \ "uniqueItems").readNullable[Boolean] `enum` <- (__ \ "enum").readNullable[Seq[_root_.play.api.libs.json.JsObject]] multipleOf <- (__ \ "multipleOf").readNullable[Long] } yield Header( description, `type`, format, items, collectionFormat, default, maximum, exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, `enum`, multipleOf ) } def jsObjectHeader(obj: io.apibuilder.swagger.v0.models.Header): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "type" -> play.api.libs.json.JsString(obj.`type`.toString) ) ++ (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.format match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("format" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.items match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("items" -> io.apibuilder.swagger.v0.models.json.jsObjectItems(x)) }) ++ (obj.collectionFormat match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("collectionFormat" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> x) }) ++ (obj.maximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maximum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMaximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMaximum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.minimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minimum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMinimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMinimum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.maxLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.pattern match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("pattern" -> play.api.libs.json.JsString(x)) }) ++ (obj.maxItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.uniqueItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("uniqueItems" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.`enum` match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("enum" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.multipleOf match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("multipleOf" -> play.api.libs.json.JsNumber(x)) }) } implicit def jsonWritesApibuilderSwaggerHeader: play.api.libs.json.Writes[Header] = { (obj: io.apibuilder.swagger.v0.models.Header) => { io.apibuilder.swagger.v0.models.json.jsObjectHeader(obj) } } implicit def jsonReadsApibuilderSwaggerInfo: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Info] = { for { title <- (__ \ "title").read[String] description <- (__ \ "description").readNullable[String] termsOfService <- (__ \ "termsOfService").readNullable[String] contact <- (__ \ "contact").readNullable[io.apibuilder.swagger.v0.models.Contact] license <- (__ \ "license").readNullable[io.apibuilder.swagger.v0.models.License] version <- (__ \ "version").read[String] } yield Info(title, description, termsOfService, contact, license, version) } def jsObjectInfo(obj: io.apibuilder.swagger.v0.models.Info): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "title" -> play.api.libs.json.JsString(obj.title), "version" -> play.api.libs.json.JsString(obj.version) ) ++ (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.termsOfService match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("termsOfService" -> play.api.libs.json.JsString(x)) }) ++ (obj.contact match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("contact" -> io.apibuilder.swagger.v0.models.json.jsObjectContact(x)) }) ++ (obj.license match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("license" -> io.apibuilder.swagger.v0.models.json.jsObjectLicense(x)) }) } implicit def jsonWritesApibuilderSwaggerInfo: play.api.libs.json.Writes[Info] = { (obj: io.apibuilder.swagger.v0.models.Info) => { io.apibuilder.swagger.v0.models.json.jsObjectInfo(obj) } } implicit def jsonReadsApibuilderSwaggerItems: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Items] = { for { `type` <- (__ \ "type").read[io.apibuilder.swagger.v0.models.ItemsType] format <- (__ \ "format").readNullable[io.apibuilder.swagger.v0.models.FormatType] items <- (__ \ "items").lazyReadNullable(play.api.libs.json.Reads.of[io.apibuilder.swagger.v0.models.Items]) collectionFormat <- (__ \ "collectionFormat").readNullable[io.apibuilder.swagger.v0.models.CollectionFormatType] default <- (__ \ "default").readNullable[_root_.play.api.libs.json.JsObject] maximum <- (__ \ "maximum").readNullable[Long] exclusiveMaximum <- (__ \ "exclusiveMaximum").readNullable[Boolean] minimum <- (__ \ "minimum").readNullable[Long] exclusiveMinimum <- (__ \ "exclusiveMinimum").readNullable[Boolean] maxLength <- (__ \ "maxLength").readNullable[Int] minLength <- (__ \ "minLength").readNullable[Int] pattern <- (__ \ "pattern").readNullable[String] maxItems <- (__ \ "maxItems").readNullable[Int] minItems <- (__ \ "minItems").readNullable[Int] uniqueItems <- (__ \ "uniqueItems").readNullable[Boolean] `enum` <- (__ \ "enum").readNullable[Seq[_root_.play.api.libs.json.JsObject]] multipleOf <- (__ \ "multipleOf").readNullable[Long] } yield Items( `type`, format, items, collectionFormat, default, maximum, exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, `enum`, multipleOf ) } def jsObjectItems(obj: io.apibuilder.swagger.v0.models.Items): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "type" -> play.api.libs.json.JsString(obj.`type`.toString) ) ++ (obj.format match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("format" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.items match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("items" -> io.apibuilder.swagger.v0.models.json.jsObjectItems(x)) }) ++ (obj.collectionFormat match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("collectionFormat" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> x) }) ++ (obj.maximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maximum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMaximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMaximum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.minimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minimum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMinimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMinimum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.maxLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.pattern match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("pattern" -> play.api.libs.json.JsString(x)) }) ++ (obj.maxItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.uniqueItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("uniqueItems" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.`enum` match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("enum" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.multipleOf match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("multipleOf" -> play.api.libs.json.JsNumber(x)) }) } implicit def jsonWritesApibuilderSwaggerItems: play.api.libs.json.Writes[Items] = { (obj: io.apibuilder.swagger.v0.models.Items) => { io.apibuilder.swagger.v0.models.json.jsObjectItems(obj) } } implicit def jsonReadsApibuilderSwaggerLicense: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.License] = { for { name <- (__ \ "name").read[String] url <- (__ \ "url").readNullable[String] } yield License(name, url) } def jsObjectLicense(obj: io.apibuilder.swagger.v0.models.License): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name) ) ++ (obj.url match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("url" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesApibuilderSwaggerLicense: play.api.libs.json.Writes[License] = { (obj: io.apibuilder.swagger.v0.models.License) => { io.apibuilder.swagger.v0.models.json.jsObjectLicense(obj) } } implicit def jsonReadsApibuilderSwaggerOperation : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Operation] = { for { tags <- (__ \ "tags").readNullable[Seq[String]] summary <- (__ \ "summary").readNullable[String] description <- (__ \ "description").readNullable[String] externalDocs <- (__ \ "externalDocs").readNullable[io.apibuilder.swagger.v0.models.ExternalDocumentation] operationId <- (__ \ "operationId").readNullable[String] consumes <- (__ \ "consumes").readNullable[Seq[String]] produces <- (__ \ "produces").readNullable[Seq[String]] parameters <- (__ \ "parameters").readNullable[Seq[io.apibuilder.swagger.v0.models.ParameterOrRef]] responses <- (__ \ "responses").read[Map[String, io.apibuilder.swagger.v0.models.ResponseOrRef]] schemes <- (__ \ "schemes").readNullable[Seq[String]] deprecated <- (__ \ "deprecated").readNullable[Boolean] security <- (__ \ "security").readNullable[Seq[Map[String, Seq[String]]]] } yield Operation( tags, summary, description, externalDocs, operationId, consumes, produces, parameters, responses, schemes, deprecated, security ) } def jsObjectOperation(obj: io.apibuilder.swagger.v0.models.Operation): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "responses" -> play.api.libs.json.Json.toJson(obj.responses) ) ++ (obj.tags match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("tags" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.summary match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("summary" -> 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.externalDocs match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json .obj("externalDocs" -> io.apibuilder.swagger.v0.models.json.jsObjectExternalDocumentation(x)) }) ++ (obj.operationId match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("operationId" -> play.api.libs.json.JsString(x)) }) ++ (obj.consumes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("consumes" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.produces match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("produces" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.parameters match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("parameters" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.schemes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("schemes" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.deprecated match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecated" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.security match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("security" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesApibuilderSwaggerOperation: play.api.libs.json.Writes[Operation] = { (obj: io.apibuilder.swagger.v0.models.Operation) => { io.apibuilder.swagger.v0.models.json.jsObjectOperation(obj) } } implicit def jsonReadsApibuilderSwaggerParameter : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Parameter] = { for { name <- (__ \ "name").read[String] in <- (__ \ "in").read[io.apibuilder.swagger.v0.models.ParameterInType] description <- (__ \ "description").readNullable[String] required <- (__ \ "required").read[Boolean] schema <- (__ \ "schema").readNullable[io.apibuilder.swagger.v0.models.Schema] `type` <- (__ \ "type").readNullable[String] format <- (__ \ "format").readNullable[String] allowEmptyValue <- (__ \ "allowEmptyValue").readNullable[Boolean] items <- (__ \ "items").readNullable[io.apibuilder.swagger.v0.models.Items] collectionFormat <- (__ \ "collectionFormat").readNullable[io.apibuilder.swagger.v0.models.CollectionFormatType] default <- (__ \ "default").readNullable[_root_.play.api.libs.json.JsObject] maximum <- (__ \ "maximum").readNullable[Long] exclusiveMaximum <- (__ \ "exclusiveMaximum").readNullable[Boolean] minimum <- (__ \ "minimum").readNullable[Long] exclusiveMinimum <- (__ \ "exclusiveMinimum").readNullable[Boolean] maxLength <- (__ \ "maxLength").readNullable[Int] minLength <- (__ \ "minLength").readNullable[Int] pattern <- (__ \ "pattern").readNullable[String] maxItems <- (__ \ "maxItems").readNullable[Int] minItems <- (__ \ "minItems").readNullable[Int] uniqueItems <- (__ \ "uniqueItems").readNullable[Boolean] `enum` <- (__ \ "enum").readNullable[Seq[_root_.play.api.libs.json.JsObject]] multipleOf <- (__ \ "multipleOf").readNullable[Long] } yield Parameter( name, in, description, required, schema, `type`, format, allowEmptyValue, items, collectionFormat, default, maximum, exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, `enum`, multipleOf ) } def jsObjectParameter(obj: io.apibuilder.swagger.v0.models.Parameter): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "in" -> play.api.libs.json.JsString(obj.in.toString), "required" -> play.api.libs.json.JsBoolean(obj.required) ) ++ (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.schema match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("schema" -> io.apibuilder.swagger.v0.models.json.jsObjectSchema(x)) }) ++ (obj.`type` match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("type" -> play.api.libs.json.JsString(x)) }) ++ (obj.format match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("format" -> play.api.libs.json.JsString(x)) }) ++ (obj.allowEmptyValue match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("allowEmptyValue" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.items match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("items" -> io.apibuilder.swagger.v0.models.json.jsObjectItems(x)) }) ++ (obj.collectionFormat match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("collectionFormat" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> x) }) ++ (obj.maximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maximum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMaximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMaximum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.minimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minimum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMinimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMinimum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.maxLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.pattern match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("pattern" -> play.api.libs.json.JsString(x)) }) ++ (obj.maxItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.uniqueItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("uniqueItems" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.`enum` match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("enum" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.multipleOf match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("multipleOf" -> play.api.libs.json.JsNumber(x)) }) } implicit def jsonWritesApibuilderSwaggerParameter: play.api.libs.json.Writes[Parameter] = { (obj: io.apibuilder.swagger.v0.models.Parameter) => { io.apibuilder.swagger.v0.models.json.jsObjectParameter(obj) } } implicit def jsonReadsApibuilderSwaggerPathItem : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.PathItem] = { for { ref <- (__ \ "ref").readNullable[String] get <- (__ \ "get").readNullable[io.apibuilder.swagger.v0.models.Operation] put <- (__ \ "put").readNullable[io.apibuilder.swagger.v0.models.Operation] post <- (__ \ "post").readNullable[io.apibuilder.swagger.v0.models.Operation] delete <- (__ \ "delete").readNullable[io.apibuilder.swagger.v0.models.Operation] options <- (__ \ "options").readNullable[io.apibuilder.swagger.v0.models.Operation] head <- (__ \ "head").readNullable[io.apibuilder.swagger.v0.models.Operation] patch <- (__ \ "patch").readNullable[io.apibuilder.swagger.v0.models.Operation] parameters <- (__ \ "parameters").readNullable[Seq[io.apibuilder.swagger.v0.models.ParameterOrRef]] } yield PathItem(ref, get, put, post, delete, options, head, patch, parameters) } def jsObjectPathItem(obj: io.apibuilder.swagger.v0.models.PathItem): play.api.libs.json.JsObject = { (obj.ref match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("ref" -> play.api.libs.json.JsString(x)) }) ++ (obj.get match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("get" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.put match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("put" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.post match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("post" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.delete match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("delete" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.options match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("options" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.head match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("head" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.patch match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("patch" -> io.apibuilder.swagger.v0.models.json.jsObjectOperation(x)) }) ++ (obj.parameters match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("parameters" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesApibuilderSwaggerPathItem: play.api.libs.json.Writes[PathItem] = { (obj: io.apibuilder.swagger.v0.models.PathItem) => { io.apibuilder.swagger.v0.models.json.jsObjectPathItem(obj) } } implicit def jsonReadsApibuilderSwaggerReference : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Reference] = { (__ \ "ref").read[String].map { x => Reference(ref = x) } } def jsObjectReference(obj: io.apibuilder.swagger.v0.models.Reference): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "ref" -> play.api.libs.json.JsString(obj.ref) ) } implicit def jsonWritesApibuilderSwaggerReference: play.api.libs.json.Writes[Reference] = { (obj: io.apibuilder.swagger.v0.models.Reference) => { io.apibuilder.swagger.v0.models.json.jsObjectReference(obj) } } implicit def jsonReadsApibuilderSwaggerResponse : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Response] = { for { description <- (__ \ "description").read[String] schema <- (__ \ "schema").readNullable[io.apibuilder.swagger.v0.models.Schema] headers <- (__ \ "headers").readNullable[Map[String, io.apibuilder.swagger.v0.models.Header]] examples <- (__ \ "examples").readNullable[_root_.play.api.libs.json.JsObject] } yield Response(description, schema, headers, examples) } def jsObjectResponse(obj: io.apibuilder.swagger.v0.models.Response): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "description" -> play.api.libs.json.JsString(obj.description) ) ++ (obj.schema match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("schema" -> io.apibuilder.swagger.v0.models.json.jsObjectSchema(x)) }) ++ (obj.headers match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("headers" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.examples match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("examples" -> x) }) } implicit def jsonWritesApibuilderSwaggerResponse: play.api.libs.json.Writes[Response] = { (obj: io.apibuilder.swagger.v0.models.Response) => { io.apibuilder.swagger.v0.models.json.jsObjectResponse(obj) } } implicit def jsonReadsApibuilderSwaggerSchema: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Schema] = { for { ref <- (__ \ "ref").readNullable[String] format <- (__ \ "format").readNullable[io.apibuilder.swagger.v0.models.FormatType] title <- (__ \ "title").readNullable[String] description <- (__ \ "description").readNullable[String] default <- (__ \ "default").readNullable[_root_.play.api.libs.json.JsObject] multipleOf <- (__ \ "multipleOf").readNullable[Long] maximum <- (__ \ "maximum").readNullable[Long] exclusiveMaximum <- (__ \ "exclusiveMaximum").readNullable[Boolean] minimum <- (__ \ "minimum").readNullable[Long] exclusiveMinimum <- (__ \ "exclusiveMinimum").readNullable[Boolean] maxLength <- (__ \ "maxLength").readNullable[Int] minLength <- (__ \ "minLength").readNullable[Int] pattern <- (__ \ "pattern").readNullable[String] maxItems <- (__ \ "maxItems").readNullable[Int] minItems <- (__ \ "minItems").readNullable[Int] uniqueItems <- (__ \ "uniqueItems").readNullable[Boolean] maxProperties <- (__ \ "maxProperties").readNullable[Int] minProperties <- (__ \ "minProperties").readNullable[Int] required <- (__ \ "required").readNullable[Seq[String]] `enum` <- (__ \ "enum").readNullable[Seq[_root_.play.api.libs.json.JsObject]] `type` <- (__ \ "type").readNullable[Seq[String]] items <- (__ \ "items").lazyReadNullable(play.api.libs.json.Reads.of[io.apibuilder.swagger.v0.models.Schema]) allOf <- (__ \ "allOf").lazyReadNullable(play.api.libs.json.Reads.of[Seq[io.apibuilder.swagger.v0.models.Schema]]) properties <- (__ \ "properties").lazyReadNullable( play.api.libs.json.Reads.of[Map[String, io.apibuilder.swagger.v0.models.Schema]] ) additionalProperties <- (__ \ "additionalProperties").lazyReadNullable( play.api.libs.json.Reads.of[io.apibuilder.swagger.v0.models.Schema] ) discriminator <- (__ \ "discriminator").readNullable[String] readOnly <- (__ \ "readOnly").readNullable[Boolean] xml <- (__ \ "xml").readNullable[io.apibuilder.swagger.v0.models.Xml] externalDocs <- (__ \ "externalDocs").readNullable[io.apibuilder.swagger.v0.models.ExternalDocumentation] example <- (__ \ "example").readNullable[_root_.play.api.libs.json.JsObject] } yield Schema( ref, format, title, description, default, multipleOf, maximum, exclusiveMaximum, minimum, exclusiveMinimum, maxLength, minLength, pattern, maxItems, minItems, uniqueItems, maxProperties, minProperties, required, `enum`, `type`, items, allOf, properties, additionalProperties, discriminator, readOnly, xml, externalDocs, example ) } def jsObjectSchema(obj: io.apibuilder.swagger.v0.models.Schema): play.api.libs.json.JsObject = { (obj.ref match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("ref" -> play.api.libs.json.JsString(x)) }) ++ (obj.format match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("format" -> play.api.libs.json.JsString(x.toString)) }) ++ (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.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.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> x) }) ++ (obj.multipleOf match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("multipleOf" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.maximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maximum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMaximum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMaximum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.minimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minimum" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.exclusiveMinimum match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("exclusiveMinimum" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.maxLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minLength match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minLength" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.pattern match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("pattern" -> play.api.libs.json.JsString(x)) }) ++ (obj.maxItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minItems" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.uniqueItems match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("uniqueItems" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.maxProperties match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("maxProperties" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.minProperties match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("minProperties" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.required match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("required" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.`enum` match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("enum" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.`type` match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("type" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.items match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("items" -> io.apibuilder.swagger.v0.models.json.jsObjectSchema(x)) }) ++ (obj.allOf match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("allOf" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.properties match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("properties" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.additionalProperties match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("additionalProperties" -> io.apibuilder.swagger.v0.models.json.jsObjectSchema(x)) }) ++ (obj.discriminator match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("discriminator" -> play.api.libs.json.JsString(x)) }) ++ (obj.readOnly match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("readOnly" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.xml match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("xml" -> io.apibuilder.swagger.v0.models.json.jsObjectXml(x)) }) ++ (obj.externalDocs match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json .obj("externalDocs" -> io.apibuilder.swagger.v0.models.json.jsObjectExternalDocumentation(x)) }) ++ (obj.example match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("example" -> x) }) } implicit def jsonWritesApibuilderSwaggerSchema: play.api.libs.json.Writes[Schema] = { (obj: io.apibuilder.swagger.v0.models.Schema) => { io.apibuilder.swagger.v0.models.json.jsObjectSchema(obj) } } implicit def jsonReadsApibuilderSwaggerSecurityScheme : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.SecurityScheme] = { for { `type` <- (__ \ "type").read[io.apibuilder.swagger.v0.models.SecuritySchemeType] description <- (__ \ "description").readNullable[String] name <- (__ \ "name").readNullable[String] in <- (__ \ "in").readNullable[io.apibuilder.swagger.v0.models.ApiKeyInType] flow <- (__ \ "flow").readNullable[String] authorizationUrl <- (__ \ "authorizationUrl").readNullable[String] tokenUrl <- (__ \ "tokenUrl").readNullable[String] scopes <- (__ \ "scopes").readNullable[Map[String, String]] } yield SecurityScheme(`type`, description, name, in, flow, authorizationUrl, tokenUrl, scopes) } def jsObjectSecurityScheme(obj: io.apibuilder.swagger.v0.models.SecurityScheme): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "type" -> play.api.libs.json.JsString(obj.`type`.toString) ) ++ (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.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.in match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("in" -> play.api.libs.json.JsString(x.toString)) }) ++ (obj.flow match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("flow" -> play.api.libs.json.JsString(x)) }) ++ (obj.authorizationUrl match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("authorizationUrl" -> play.api.libs.json.JsString(x)) }) ++ (obj.tokenUrl match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("tokenUrl" -> play.api.libs.json.JsString(x)) }) ++ (obj.scopes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("scopes" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesApibuilderSwaggerSecurityScheme: play.api.libs.json.Writes[SecurityScheme] = { (obj: io.apibuilder.swagger.v0.models.SecurityScheme) => { io.apibuilder.swagger.v0.models.json.jsObjectSecurityScheme(obj) } } implicit def jsonReadsApibuilderSwaggerSwagger: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Swagger] = { for { swagger <- (__ \ "swagger").read[String] info <- (__ \ "info").read[io.apibuilder.swagger.v0.models.Info] host <- (__ \ "host").readNullable[String] basePath <- (__ \ "basePath").readNullable[String] schemes <- (__ \ "schemes").readNullable[Seq[String]] consumes <- (__ \ "consumes").readNullable[Seq[String]] produces <- (__ \ "produces").readNullable[Seq[String]] paths <- (__ \ "paths").read[Map[String, io.apibuilder.swagger.v0.models.PathItem]] definitions <- (__ \ "definitions").readNullable[Map[String, io.apibuilder.swagger.v0.models.Schema]] parameters <- (__ \ "parameters").readNullable[Map[String, io.apibuilder.swagger.v0.models.Parameter]] responses <- (__ \ "responses").readNullable[Map[String, io.apibuilder.swagger.v0.models.Response]] securityDefinitions <- (__ \ "securityDefinitions") .readNullable[Map[String, io.apibuilder.swagger.v0.models.SecurityScheme]] security <- (__ \ "security").readNullable[Map[String, String]] tags <- (__ \ "tags").readNullable[Seq[io.apibuilder.swagger.v0.models.Tag]] externalDocs <- (__ \ "externalDocs").readNullable[io.apibuilder.swagger.v0.models.ExternalDocumentation] } yield Swagger( swagger, info, host, basePath, schemes, consumes, produces, paths, definitions, parameters, responses, securityDefinitions, security, tags, externalDocs ) } def jsObjectSwagger(obj: io.apibuilder.swagger.v0.models.Swagger): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "swagger" -> play.api.libs.json.JsString(obj.swagger), "info" -> io.apibuilder.swagger.v0.models.json.jsObjectInfo(obj.info), "paths" -> play.api.libs.json.Json.toJson(obj.paths) ) ++ (obj.host match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("host" -> play.api.libs.json.JsString(x)) }) ++ (obj.basePath match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("basePath" -> play.api.libs.json.JsString(x)) }) ++ (obj.schemes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("schemes" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.consumes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("consumes" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.produces match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("produces" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.definitions match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("definitions" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.parameters match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("parameters" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.responses match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("responses" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.securityDefinitions match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("securityDefinitions" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.security match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("security" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.tags match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("tags" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.externalDocs match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json .obj("externalDocs" -> io.apibuilder.swagger.v0.models.json.jsObjectExternalDocumentation(x)) }) } implicit def jsonWritesApibuilderSwaggerSwagger: play.api.libs.json.Writes[Swagger] = { (obj: io.apibuilder.swagger.v0.models.Swagger) => { io.apibuilder.swagger.v0.models.json.jsObjectSwagger(obj) } } implicit def jsonReadsApibuilderSwaggerTag: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Tag] = { for { name <- (__ \ "name").read[String] description <- (__ \ "description").readNullable[String] externalDocs <- (__ \ "externalDocs").readNullable[io.apibuilder.swagger.v0.models.ExternalDocumentation] } yield Tag(name, description, externalDocs) } def jsObjectTag(obj: io.apibuilder.swagger.v0.models.Tag): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name) ) ++ (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.externalDocs match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json .obj("externalDocs" -> io.apibuilder.swagger.v0.models.json.jsObjectExternalDocumentation(x)) }) } implicit def jsonWritesApibuilderSwaggerTag: play.api.libs.json.Writes[Tag] = { (obj: io.apibuilder.swagger.v0.models.Tag) => { io.apibuilder.swagger.v0.models.json.jsObjectTag(obj) } } implicit def jsonReadsApibuilderSwaggerXml: play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.Xml] = { for { name <- (__ \ "name").readNullable[String] namespace <- (__ \ "namespace").readNullable[String] prefix <- (__ \ "prefix").readNullable[String] attribute <- (__ \ "attribute").readNullable[Boolean] wrapped <- (__ \ "wrapped").readNullable[Boolean] } yield Xml(name, namespace, prefix, attribute, wrapped) } def jsObjectXml(obj: io.apibuilder.swagger.v0.models.Xml): 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.namespace match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("namespace" -> play.api.libs.json.JsString(x)) }) ++ (obj.prefix match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("prefix" -> play.api.libs.json.JsString(x)) }) ++ (obj.attribute match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("attribute" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.wrapped match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("wrapped" -> play.api.libs.json.JsBoolean(x)) }) } implicit def jsonWritesApibuilderSwaggerXml: play.api.libs.json.Writes[Xml] = { (obj: io.apibuilder.swagger.v0.models.Xml) => { io.apibuilder.swagger.v0.models.json.jsObjectXml(obj) } } implicit def jsonReadsApibuilderSwaggerParameterOrRef : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ParameterOrRef] = { ( (__ \ "parameter") .read(jsonReadsApibuilderSwaggerParameter) .asInstanceOf[play.api.libs.json.Reads[ParameterOrRef]] orElse (__ \ "reference") .read(jsonReadsApibuilderSwaggerReference) .asInstanceOf[play.api.libs.json.Reads[ParameterOrRef]] orElse play.api.libs.json .Reads(jsValue => play.api.libs.json.JsSuccess(ParameterOrRefUndefinedType(jsValue.toString))) .asInstanceOf[play.api.libs.json.Reads[ParameterOrRef]] ) } def jsObjectParameterOrRef(obj: io.apibuilder.swagger.v0.models.ParameterOrRef): play.api.libs.json.JsObject = { obj match { case x: io.apibuilder.swagger.v0.models.Parameter => play.api.libs.json.Json.obj("parameter" -> io.apibuilder.swagger.v0.models.json.jsObjectParameter(x)) case x: io.apibuilder.swagger.v0.models.Reference => play.api.libs.json.Json.obj("reference" -> io.apibuilder.swagger.v0.models.json.jsObjectReference(x)) case x: io.apibuilder.swagger.v0.models.ParameterOrRefUndefinedType => { scala.util.Try { // If we received a JSON object - echo it back. This is a workaround for a bug in // serialization for unions w/out discriminators where they sometimes have the // type wrapper and sometimes do not play.api.libs.json.Json.parse(x.description).asInstanceOf[play.api.libs.json.JsObject] } match { case scala.util.Success(o) => o case scala.util.Failure(_) => sys.error( "The type[io.apibuilder.swagger.v0.models.ParameterOrRefUndefinedType] should never be serialized" ) } } } } implicit def jsonWritesApibuilderSwaggerParameterOrRef: play.api.libs.json.Writes[ParameterOrRef] = { (obj: io.apibuilder.swagger.v0.models.ParameterOrRef) => { io.apibuilder.swagger.v0.models.json.jsObjectParameterOrRef(obj) } } implicit def jsonReadsApibuilderSwaggerResponseOrRef : play.api.libs.json.Reads[io.apibuilder.swagger.v0.models.ResponseOrRef] = { ( (__ \ "response").read(jsonReadsApibuilderSwaggerResponse).asInstanceOf[play.api.libs.json.Reads[ResponseOrRef]] orElse (__ \ "reference") .read(jsonReadsApibuilderSwaggerReference) .asInstanceOf[play.api.libs.json.Reads[ResponseOrRef]] orElse play.api.libs.json .Reads(jsValue => play.api.libs.json.JsSuccess(ResponseOrRefUndefinedType(jsValue.toString))) .asInstanceOf[play.api.libs.json.Reads[ResponseOrRef]] ) } def jsObjectResponseOrRef(obj: io.apibuilder.swagger.v0.models.ResponseOrRef): play.api.libs.json.JsObject = { obj match { case x: io.apibuilder.swagger.v0.models.Response => play.api.libs.json.Json.obj("response" -> io.apibuilder.swagger.v0.models.json.jsObjectResponse(x)) case x: io.apibuilder.swagger.v0.models.Reference => play.api.libs.json.Json.obj("reference" -> io.apibuilder.swagger.v0.models.json.jsObjectReference(x)) case x: io.apibuilder.swagger.v0.models.ResponseOrRefUndefinedType => { scala.util.Try { // If we received a JSON object - echo it back. This is a workaround for a bug in // serialization for unions w/out discriminators where they sometimes have the // type wrapper and sometimes do not play.api.libs.json.Json.parse(x.description).asInstanceOf[play.api.libs.json.JsObject] } match { case scala.util.Success(o) => o case scala.util.Failure(_) => sys.error("The type[io.apibuilder.swagger.v0.models.ResponseOrRefUndefinedType] should never be serialized") } } } } implicit def jsonWritesApibuilderSwaggerResponseOrRef: play.api.libs.json.Writes[ResponseOrRef] = { (obj: io.apibuilder.swagger.v0.models.ResponseOrRef) => { io.apibuilder.swagger.v0.models.json.jsObjectResponseOrRef(obj) } } }