/** * 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_x_json */ 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) } } } }