/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1-dev * User agent: apibuilder app.apibuilder.io/grhodes/code-deploy-dashboard/0.0.1-dev/play_2_4_client */ package io.grhodes.code.deploy.dashboard.v0.models { /** * @param name Name of this application. * @param deploymentGroups List of deployment groups for this application. */ final case class Application( name: String, deploymentGroups: Seq[io.grhodes.code.deploy.dashboard.v0.models.DeploymentGroup] ) /** * @param id The deployment id * @param created Date deployment created * @param started Date deployment started * @param completed Date deployment created * @param deploymentGroupName The deployment group name * @param failed The number of instances failed deployment * @param skipped The number of instances skipped deployment * @param inProgress The number of instances currently deploying * @param pending The number of instances pending deployment * @param succeeded The number of instances succeeded at deployment * @param status The status of the deployment * @param errorMessage A error message if the deployment failed * @param revisionLocation The location of the revision * @param instances The instances involved in this deployment */ final case class Deployment( id: String, created: _root_.org.joda.time.DateTime, started: _root_.org.joda.time.DateTime, completed: _root_.org.joda.time.DateTime, creator: String, deploymentGroupName: String, failed: Int, skipped: Int, inProgress: Int, pending: Int, succeeded: Int, status: String, errorMessage: _root_.scala.Option[String] = None, revisionLocation: String, instances: Seq[io.grhodes.code.deploy.dashboard.v0.models.DeploymentInstance] ) /** * @param name Name of this deployment group. * @param autoScalingGroupNames List of auto scaling groups for this deployment group. */ final case class DeploymentGroup( name: String, autoScalingGroupNames: Seq[String] ) /** * @param id The instance id * @param status The status of this instances deployment * @param lastUpdatedAt Last updated at time * @param lifecycleEvents Deployment lifecycle events */ final case class DeploymentInstance( id: String, status: String, lastUpdatedAt: _root_.org.joda.time.DateTime, lifecycleEvents: Seq[io.grhodes.code.deploy.dashboard.v0.models.DeploymentLifecycleEvent] ) /** * @param name The deployment lifecycle event name * @param startTime Time the deployment lifecycle event started * @param endTime Time the deployment lifecycle event ended * @param status The status of the deployment lifecycle event * @param errorLogTail The deployment lifecycle event log tail if it failed * @param errorMessage The deployment lifecycle event error message if it failed * @param scriptName The deployment lifecycle event script filename if it failed */ final case class DeploymentLifecycleEvent( name: String, startTime: _root_.org.joda.time.DateTime, endTime: _root_.org.joda.time.DateTime, status: String, errorLogTail: _root_.scala.Option[String] = None, errorMessage: _root_.scala.Option[String] = None, scriptName: _root_.scala.Option[String] = None ) /** * @param name Name of this service. * @param version Version of this service. * @param scalaVersion Version of Scala this service is using. * @param sbtVersion Version of SBT used to build this service. * @param buildTime Time the service was built at. */ final case class Info( name: String, version: String, scalaVersion: String, sbtVersion: String, buildTime: _root_.org.joda.time.DateTime ) } package io.grhodes.code.deploy.dashboard.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.grhodes.code.deploy.dashboard.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 def jsonReadsCodeDeployDashboardApplication: play.api.libs.json.Reads[io.grhodes.code.deploy.dashboard.v0.models.Application] = { for { name <- (__ \ "name").read[String] deploymentGroups <- (__ \ "deploymentGroups").read[Seq[io.grhodes.code.deploy.dashboard.v0.models.DeploymentGroup]] } yield Application(name, deploymentGroups) } def jsObjectApplication(obj: io.grhodes.code.deploy.dashboard.v0.models.Application): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "deploymentGroups" -> play.api.libs.json.Json.toJson(obj.deploymentGroups) ) } implicit def jsonWritesCodeDeployDashboardApplication: play.api.libs.json.Writes[Application] = { (obj: io.grhodes.code.deploy.dashboard.v0.models.Application) => { io.grhodes.code.deploy.dashboard.v0.models.json.jsObjectApplication(obj) } } implicit def jsonReadsCodeDeployDashboardDeployment: play.api.libs.json.Reads[io.grhodes.code.deploy.dashboard.v0.models.Deployment] = { for { id <- (__ \ "id").read[String] created <- (__ \ "created").read[_root_.org.joda.time.DateTime] started <- (__ \ "started").read[_root_.org.joda.time.DateTime] completed <- (__ \ "completed").read[_root_.org.joda.time.DateTime] creator <- (__ \ "creator").read[String] deploymentGroupName <- (__ \ "deployment_group_name").read[String] failed <- (__ \ "failed").read[Int] skipped <- (__ \ "skipped").read[Int] inProgress <- (__ \ "in_progress").read[Int] pending <- (__ \ "pending").read[Int] succeeded <- (__ \ "succeeded").read[Int] status <- (__ \ "status").read[String] errorMessage <- (__ \ "error_message").readNullable[String] revisionLocation <- (__ \ "revision_location").read[String] instances <- (__ \ "instances").read[Seq[io.grhodes.code.deploy.dashboard.v0.models.DeploymentInstance]] } yield Deployment(id, created, started, completed, creator, deploymentGroupName, failed, skipped, inProgress, pending, succeeded, status, errorMessage, revisionLocation, instances) } def jsObjectDeployment(obj: io.grhodes.code.deploy.dashboard.v0.models.Deployment): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "id" -> play.api.libs.json.JsString(obj.id), "created" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.created)), "started" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.started)), "completed" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.completed)), "creator" -> play.api.libs.json.JsString(obj.creator), "deployment_group_name" -> play.api.libs.json.JsString(obj.deploymentGroupName), "failed" -> play.api.libs.json.JsNumber(obj.failed), "skipped" -> play.api.libs.json.JsNumber(obj.skipped), "in_progress" -> play.api.libs.json.JsNumber(obj.inProgress), "pending" -> play.api.libs.json.JsNumber(obj.pending), "succeeded" -> play.api.libs.json.JsNumber(obj.succeeded), "status" -> play.api.libs.json.JsString(obj.status), "revision_location" -> play.api.libs.json.JsString(obj.revisionLocation), "instances" -> play.api.libs.json.Json.toJson(obj.instances) ) ++ (obj.errorMessage match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("error_message" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesCodeDeployDashboardDeployment: play.api.libs.json.Writes[Deployment] = { (obj: io.grhodes.code.deploy.dashboard.v0.models.Deployment) => { io.grhodes.code.deploy.dashboard.v0.models.json.jsObjectDeployment(obj) } } implicit def jsonReadsCodeDeployDashboardDeploymentGroup: play.api.libs.json.Reads[io.grhodes.code.deploy.dashboard.v0.models.DeploymentGroup] = { for { name <- (__ \ "name").read[String] autoScalingGroupNames <- (__ \ "autoScalingGroupNames").read[Seq[String]] } yield DeploymentGroup(name, autoScalingGroupNames) } def jsObjectDeploymentGroup(obj: io.grhodes.code.deploy.dashboard.v0.models.DeploymentGroup): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "autoScalingGroupNames" -> play.api.libs.json.Json.toJson(obj.autoScalingGroupNames) ) } implicit def jsonWritesCodeDeployDashboardDeploymentGroup: play.api.libs.json.Writes[DeploymentGroup] = { (obj: io.grhodes.code.deploy.dashboard.v0.models.DeploymentGroup) => { io.grhodes.code.deploy.dashboard.v0.models.json.jsObjectDeploymentGroup(obj) } } implicit def jsonReadsCodeDeployDashboardDeploymentInstance: play.api.libs.json.Reads[io.grhodes.code.deploy.dashboard.v0.models.DeploymentInstance] = { for { id <- (__ \ "id").read[String] status <- (__ \ "status").read[String] lastUpdatedAt <- (__ \ "last_updated_at").read[_root_.org.joda.time.DateTime] lifecycleEvents <- (__ \ "lifecycle_events").read[Seq[io.grhodes.code.deploy.dashboard.v0.models.DeploymentLifecycleEvent]] } yield DeploymentInstance(id, status, lastUpdatedAt, lifecycleEvents) } def jsObjectDeploymentInstance(obj: io.grhodes.code.deploy.dashboard.v0.models.DeploymentInstance): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "id" -> play.api.libs.json.JsString(obj.id), "status" -> play.api.libs.json.JsString(obj.status), "last_updated_at" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.lastUpdatedAt)), "lifecycle_events" -> play.api.libs.json.Json.toJson(obj.lifecycleEvents) ) } implicit def jsonWritesCodeDeployDashboardDeploymentInstance: play.api.libs.json.Writes[DeploymentInstance] = { (obj: io.grhodes.code.deploy.dashboard.v0.models.DeploymentInstance) => { io.grhodes.code.deploy.dashboard.v0.models.json.jsObjectDeploymentInstance(obj) } } implicit def jsonReadsCodeDeployDashboardDeploymentLifecycleEvent: play.api.libs.json.Reads[io.grhodes.code.deploy.dashboard.v0.models.DeploymentLifecycleEvent] = { for { name <- (__ \ "name").read[String] startTime <- (__ \ "start_time").read[_root_.org.joda.time.DateTime] endTime <- (__ \ "end_time").read[_root_.org.joda.time.DateTime] status <- (__ \ "status").read[String] errorLogTail <- (__ \ "error_log_tail").readNullable[String] errorMessage <- (__ \ "error_message").readNullable[String] scriptName <- (__ \ "script_name").readNullable[String] } yield DeploymentLifecycleEvent(name, startTime, endTime, status, errorLogTail, errorMessage, scriptName) } def jsObjectDeploymentLifecycleEvent(obj: io.grhodes.code.deploy.dashboard.v0.models.DeploymentLifecycleEvent): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "start_time" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.startTime)), "end_time" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.endTime)), "status" -> play.api.libs.json.JsString(obj.status) ) ++ (obj.errorLogTail match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("error_log_tail" -> play.api.libs.json.JsString(x)) }) ++ (obj.errorMessage match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("error_message" -> play.api.libs.json.JsString(x)) }) ++ (obj.scriptName match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("script_name" -> play.api.libs.json.JsString(x)) }) } implicit def jsonWritesCodeDeployDashboardDeploymentLifecycleEvent: play.api.libs.json.Writes[DeploymentLifecycleEvent] = { (obj: io.grhodes.code.deploy.dashboard.v0.models.DeploymentLifecycleEvent) => { io.grhodes.code.deploy.dashboard.v0.models.json.jsObjectDeploymentLifecycleEvent(obj) } } implicit def jsonReadsCodeDeployDashboardInfo: play.api.libs.json.Reads[io.grhodes.code.deploy.dashboard.v0.models.Info] = { for { name <- (__ \ "name").read[String] version <- (__ \ "version").read[String] scalaVersion <- (__ \ "scala_version").read[String] sbtVersion <- (__ \ "sbt_version").read[String] buildTime <- (__ \ "build_time").read[_root_.org.joda.time.DateTime] } yield Info(name, version, scalaVersion, sbtVersion, buildTime) } def jsObjectInfo(obj: io.grhodes.code.deploy.dashboard.v0.models.Info): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "version" -> play.api.libs.json.JsString(obj.version), "scala_version" -> play.api.libs.json.JsString(obj.scalaVersion), "sbt_version" -> play.api.libs.json.JsString(obj.sbtVersion), "build_time" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.buildTime)) ) } implicit def jsonWritesCodeDeployDashboardInfo: play.api.libs.json.Writes[Info] = { (obj: io.grhodes.code.deploy.dashboard.v0.models.Info) => { io.grhodes.code.deploy.dashboard.v0.models.json.jsObjectInfo(obj) } } } } package io.grhodes.code.deploy.dashboard.v0 { object Bindables { import play.api.mvc.{PathBindable, QueryStringBindable} // import models directly for backwards compatibility with prior versions of the generator import Core._ 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) } 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.grhodes.code.deploy.dashboard.v0 { object Constants { val BaseUrl = "http://code-deploy-dashboard.tools.gilt.com" val Namespace = "io.grhodes.code.deploy.dashboard.v0" val UserAgent = "apibuilder app.apibuilder.io/grhodes/code-deploy-dashboard/0.0.1-dev/play_2_4_client" val Version = "0.0.1-dev" val VersionMajor = 0 } class Client( val baseUrl: String = "http://code-deploy-dashboard.tools.gilt.com", auth: scala.Option[io.grhodes.code.deploy.dashboard.v0.Authorization] = None, defaultHeaders: Seq[(String, String)] = Nil ) extends interfaces.Client { import io.grhodes.code.deploy.dashboard.v0.models.json._ private val logger = play.api.Logger("io.grhodes.code.deploy.dashboard.v0.Client") logger.info(s"Initializing io.grhodes.code.deploy.dashboard.v0.Client for url $baseUrl") def applications: Applications = Applications def info: Info = Info object Applications extends Applications { override def get( requestHeaders: Seq[(String, String)] = Nil )(implicit ec: scala.concurrent.ExecutionContext): scala.concurrent.Future[Seq[io.grhodes.code.deploy.dashboard.v0.models.Application]] = { _executeRequest("GET", s"/application", requestHeaders = requestHeaders).map { case r if r.status == 200 => _root_.io.grhodes.code.deploy.dashboard.v0.Client.parseJson("Seq[io.grhodes.code.deploy.dashboard.v0.models.Application]", r, _.validate[Seq[io.grhodes.code.deploy.dashboard.v0.models.Application]]) case r => throw io.grhodes.code.deploy.dashboard.v0.errors.FailedRequest(r.status, s"Unsupported response code[${r.status}]. Expected: 200") } } } object Info extends Info { override def get( requestHeaders: Seq[(String, String)] = Nil )(implicit ec: scala.concurrent.ExecutionContext): scala.concurrent.Future[io.grhodes.code.deploy.dashboard.v0.models.Info] = { _executeRequest("GET", s"/info", requestHeaders = requestHeaders).map { case r if r.status == 200 => _root_.io.grhodes.code.deploy.dashboard.v0.Client.parseJson("io.grhodes.code.deploy.dashboard.v0.models.Info", r, _.validate[io.grhodes.code.deploy.dashboard.v0.models.Info]) case r => throw io.grhodes.code.deploy.dashboard.v0.errors.FailedRequest(r.status, s"Unsupported response code[${r.status}]. Expected: 200") } } } def _requestHolder(path: String): play.api.libs.ws.WSRequest = { 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(""), play.api.libs.ws.WSAuthScheme.BASIC) } } } def _logRequest(method: String, req: play.api.libs.ws.WSRequest): play.api.libs.ws.WSRequest = { 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.WSResponse] = { 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" => { _logRequest("PATCH", _requestHolder(path).withHeaders(requestHeaders: _*).withQueryString(queryParameters: _*)).patch(body.getOrElse(play.api.libs.json.Json.obj())) } 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.WSResponse, 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.grhodes.code.deploy.dashboard.v0.errors.FailedRequest(r.status, s"Invalid json for class[" + className + "]: " + errors.mkString(" ")) } } } } 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 def applications: io.grhodes.code.deploy.dashboard.v0.Applications def info: io.grhodes.code.deploy.dashboard.v0.Info } } trait Applications { def get( requestHeaders: Seq[(String, String)] = Nil )(implicit ec: scala.concurrent.ExecutionContext): scala.concurrent.Future[Seq[io.grhodes.code.deploy.dashboard.v0.models.Application]] } trait Info { def get( requestHeaders: Seq[(String, String)] = Nil )(implicit ec: scala.concurrent.ExecutionContext): scala.concurrent.Future[io.grhodes.code.deploy.dashboard.v0.models.Info] } 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") } }