/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.16.53 * User agent: apibuilder app.apibuilder.io/apicollective/apibuilder-spec/0.16.53/play_2_2_client */ package io.apibuilder.spec.v0.models { sealed trait ResponseCode extends _root_.scala.Product with _root_.scala.Serializable /** * Used to indicate an API concern for a field that is specific to the field's * usage but not necessarily its data type. For example, you might use annotations * to mark that certain fields contain PII or PCI data and thus should not be * stored once processing is complete. Annotations communicate meaning to consumers * of an API and may also be used within an implementation or tooling; for example, * using static analysis tools to detect logging of sensitive data. */ final case class Annotation( name: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None ) final case class Apidoc( version: String ) /** * @param key Unique key identifying this application */ final case class Application( key: String ) /** * Represents an additional attribute that is attached to one of the objects in * apibuilder. The main use case is to capture additional metadata that doesn't * necessarily define the API but aids in code generation. Examples would be hints * for certain code generators about classes to extend, interfaces to implement, * annotations to add, names to assign to certain methods, etc. The specific * attributes will be applicable only in the context of the specific code * generators usings them. */ final case class Attribute( name: String, value: _root_.play.api.libs.json.JsObject, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None ) final case class Body( `type`: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil ) /** * Describes the primary contact for this service */ final case class Contact( name: _root_.scala.Option[String] = None, url: _root_.scala.Option[String] = None, email: _root_.scala.Option[String] = None ) /** * Indicates that this particular element is considered deprecated in the API. See * the description for details */ final case class Deprecation( description: _root_.scala.Option[String] = None ) final case class Enum( name: String, plural: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, values: Seq[io.apibuilder.spec.v0.models.EnumValue], attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil ) /** * @param value The actual string representation of this value. If not specified, defaults to * 'name' */ final case class EnumValue( name: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil, value: _root_.scala.Option[String] = None ) final case class Field( name: String, `type`: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, default: _root_.scala.Option[String] = None, required: Boolean, minimum: _root_.scala.Option[Long] = None, maximum: _root_.scala.Option[Long] = None, example: _root_.scala.Option[String] = None, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil, annotations: Seq[String] = Nil ) final case class Header( name: String, `type`: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, required: Boolean, default: _root_.scala.Option[String] = None, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil ) /** * An import is used to declare a dependency on another application. This allows * you to reference the models and or enums from that application in your own app. * * @param uri Full URI to the service.json file of the service we are importing * @param namespace the fully qualified namespace that we have imported * @param version The version of the service that we are importing * @param enums Enums made available by this import * @param interfaces Interfaces made available by this import * @param unions Unions made available by this import * @param models Models made available by this import * @param annotations Annotations made available by this import */ final case class Import( uri: String, namespace: String, organization: io.apibuilder.spec.v0.models.Organization, application: io.apibuilder.spec.v0.models.Application, version: String, enums: Seq[String] = Nil, interfaces: Seq[String] = Nil, unions: Seq[String] = Nil, models: Seq[String] = Nil, annotations: Seq[io.apibuilder.spec.v0.models.Annotation] = Nil ) /** * General metadata about this service */ final case class Info( license: _root_.scala.Option[io.apibuilder.spec.v0.models.License] = None, contact: _root_.scala.Option[io.apibuilder.spec.v0.models.Contact] = None ) final case class Interface( name: String, plural: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, fields: Seq[io.apibuilder.spec.v0.models.Field], attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil ) /** * Describes the software license contact for this service */ final case class License( name: String, url: _root_.scala.Option[String] = None ) final case class Model( name: String, plural: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, fields: Seq[io.apibuilder.spec.v0.models.Field], attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil, interfaces: Seq[String] = Nil ) /** * @param path The full path to this operation, relative to the service's base url. */ final case class Operation( method: io.apibuilder.spec.v0.models.Method, path: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, body: _root_.scala.Option[io.apibuilder.spec.v0.models.Body] = None, parameters: Seq[io.apibuilder.spec.v0.models.Parameter] = Nil, responses: Seq[io.apibuilder.spec.v0.models.Response] = Nil, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil ) /** * @param key Unique key identifying the organization that owns this service */ final case class Organization( key: String ) final case class Parameter( name: String, `type`: String, location: io.apibuilder.spec.v0.models.ParameterLocation, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, required: Boolean, default: _root_.scala.Option[String] = None, minimum: _root_.scala.Option[Long] = None, maximum: _root_.scala.Option[Long] = None, example: _root_.scala.Option[String] = None, attributes: _root_.scala.Option[Seq[io.apibuilder.spec.v0.models.Attribute]] = None ) /** * @param `type` The type of this resource will map to a defined model, enum, or union type * @param path The path to this specific resource. This was added in 2016 to help us * differentiate between the resource path and the operation path which can be * helpful when, for example, generating method names for operations. This field is * optional as some of our input formats (e.g. swagger) do not explicitly * differentiate resoure paths. */ final case class Resource( `type`: String, plural: String, path: _root_.scala.Option[String] = None, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, operations: Seq[io.apibuilder.spec.v0.models.Operation], attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil ) final case class Response( code: io.apibuilder.spec.v0.models.ResponseCode, `type`: String, headers: _root_.scala.Option[Seq[io.apibuilder.spec.v0.models.Header]] = None, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, attributes: _root_.scala.Option[Seq[io.apibuilder.spec.v0.models.Attribute]] = None ) /** * @param apidoc Documents that this is an apibuilder document, noting the specific version used. * Internally the version is then used for backwards compatibility when applicable * as new features are added to apibuilder. Note naming refers to the original name * of this project, 'apidoc', and is left here to avoid a breaking change for * preexisting services. * @param namespace Fully qualified namespace for this service */ final case class Service( @deprecated("This field is no longer used in API Builder and may be removed in the future.") apidoc: _root_.scala.Option[io.apibuilder.spec.v0.models.Apidoc] = None, name: String, organization: io.apibuilder.spec.v0.models.Organization, application: io.apibuilder.spec.v0.models.Application, namespace: String, version: String, baseUrl: _root_.scala.Option[String] = None, description: _root_.scala.Option[String] = None, info: io.apibuilder.spec.v0.models.Info, headers: Seq[io.apibuilder.spec.v0.models.Header] = Nil, imports: Seq[io.apibuilder.spec.v0.models.Import] = Nil, enums: Seq[io.apibuilder.spec.v0.models.Enum] = Nil, interfaces: Seq[io.apibuilder.spec.v0.models.Interface] = Nil, unions: Seq[io.apibuilder.spec.v0.models.Union] = Nil, models: Seq[io.apibuilder.spec.v0.models.Model] = Nil, resources: Seq[io.apibuilder.spec.v0.models.Resource] = Nil, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil, annotations: Seq[io.apibuilder.spec.v0.models.Annotation] = Nil ) /** * @param discriminator If a type discriminator is provided, serialization of these union types will * always contain a field named with the value of the discriminator that will * contain the name of the type. This provides a simpler (for many use cases) JSON * serialization/deserialization mechanism. When specified, apibuilder itself will * verify that none of the types in the union type itself contain a field with the * same name as the discriminator * @param types The names of the types that make up this union type */ final case class Union( name: String, plural: String, discriminator: _root_.scala.Option[String] = None, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, types: Seq[io.apibuilder.spec.v0.models.UnionType], attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil, interfaces: Seq[String] = Nil ) /** * Metadata about one of the types that is part of a union type * * @param `type` The name of a type (a primitive, model name, or enum name) that makes up this * union type * @param default If true, indicates that this type should be used as the default when * deserializing union types. This field is only used by union types that require a * discriminator and sets the default value for that discriminator during * deserialization. * @param discriminatorValue The discriminator value defines the string to use in the discriminator field to * identify this type. If not specified, the discriminator value will default to * the name of the type itself. */ final case class UnionType( `type`: String, description: _root_.scala.Option[String] = None, deprecation: _root_.scala.Option[io.apibuilder.spec.v0.models.Deprecation] = None, attributes: Seq[io.apibuilder.spec.v0.models.Attribute] = Nil, default: _root_.scala.Option[Boolean] = None, discriminatorValue: _root_.scala.Option[String] = None ) /** * Provides future compatibility in clients - in the future, when a type is added * to the union ResponseCode, it will need to be handled in the client code. This * implementation will deserialize these future types as an instance of this class. * * @param description Information about the type that we received that is undefined in this version of * the client. */ final case class ResponseCodeUndefinedType( description: String ) extends ResponseCode /** * Wrapper class to support the union types containing the datatype[integer] */ final case class ResponseCodeInt( value: Int ) extends ResponseCode sealed trait Method extends _root_.scala.Product with _root_.scala.Serializable object Method { case object Get extends Method { override def toString = "GET" } case object Post extends Method { override def toString = "POST" } case object Put extends Method { override def toString = "PUT" } case object Patch extends Method { override def toString = "PATCH" } case object Delete extends Method { override def toString = "DELETE" } case object Head extends Method { override def toString = "HEAD" } case object Connect extends Method { override def toString = "CONNECT" } case object Options extends Method { override def toString = "OPTIONS" } case object Trace extends Method { override def toString = "TRACE" } /** * UNDEFINED captures values that are sent either in error or * that were added by the server after this library was * generated. We want to make it easy and obvious for users of * this library to handle this case gracefully. * * We use all CAPS for the variable name to avoid collisions * with the camel cased values above. */ final case class UNDEFINED(override val toString: String) extends Method /** * all returns a list of all the valid, known values. We use * lower case to avoid collisions with the camel cased values * above. */ val all: scala.List[Method] = scala.List(Get, Post, Put, Patch, Delete, Head, Connect, Options, Trace) private val byName: Map[String, Method] = all.map(x => x.toString.toLowerCase -> x).toMap def apply(value: String): Method = fromString(value).getOrElse(UNDEFINED(value)) def fromString(value: String): _root_.scala.Option[Method] = byName.get(value.toLowerCase) } sealed trait ParameterLocation extends _root_.scala.Product with _root_.scala.Serializable object ParameterLocation { case object Path extends ParameterLocation { override def toString = "Path" } case object Query extends ParameterLocation { override def toString = "Query" } case object Form extends ParameterLocation { override def toString = "Form" } case object Header extends ParameterLocation { override def toString = "Header" } /** * UNDEFINED captures values that are sent either in error or * that were added by the server after this library was * generated. We want to make it easy and obvious for users of * this library to handle this case gracefully. * * We use all CAPS for the variable name to avoid collisions * with the camel cased values above. */ final case class UNDEFINED(override val toString: String) extends ParameterLocation /** * all returns a list of all the valid, known values. We use * lower case to avoid collisions with the camel cased values * above. */ val all: scala.List[ParameterLocation] = scala.List(Path, Query, Form, Header) private val byName: Map[String, ParameterLocation] = all.map(x => x.toString.toLowerCase -> x).toMap def apply(value: String): ParameterLocation = fromString(value).getOrElse(UNDEFINED(value)) def fromString(value: String): _root_.scala.Option[ParameterLocation] = byName.get(value.toLowerCase) } sealed trait ResponseCodeOption extends ResponseCode object ResponseCodeOption { case object Default extends ResponseCodeOption { override def toString = "Default" } /** * UNDEFINED captures values that are sent either in error or * that were added by the server after this library was * generated. We want to make it easy and obvious for users of * this library to handle this case gracefully. * * We use all CAPS for the variable name to avoid collisions * with the camel cased values above. */ final case class UNDEFINED(override val toString: String) extends ResponseCodeOption /** * all returns a list of all the valid, known values. We use * lower case to avoid collisions with the camel cased values * above. */ val all: scala.List[ResponseCodeOption] = scala.List(Default) private val byName: Map[String, ResponseCodeOption] = all.map(x => x.toString.toLowerCase -> x).toMap def apply(value: String): ResponseCodeOption = fromString(value).getOrElse(UNDEFINED(value)) def fromString(value: String): _root_.scala.Option[ResponseCodeOption] = byName.get(value.toLowerCase) } } package io.apibuilder.spec.v0.models { package object json { import play.api.libs.json.__ import play.api.libs.json.JsString import play.api.libs.json.Writes import play.api.libs.functional.syntax._ import io.apibuilder.spec.v0.models.json._ private[v0] implicit val jsonReadsUUID: play.api.libs.json.Reads[_root_.java.util.UUID] = __.read[String].map { str => _root_.java.util.UUID.fromString(str) } private[v0] implicit val jsonWritesUUID: play.api.libs.json.Writes[_root_.java.util.UUID] = (x: _root_.java.util.UUID) => play.api.libs.json.JsString(x.toString) private[v0] implicit val jsonReadsJodaDateTime: play.api.libs.json.Reads[_root_.org.joda.time.DateTime] = __.read[String].map { str => _root_.org.joda.time.format.ISODateTimeFormat.dateTimeParser.parseDateTime(str) } private[v0] implicit val jsonWritesJodaDateTime: play.api.libs.json.Writes[_root_.org.joda.time.DateTime] = (x: _root_.org.joda.time.DateTime) => { play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(x)) } private[v0] implicit val jsonReadsJodaLocalDate: play.api.libs.json.Reads[_root_.org.joda.time.LocalDate] = __.read[String].map { str => _root_.org.joda.time.format.ISODateTimeFormat.dateTimeParser.parseLocalDate(str) } private[v0] implicit val jsonWritesJodaLocalDate: play.api.libs.json.Writes[_root_.org.joda.time.LocalDate] = (x: _root_.org.joda.time.LocalDate) => { play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.date.print(x)) } 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").readWithDefault[Seq[String]](Nil) } 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]] interfaces <- (__ \ "interfaces").readWithDefault[Seq[String]](Nil) unions <- (__ \ "unions").read[Seq[String]] models <- (__ \ "models").read[Seq[String]] annotations <- (__ \ "annotations").readWithDefault[Seq[io.apibuilder.spec.v0.models.Annotation]](Nil) } yield Import(uri, namespace, organization, application, version, enums, interfaces, 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), "interfaces" -> play.api.libs.json.Json.toJson(obj.interfaces), "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 jsonReadsApibuilderSpecInterface: play.api.libs.json.Reads[io.apibuilder.spec.v0.models.Interface] = { 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 Interface(name, plural, description, deprecation, fields, attributes) } def jsObjectInterface(obj: io.apibuilder.spec.v0.models.Interface): 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 jsonWritesApibuilderSpecInterface: play.api.libs.json.Writes[Interface] = { (obj: io.apibuilder.spec.v0.models.Interface) => { io.apibuilder.spec.v0.models.json.jsObjectInterface(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]] interfaces <- (__ \ "interfaces").readWithDefault[Seq[String]](Nil) } yield Model(name, plural, description, deprecation, fields, attributes, interfaces) } 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), "interfaces" -> play.api.libs.json.Json.toJson(obj.interfaces) ) ++ (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").readNullable[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]] interfaces <- (__ \ "interfaces").readWithDefault[Seq[io.apibuilder.spec.v0.models.Interface]](Nil) 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").readWithDefault[Seq[io.apibuilder.spec.v0.models.Annotation]](Nil) } yield Service(apidoc, name, organization, application, namespace, version, baseUrl, description, info, headers, imports, enums, interfaces, 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( "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), "interfaces" -> play.api.libs.json.Json.toJson(obj.interfaces), "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.apidoc match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("apidoc" -> io.apibuilder.spec.v0.models.json.jsObjectApidoc(x)) }) ++ (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]] interfaces <- (__ \ "interfaces").readWithDefault[Seq[String]](Nil) } yield Union(name, plural, discriminator, description, deprecation, types, attributes, interfaces) } 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), "interfaces" -> play.api.libs.json.Json.toJson(obj.interfaces) ) ++ (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) } } } } package io.apibuilder.spec.v0 { object Bindables { import play.api.mvc.{PathBindable, QueryStringBindable} // import models directly for backwards compatibility with prior versions of the generator import Core._ import Models._ object Core { implicit def pathBindableDateTimeIso8601(implicit stringBinder: QueryStringBindable[String]): PathBindable[_root_.org.joda.time.DateTime] = ApibuilderPathBindable(ApibuilderTypes.dateTimeIso8601) implicit def queryStringBindableDateTimeIso8601(implicit stringBinder: QueryStringBindable[String]): QueryStringBindable[_root_.org.joda.time.DateTime] = ApibuilderQueryStringBindable(ApibuilderTypes.dateTimeIso8601) implicit def pathBindableDateIso8601(implicit stringBinder: QueryStringBindable[String]): PathBindable[_root_.org.joda.time.LocalDate] = ApibuilderPathBindable(ApibuilderTypes.dateIso8601) implicit def queryStringBindableDateIso8601(implicit stringBinder: QueryStringBindable[String]): QueryStringBindable[_root_.org.joda.time.LocalDate] = ApibuilderQueryStringBindable(ApibuilderTypes.dateIso8601) } object Models { import io.apibuilder.spec.v0.models._ val methodConverter: ApibuilderTypeConverter[io.apibuilder.spec.v0.models.Method] = new ApibuilderTypeConverter[io.apibuilder.spec.v0.models.Method] { override def convert(value: String): io.apibuilder.spec.v0.models.Method = io.apibuilder.spec.v0.models.Method(value) override def convert(value: io.apibuilder.spec.v0.models.Method): String = value.toString override def example: io.apibuilder.spec.v0.models.Method = io.apibuilder.spec.v0.models.Method.Get override def validValues: Seq[io.apibuilder.spec.v0.models.Method] = io.apibuilder.spec.v0.models.Method.all } implicit def pathBindableMethod(implicit stringBinder: QueryStringBindable[String]): PathBindable[io.apibuilder.spec.v0.models.Method] = ApibuilderPathBindable(methodConverter) implicit def queryStringBindableMethod(implicit stringBinder: QueryStringBindable[String]): QueryStringBindable[io.apibuilder.spec.v0.models.Method] = ApibuilderQueryStringBindable(methodConverter) val parameterLocationConverter: ApibuilderTypeConverter[io.apibuilder.spec.v0.models.ParameterLocation] = new ApibuilderTypeConverter[io.apibuilder.spec.v0.models.ParameterLocation] { override def convert(value: String): io.apibuilder.spec.v0.models.ParameterLocation = io.apibuilder.spec.v0.models.ParameterLocation(value) override def convert(value: io.apibuilder.spec.v0.models.ParameterLocation): String = value.toString override def example: io.apibuilder.spec.v0.models.ParameterLocation = io.apibuilder.spec.v0.models.ParameterLocation.Path override def validValues: Seq[io.apibuilder.spec.v0.models.ParameterLocation] = io.apibuilder.spec.v0.models.ParameterLocation.all } implicit def pathBindableParameterLocation(implicit stringBinder: QueryStringBindable[String]): PathBindable[io.apibuilder.spec.v0.models.ParameterLocation] = ApibuilderPathBindable(parameterLocationConverter) implicit def queryStringBindableParameterLocation(implicit stringBinder: QueryStringBindable[String]): QueryStringBindable[io.apibuilder.spec.v0.models.ParameterLocation] = ApibuilderQueryStringBindable(parameterLocationConverter) val responseCodeOptionConverter: ApibuilderTypeConverter[io.apibuilder.spec.v0.models.ResponseCodeOption] = new ApibuilderTypeConverter[io.apibuilder.spec.v0.models.ResponseCodeOption] { override def convert(value: String): io.apibuilder.spec.v0.models.ResponseCodeOption = io.apibuilder.spec.v0.models.ResponseCodeOption(value) override def convert(value: io.apibuilder.spec.v0.models.ResponseCodeOption): String = value.toString override def example: io.apibuilder.spec.v0.models.ResponseCodeOption = io.apibuilder.spec.v0.models.ResponseCodeOption.Default override def validValues: Seq[io.apibuilder.spec.v0.models.ResponseCodeOption] = io.apibuilder.spec.v0.models.ResponseCodeOption.all } implicit def pathBindableResponseCodeOption(implicit stringBinder: QueryStringBindable[String]): PathBindable[io.apibuilder.spec.v0.models.ResponseCodeOption] = ApibuilderPathBindable(responseCodeOptionConverter) implicit def queryStringBindableResponseCodeOption(implicit stringBinder: QueryStringBindable[String]): QueryStringBindable[io.apibuilder.spec.v0.models.ResponseCodeOption] = ApibuilderQueryStringBindable(responseCodeOptionConverter) } trait ApibuilderTypeConverter[T] { def convert(value: String): T def convert(value: T): String def example: T def validValues: Seq[T] = Nil def errorMessage(key: String, value: String, ex: java.lang.Exception): String = { val base = s"Invalid value '$value' for parameter '$key'. " validValues.toList match { case Nil => base + "Ex: " + convert(example) case values => base + ". Valid values are: " + values.mkString("'", "', '", "'") } } } object ApibuilderTypes { val dateTimeIso8601: ApibuilderTypeConverter[_root_.org.joda.time.DateTime] = new ApibuilderTypeConverter[_root_.org.joda.time.DateTime] { override def convert(value: String): _root_.org.joda.time.DateTime = _root_.org.joda.time.format.ISODateTimeFormat.dateTimeParser.parseDateTime(value) override def convert(value: _root_.org.joda.time.DateTime): String = _root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(value) override def example: _root_.org.joda.time.DateTime = _root_.org.joda.time.DateTime.now } val dateIso8601: ApibuilderTypeConverter[_root_.org.joda.time.LocalDate] = new ApibuilderTypeConverter[_root_.org.joda.time.LocalDate] { override def convert(value: String): _root_.org.joda.time.LocalDate = _root_.org.joda.time.format.ISODateTimeFormat.dateTimeParser.parseLocalDate(value) override def convert(value: _root_.org.joda.time.LocalDate): String = _root_.org.joda.time.format.ISODateTimeFormat.date.print(value) override def example: _root_.org.joda.time.LocalDate = _root_.org.joda.time.LocalDate.now } } final case class ApibuilderQueryStringBindable[T]( converters: ApibuilderTypeConverter[T] ) extends QueryStringBindable[T] { override def bind(key: String, params: Map[String, Seq[String]]): _root_.scala.Option[_root_.scala.Either[String, T]] = { params.getOrElse(key, Nil).headOption.map { v => try { Right( converters.convert(v) ) } catch { case ex: java.lang.Exception => Left( converters.errorMessage(key, v, ex) ) } } } override def unbind(key: String, value: T): String = { s"$key=${converters.convert(value)}" } } final case class ApibuilderPathBindable[T]( converters: ApibuilderTypeConverter[T] ) extends PathBindable[T] { override def bind(key: String, value: String): _root_.scala.Either[String, T] = { try { Right( converters.convert(value) ) } catch { case ex: java.lang.Exception => Left( converters.errorMessage(key, value, ex) ) } } override def unbind(key: String, value: T): String = { converters.convert(value) } } } } package io.apibuilder.spec.v0 { object Constants { val Namespace = "io.apibuilder.spec.v0" val UserAgent = "apibuilder app.apibuilder.io/apicollective/apibuilder-spec/0.16.53/play_2_2_client" val Version = "0.16.53" val VersionMajor = 0 } class Client( val baseUrl: String, auth: scala.Option[io.apibuilder.spec.v0.Authorization] = None, defaultHeaders: Seq[(String, String)] = Nil ) extends interfaces.Client { import io.apibuilder.spec.v0.models.json._ private val logger = play.api.Logger("io.apibuilder.spec.v0.Client") logger.info(s"Initializing io.apibuilder.spec.v0.Client for url $baseUrl") def _requestHolder(path: String): play.api.libs.ws.WS.WSRequestHolder = { import play.api.Play.current val holder = play.api.libs.ws.WS.url(baseUrl + path).withHeaders( "User-Agent" -> Constants.UserAgent, "X-Apidoc-Version" -> Constants.Version, "X-Apidoc-Version-Major" -> Constants.VersionMajor.toString ).withHeaders(defaultHeaders: _*) auth.fold(holder) { case Authorization.Basic(username, password) => { holder.withAuth(username, password.getOrElse(""), com.ning.http.client.Realm.AuthScheme.BASIC) } } } def _logRequest(method: String, req: play.api.libs.ws.WS.WSRequestHolder): play.api.libs.ws.WS.WSRequestHolder = { val queryComponents = for { (name, values) <- req.queryString value <- values } yield s"$name=$value" val url = s"${req.url}${queryComponents.mkString("?", "&", "")}" auth.fold(logger.info(s"curl -X $method '$url'")) { _ => logger.info(s"curl -X $method -u '[REDACTED]:' '$url'") } req } def _executeRequest( method: String, path: String, queryParameters: Seq[(String, String)] = Nil, requestHeaders: Seq[(String, String)] = Nil, body: Option[play.api.libs.json.JsValue] = None ): scala.concurrent.Future[play.api.libs.ws.Response] = { method.toUpperCase match { case "GET" => { _logRequest("GET", _requestHolder(path).withHeaders(requestHeaders: _*).withQueryString(queryParameters: _*)).get() } case "POST" => { _logRequest("POST", _requestHolder(path).withHeaders(_withJsonContentType(requestHeaders): _*).withQueryString(queryParameters: _*)).post(body.getOrElse(play.api.libs.json.Json.obj())) } case "PUT" => { _logRequest("PUT", _requestHolder(path).withHeaders(_withJsonContentType(requestHeaders): _*).withQueryString(queryParameters: _*)).put(body.getOrElse(play.api.libs.json.Json.obj())) } case "PATCH" => { sys.error("PATCH method is not supported in Play Framework Version 2.2.x") } case "DELETE" => { _logRequest("DELETE", _requestHolder(path).withHeaders(requestHeaders: _*).withQueryString(queryParameters: _*)).delete() } case "HEAD" => { _logRequest("HEAD", _requestHolder(path).withHeaders(requestHeaders: _*).withQueryString(queryParameters: _*)).head() } case "OPTIONS" => { _logRequest("OPTIONS", _requestHolder(path).withHeaders(requestHeaders: _*).withQueryString(queryParameters: _*)).options() } case _ => { _logRequest(method, _requestHolder(path).withHeaders(requestHeaders: _*).withQueryString(queryParameters: _*)) sys.error("Unsupported method[%s]".format(method)) } } } /** * Adds a Content-Type: application/json header unless the specified requestHeaders * already contain a Content-Type header */ def _withJsonContentType(headers: Seq[(String, String)]): Seq[(String, String)] = { headers.find { _._1.toUpperCase == "CONTENT-TYPE" } match { case None => headers ++ Seq("Content-Type" -> "application/json; charset=UTF-8") case Some(_) => headers } } } object Client { def parseJson[T]( className: String, r: play.api.libs.ws.Response, f: (play.api.libs.json.JsValue => play.api.libs.json.JsResult[T]) ): T = { f(play.api.libs.json.Json.parse(r.body)) match { case play.api.libs.json.JsSuccess(x, _) => x case play.api.libs.json.JsError(errors) => { throw io.apibuilder.spec.v0.errors.FailedRequest(r.status, s"Invalid json for class[" + className + "]: " + errors.mkString(" "), requestUri = Some(r.ahcResponse.getUri)) } } } } sealed trait Authorization extends _root_.scala.Product with _root_.scala.Serializable object Authorization { final case class Basic(username: String, password: Option[String] = None) extends Authorization } package interfaces { trait Client { def baseUrl: String } } package errors { final case class FailedRequest(responseCode: Int, message: String, requestUri: Option[_root_.java.net.URI] = None) extends _root_.java.lang.Exception(s"HTTP $responseCode: $message") } }