/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.14.84 * User agent: apibuilder app.apibuilder.io/apicollective/apibuilder-spec/0.14.84/play_2_6 */ package io.apibuilder.spec.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.spec.v0.models.json._ implicit val jsonReadsApibuilderSpecMethod: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Method] = new play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Method] { def reads(js: play.api.libs.json.JsValue): play.api.libs.json.JsResult[io.apibuilder.spec.v0.models.Method] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.Method(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.Method(v)) case err: play.api.libs.json.JsError => (js \ "method").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.Method(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSpecMethod(obj: io.apibuilder.spec.v0.models.Method) = { play.api.libs.json.JsString(obj.toString) } def jsObjectMethod(obj: io.apibuilder.spec.v0.models.Method) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSpecMethod: play.api.libs.json.Writes[Method] = { (obj: io.apibuilder.spec.v0.models.Method) => { io.apibuilder.spec.v0.models.json.jsonWritesApibuilderSpecMethod(obj) } } implicit val jsonReadsApibuilderSpecParameterLocation : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.ParameterLocation] = new play.api.libs.json.Reads[io.apibuilder.spec.v0.models.ParameterLocation] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.spec.v0.models.ParameterLocation] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.ParameterLocation(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.ParameterLocation(v)) case err: play.api.libs.json.JsError => (js \ "parameter_location").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.ParameterLocation(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSpecParameterLocation(obj: io.apibuilder.spec.v0.models.ParameterLocation) = { play.api.libs.json.JsString(obj.toString) } def jsObjectParameterLocation(obj: io.apibuilder.spec.v0.models.ParameterLocation) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSpecParameterLocation: play.api.libs.json.Writes[ParameterLocation] = { (obj: io.apibuilder.spec.v0.models.ParameterLocation) => { io.apibuilder.spec.v0.models.json.jsonWritesApibuilderSpecParameterLocation(obj) } } implicit val jsonReadsApibuilderSpecResponseCodeOption : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.ResponseCodeOption] = new play.api.libs.json.Reads[io.apibuilder.spec.v0.models.ResponseCodeOption] { def reads( js: play.api.libs.json.JsValue ): play.api.libs.json.JsResult[io.apibuilder.spec.v0.models.ResponseCodeOption] = { js match { case v: play.api.libs.json.JsString => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.ResponseCodeOption(v.value)) case _ => { (js \ "value").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.ResponseCodeOption(v)) case err: play.api.libs.json.JsError => (js \ "response_code_option").validate[String] match { case play.api.libs.json.JsSuccess(v, _) => play.api.libs.json.JsSuccess(io.apibuilder.spec.v0.models.ResponseCodeOption(v)) case err: play.api.libs.json.JsError => err } } } } } } def jsonWritesApibuilderSpecResponseCodeOption(obj: io.apibuilder.spec.v0.models.ResponseCodeOption) = { play.api.libs.json.JsString(obj.toString) } def jsObjectResponseCodeOption(obj: io.apibuilder.spec.v0.models.ResponseCodeOption) = { play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(obj.toString)) } implicit def jsonWritesApibuilderSpecResponseCodeOption: play.api.libs.json.Writes[ResponseCodeOption] = { (obj: io.apibuilder.spec.v0.models.ResponseCodeOption) => { io.apibuilder.spec.v0.models.json.jsonWritesApibuilderSpecResponseCodeOption(obj) } } implicit def jsonReadsApibuilderSpecAnnotation: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Annotation] = { for { name <- (__ \ "name").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] } yield Annotation(name, description, deprecation) } def jsObjectAnnotation(obj: io.apibuilder.spec.v0.models.Annotation): 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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecAnnotation: play.api.libs.json.Writes[Annotation] = { (obj: io.apibuilder.spec.v0.models.Annotation) => { io.apibuilder.spec.v0.models.json.jsObjectAnnotation(obj) } } implicit def jsonReadsApibuilderSpecApidoc: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Apidoc] = { (__ \ "version").read[String].map { x => Apidoc(version = x) } } def jsObjectApidoc(obj: io.apibuilder.spec.v0.models.Apidoc): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "version" -> play.api.libs.json.JsString(obj.version) ) } implicit def jsonWritesApibuilderSpecApidoc: play.api.libs.json.Writes[Apidoc] = { (obj: io.apibuilder.spec.v0.models.Apidoc) => { io.apibuilder.spec.v0.models.json.jsObjectApidoc(obj) } } implicit def jsonReadsApibuilderSpecApplication : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Application] = { (__ \ "key").read[String].map { x => Application(key = x) } } def jsObjectApplication(obj: io.apibuilder.spec.v0.models.Application): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "key" -> play.api.libs.json.JsString(obj.key) ) } implicit def jsonWritesApibuilderSpecApplication: play.api.libs.json.Writes[Application] = { (obj: io.apibuilder.spec.v0.models.Application) => { io.apibuilder.spec.v0.models.json.jsObjectApplication(obj) } } implicit def jsonReadsApibuilderSpecAttribute: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Attribute] = { for { name <- (__ \ "name").read[String] value <- (__ \ "value").read[_root_.play.api.libs.json.JsObject] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] } yield Attribute(name, value, description, deprecation) } def jsObjectAttribute(obj: io.apibuilder.spec.v0.models.Attribute): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "value" -> obj.value ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecAttribute: play.api.libs.json.Writes[Attribute] = { (obj: io.apibuilder.spec.v0.models.Attribute) => { io.apibuilder.spec.v0.models.json.jsObjectAttribute(obj) } } implicit def jsonReadsApibuilderSpecBody: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Body] = { for { `type` <- (__ \ "type").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Body(`type`, description, deprecation, attributes) } def jsObjectBody(obj: io.apibuilder.spec.v0.models.Body): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "type" -> play.api.libs.json.JsString(obj.`type`), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecBody: play.api.libs.json.Writes[Body] = { (obj: io.apibuilder.spec.v0.models.Body) => { io.apibuilder.spec.v0.models.json.jsObjectBody(obj) } } implicit def jsonReadsApibuilderSpecContact: play.api.libs.json.Reads[io.apibuilder.spec.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.spec.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 jsonWritesApibuilderSpecContact: play.api.libs.json.Writes[Contact] = { (obj: io.apibuilder.spec.v0.models.Contact) => { io.apibuilder.spec.v0.models.json.jsObjectContact(obj) } } implicit def jsonReadsApibuilderSpecDeprecation : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Deprecation] = { (__ \ "description").readNullable[String].map { x => Deprecation(description = x) } } def jsObjectDeprecation(obj: io.apibuilder.spec.v0.models.Deprecation): 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)) }) } implicit def jsonWritesApibuilderSpecDeprecation: play.api.libs.json.Writes[Deprecation] = { (obj: io.apibuilder.spec.v0.models.Deprecation) => { io.apibuilder.spec.v0.models.json.jsObjectDeprecation(obj) } } implicit def jsonReadsApibuilderSpecEnum: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Enum] = { for { name <- (__ \ "name").read[String] plural <- (__ \ "plural").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] values <- (__ \ "values").read[Seq[io.apibuilder.spec.v0.models.EnumValue]] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Enum(name, plural, description, deprecation, values, attributes) } def jsObjectEnum(obj: io.apibuilder.spec.v0.models.Enum): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "plural" -> play.api.libs.json.JsString(obj.plural), "values" -> play.api.libs.json.Json.toJson(obj.values), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecEnum: play.api.libs.json.Writes[Enum] = { (obj: io.apibuilder.spec.v0.models.Enum) => { io.apibuilder.spec.v0.models.json.jsObjectEnum(obj) } } implicit def jsonReadsApibuilderSpecEnumValue: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.EnumValue] = { for { name <- (__ \ "name").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] value <- (__ \ "value").readNullable[String] } yield EnumValue(name, description, deprecation, attributes, value) } def jsObjectEnumValue(obj: io.apibuilder.spec.v0.models.EnumValue): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.value match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesApibuilderSpecEnumValue: play.api.libs.json.Writes[EnumValue] = { (obj: io.apibuilder.spec.v0.models.EnumValue) => { io.apibuilder.spec.v0.models.json.jsObjectEnumValue(obj) } } implicit def jsonReadsApibuilderSpecField: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Field] = { for { name <- (__ \ "name").read[String] `type` <- (__ \ "type").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] default <- (__ \ "default").readNullable[String] required <- (__ \ "required").read[Boolean] minimum <- (__ \ "minimum").readNullable[Long] maximum <- (__ \ "maximum").readNullable[Long] example <- (__ \ "example").readNullable[String] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] annotations <- (__ \ "annotations").read[Seq[String]] } yield Field( name, `type`, description, deprecation, default, required, minimum, maximum, example, attributes, annotations ) } def jsObjectField(obj: io.apibuilder.spec.v0.models.Field): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "type" -> play.api.libs.json.JsString(obj.`type`), "required" -> play.api.libs.json.JsBoolean(obj.required), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes), "annotations" -> play.api.libs.json.Json.toJson(obj.annotations) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> play.api.libs.json.JsString(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.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.example match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("example" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesApibuilderSpecField: play.api.libs.json.Writes[Field] = { (obj: io.apibuilder.spec.v0.models.Field) => { io.apibuilder.spec.v0.models.json.jsObjectField(obj) } } implicit def jsonReadsApibuilderSpecHeader: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Header] = { for { name <- (__ \ "name").read[String] `type` <- (__ \ "type").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] required <- (__ \ "required").read[Boolean] default <- (__ \ "default").readNullable[String] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Header(name, `type`, description, deprecation, required, default, attributes) } def jsObjectHeader(obj: io.apibuilder.spec.v0.models.Header): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "type" -> play.api.libs.json.JsString(obj.`type`), "required" -> play.api.libs.json.JsBoolean(obj.required), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesApibuilderSpecHeader: play.api.libs.json.Writes[Header] = { (obj: io.apibuilder.spec.v0.models.Header) => { io.apibuilder.spec.v0.models.json.jsObjectHeader(obj) } } implicit def jsonReadsApibuilderSpecImport: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Import] = { for { uri <- (__ \ "uri").read[String] namespace <- (__ \ "namespace").read[String] organization <- (__ \ "organization").read[io.apibuilder.spec.v0.models.Organization] application <- (__ \ "application").read[io.apibuilder.spec.v0.models.Application] version <- (__ \ "version").read[String] enums <- (__ \ "enums").read[Seq[String]] unions <- (__ \ "unions").read[Seq[String]] models <- (__ \ "models").read[Seq[String]] annotations <- (__ \ "annotations").read[Seq[io.apibuilder.spec.v0.models.Annotation]] } yield Import(uri, namespace, organization, application, version, enums, unions, models, annotations) } def jsObjectImport(obj: io.apibuilder.spec.v0.models.Import): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "uri" -> play.api.libs.json.JsString(obj.uri), "namespace" -> play.api.libs.json.JsString(obj.namespace), "organization" -> io.apibuilder.spec.v0.models.json.jsObjectOrganization(obj.organization), "application" -> io.apibuilder.spec.v0.models.json.jsObjectApplication(obj.application), "version" -> play.api.libs.json.JsString(obj.version), "enums" -> play.api.libs.json.Json.toJson(obj.enums), "unions" -> play.api.libs.json.Json.toJson(obj.unions), "models" -> play.api.libs.json.Json.toJson(obj.models), "annotations" -> play.api.libs.json.Json.toJson(obj.annotations) ) } implicit def jsonWritesApibuilderSpecImport: play.api.libs.json.Writes[Import] = { (obj: io.apibuilder.spec.v0.models.Import) => { io.apibuilder.spec.v0.models.json.jsObjectImport(obj) } } implicit def jsonReadsApibuilderSpecInfo: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Info] = { for { license <- (__ \ "license").readNullable[io.apibuilder.spec.v0.models.License] contact <- (__ \ "contact").readNullable[io.apibuilder.spec.v0.models.Contact] } yield Info(license, contact) } def jsObjectInfo(obj: io.apibuilder.spec.v0.models.Info): play.api.libs.json.JsObject = { (obj.license match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("license" -> io.apibuilder.spec.v0.models.json.jsObjectLicense(x)) }) ++ (obj.contact match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("contact" -> io.apibuilder.spec.v0.models.json.jsObjectContact(x)) }) } implicit def jsonWritesApibuilderSpecInfo: play.api.libs.json.Writes[Info] = { (obj: io.apibuilder.spec.v0.models.Info) => { io.apibuilder.spec.v0.models.json.jsObjectInfo(obj) } } implicit def jsonReadsApibuilderSpecLicense: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.License] = { for { name <- (__ \ "name").read[String] url <- (__ \ "url").readNullable[String] } yield License(name, url) } def jsObjectLicense(obj: io.apibuilder.spec.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 jsonWritesApibuilderSpecLicense: play.api.libs.json.Writes[License] = { (obj: io.apibuilder.spec.v0.models.License) => { io.apibuilder.spec.v0.models.json.jsObjectLicense(obj) } } implicit def jsonReadsApibuilderSpecModel: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Model] = { for { name <- (__ \ "name").read[String] plural <- (__ \ "plural").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] fields <- (__ \ "fields").read[Seq[io.apibuilder.spec.v0.models.Field]] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Model(name, plural, description, deprecation, fields, attributes) } def jsObjectModel(obj: io.apibuilder.spec.v0.models.Model): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "plural" -> play.api.libs.json.JsString(obj.plural), "fields" -> play.api.libs.json.Json.toJson(obj.fields), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecModel: play.api.libs.json.Writes[Model] = { (obj: io.apibuilder.spec.v0.models.Model) => { io.apibuilder.spec.v0.models.json.jsObjectModel(obj) } } implicit def jsonReadsApibuilderSpecOperation: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Operation] = { for { method <- (__ \ "method").read[io.apibuilder.spec.v0.models.Method] path <- (__ \ "path").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] body <- (__ \ "body").readNullable[io.apibuilder.spec.v0.models.Body] parameters <- (__ \ "parameters").read[Seq[io.apibuilder.spec.v0.models.Parameter]] responses <- (__ \ "responses").read[Seq[io.apibuilder.spec.v0.models.Response]] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Operation(method, path, description, deprecation, body, parameters, responses, attributes) } def jsObjectOperation(obj: io.apibuilder.spec.v0.models.Operation): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "method" -> play.api.libs.json.JsString(obj.method.toString), "path" -> play.api.libs.json.JsString(obj.path), "parameters" -> play.api.libs.json.Json.toJson(obj.parameters), "responses" -> play.api.libs.json.Json.toJson(obj.responses), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.body match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("body" -> io.apibuilder.spec.v0.models.json.jsObjectBody(x)) }) } implicit def jsonWritesApibuilderSpecOperation: play.api.libs.json.Writes[Operation] = { (obj: io.apibuilder.spec.v0.models.Operation) => { io.apibuilder.spec.v0.models.json.jsObjectOperation(obj) } } implicit def jsonReadsApibuilderSpecOrganization : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Organization] = { (__ \ "key").read[String].map { x => Organization(key = x) } } def jsObjectOrganization(obj: io.apibuilder.spec.v0.models.Organization): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "key" -> play.api.libs.json.JsString(obj.key) ) } implicit def jsonWritesApibuilderSpecOrganization: play.api.libs.json.Writes[Organization] = { (obj: io.apibuilder.spec.v0.models.Organization) => { io.apibuilder.spec.v0.models.json.jsObjectOrganization(obj) } } implicit def jsonReadsApibuilderSpecParameter: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Parameter] = { for { name <- (__ \ "name").read[String] `type` <- (__ \ "type").read[String] location <- (__ \ "location").read[io.apibuilder.spec.v0.models.ParameterLocation] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] required <- (__ \ "required").read[Boolean] default <- (__ \ "default").readNullable[String] minimum <- (__ \ "minimum").readNullable[Long] maximum <- (__ \ "maximum").readNullable[Long] example <- (__ \ "example").readNullable[String] attributes <- (__ \ "attributes").readNullable[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Parameter( name, `type`, location, description, deprecation, required, default, minimum, maximum, example, attributes ) } def jsObjectParameter(obj: io.apibuilder.spec.v0.models.Parameter): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "type" -> play.api.libs.json.JsString(obj.`type`), "location" -> play.api.libs.json.JsString(obj.location.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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> play.api.libs.json.JsString(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.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.example match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("example" -> play.api.libs.json.JsString(x)) }) ++ (obj.attributes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("attributes" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesApibuilderSpecParameter: play.api.libs.json.Writes[Parameter] = { (obj: io.apibuilder.spec.v0.models.Parameter) => { io.apibuilder.spec.v0.models.json.jsObjectParameter(obj) } } implicit def jsonReadsApibuilderSpecResource: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Resource] = { for { `type` <- (__ \ "type").read[String] plural <- (__ \ "plural").read[String] path <- (__ \ "path").readNullable[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] operations <- (__ \ "operations").read[Seq[io.apibuilder.spec.v0.models.Operation]] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Resource(`type`, plural, path, description, deprecation, operations, attributes) } def jsObjectResource(obj: io.apibuilder.spec.v0.models.Resource): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "type" -> play.api.libs.json.JsString(obj.`type`), "plural" -> play.api.libs.json.JsString(obj.plural), "operations" -> play.api.libs.json.Json.toJson(obj.operations), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (obj.path match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("path" -> 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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecResource: play.api.libs.json.Writes[Resource] = { (obj: io.apibuilder.spec.v0.models.Resource) => { io.apibuilder.spec.v0.models.json.jsObjectResource(obj) } } implicit def jsonReadsApibuilderSpecResponse: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Response] = { for { code <- (__ \ "code").read[io.apibuilder.spec.v0.models.ResponseCode] `type` <- (__ \ "type").read[String] headers <- (__ \ "headers").readNullable[Seq[io.apibuilder.spec.v0.models.Header]] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] attributes <- (__ \ "attributes").readNullable[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Response(code, `type`, headers, description, deprecation, attributes) } def jsObjectResponse(obj: io.apibuilder.spec.v0.models.Response): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "code" -> io.apibuilder.spec.v0.models.json.jsObjectResponseCode(obj.code), "type" -> play.api.libs.json.JsString(obj.`type`) ) ++ (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.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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.attributes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("attributes" -> play.api.libs.json.Json.toJson(x)) }) } implicit def jsonWritesApibuilderSpecResponse: play.api.libs.json.Writes[Response] = { (obj: io.apibuilder.spec.v0.models.Response) => { io.apibuilder.spec.v0.models.json.jsObjectResponse(obj) } } implicit def jsonReadsApibuilderSpecService: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Service] = { for { apidoc <- (__ \ "apidoc").read[io.apibuilder.spec.v0.models.Apidoc] name <- (__ \ "name").read[String] organization <- (__ \ "organization").read[io.apibuilder.spec.v0.models.Organization] application <- (__ \ "application").read[io.apibuilder.spec.v0.models.Application] namespace <- (__ \ "namespace").read[String] version <- (__ \ "version").read[String] baseUrl <- (__ \ "base_url").readNullable[String] description <- (__ \ "description").readNullable[String] info <- (__ \ "info").read[io.apibuilder.spec.v0.models.Info] headers <- (__ \ "headers").read[Seq[io.apibuilder.spec.v0.models.Header]] imports <- (__ \ "imports").read[Seq[io.apibuilder.spec.v0.models.Import]] enums <- (__ \ "enums").read[Seq[io.apibuilder.spec.v0.models.Enum]] unions <- (__ \ "unions").read[Seq[io.apibuilder.spec.v0.models.Union]] models <- (__ \ "models").read[Seq[io.apibuilder.spec.v0.models.Model]] resources <- (__ \ "resources").read[Seq[io.apibuilder.spec.v0.models.Resource]] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] annotations <- (__ \ "annotations").read[Seq[io.apibuilder.spec.v0.models.Annotation]] } yield Service( apidoc, name, organization, application, namespace, version, baseUrl, description, info, headers, imports, enums, unions, models, resources, attributes, annotations ) } def jsObjectService(obj: io.apibuilder.spec.v0.models.Service): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "apidoc" -> io.apibuilder.spec.v0.models.json.jsObjectApidoc(obj.apidoc), "name" -> play.api.libs.json.JsString(obj.name), "organization" -> io.apibuilder.spec.v0.models.json.jsObjectOrganization(obj.organization), "application" -> io.apibuilder.spec.v0.models.json.jsObjectApplication(obj.application), "namespace" -> play.api.libs.json.JsString(obj.namespace), "version" -> play.api.libs.json.JsString(obj.version), "info" -> io.apibuilder.spec.v0.models.json.jsObjectInfo(obj.info), "headers" -> play.api.libs.json.Json.toJson(obj.headers), "imports" -> play.api.libs.json.Json.toJson(obj.imports), "enums" -> play.api.libs.json.Json.toJson(obj.enums), "unions" -> play.api.libs.json.Json.toJson(obj.unions), "models" -> play.api.libs.json.Json.toJson(obj.models), "resources" -> play.api.libs.json.Json.toJson(obj.resources), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes), "annotations" -> play.api.libs.json.Json.toJson(obj.annotations) ) ++ (obj.baseUrl match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("base_url" -> 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)) }) } implicit def jsonWritesApibuilderSpecService: play.api.libs.json.Writes[Service] = { (obj: io.apibuilder.spec.v0.models.Service) => { io.apibuilder.spec.v0.models.json.jsObjectService(obj) } } implicit def jsonReadsApibuilderSpecUnion: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Union] = { for { name <- (__ \ "name").read[String] plural <- (__ \ "plural").read[String] discriminator <- (__ \ "discriminator").readNullable[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] types <- (__ \ "types").read[Seq[io.apibuilder.spec.v0.models.UnionType]] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] } yield Union(name, plural, discriminator, description, deprecation, types, attributes) } def jsObjectUnion(obj: io.apibuilder.spec.v0.models.Union): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "plural" -> play.api.libs.json.JsString(obj.plural), "types" -> play.api.libs.json.Json.toJson(obj.types), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) } implicit def jsonWritesApibuilderSpecUnion: play.api.libs.json.Writes[Union] = { (obj: io.apibuilder.spec.v0.models.Union) => { io.apibuilder.spec.v0.models.json.jsObjectUnion(obj) } } implicit def jsonReadsApibuilderSpecUnionType: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.UnionType] = { for { `type` <- (__ \ "type").read[String] description <- (__ \ "description").readNullable[String] deprecation <- (__ \ "deprecation").readNullable[io.apibuilder.spec.v0.models.Deprecation] attributes <- (__ \ "attributes").read[Seq[io.apibuilder.spec.v0.models.Attribute]] default <- (__ \ "default").readNullable[Boolean] discriminatorValue <- (__ \ "discriminator_value").readNullable[String] } yield UnionType(`type`, description, deprecation, attributes, default, discriminatorValue) } def jsObjectUnionType(obj: io.apibuilder.spec.v0.models.UnionType): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "type" -> play.api.libs.json.JsString(obj.`type`), "attributes" -> play.api.libs.json.Json.toJson(obj.attributes) ) ++ (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.deprecation match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("deprecation" -> io.apibuilder.spec.v0.models.json.jsObjectDeprecation(x)) }) ++ (obj.default match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("default" -> play.api.libs.json.JsBoolean(x)) }) ++ (obj.discriminatorValue match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("discriminator_value" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesApibuilderSpecUnionType: play.api.libs.json.Writes[UnionType] = { (obj: io.apibuilder.spec.v0.models.UnionType) => { io.apibuilder.spec.v0.models.json.jsObjectUnionType(obj) } } implicit def jsonReadsApibuilderSpecResponseCodeInt : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.ResponseCodeInt] = { (__ \ "value").read[Int].map { x => ResponseCodeInt(value = x) } } implicit def jsonReadsApibuilderSpecResponseCode : play.api.libs.json.Reads[io.apibuilder.spec.v0.models.ResponseCode] = { ( (__ \ "integer").read(jsonReadsApibuilderSpecResponseCodeInt).asInstanceOf[play.api.libs.json.Reads[ResponseCode]] orElse (__ \ "response_code_option") .read(jsonReadsApibuilderSpecResponseCodeOption) .asInstanceOf[play.api.libs.json.Reads[ResponseCode]] orElse play.api.libs.json .Reads(jsValue => play.api.libs.json.JsSuccess(ResponseCodeUndefinedType(jsValue.toString))) .asInstanceOf[play.api.libs.json.Reads[ResponseCode]] ) } def jsObjectResponseCode(obj: io.apibuilder.spec.v0.models.ResponseCode): play.api.libs.json.JsObject = { obj match { case x: io.apibuilder.spec.v0.models.ResponseCodeInt => play.api.libs.json.Json .obj("integer" -> play.api.libs.json.Json.obj("value" -> play.api.libs.json.JsNumber(x.value))) case x: io.apibuilder.spec.v0.models.ResponseCodeOption => play.api.libs.json.Json.obj("response_code_option" -> play.api.libs.json.JsString(x.toString)) case x: io.apibuilder.spec.v0.models.ResponseCodeUndefinedType => { 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.spec.v0.models.ResponseCodeUndefinedType] should never be serialized") } } } } implicit def jsonWritesApibuilderSpecResponseCode: play.api.libs.json.Writes[ResponseCode] = { (obj: io.apibuilder.spec.v0.models.ResponseCode) => { io.apibuilder.spec.v0.models.json.jsObjectResponseCode(obj) } } }