/** * Generated by API Builder - https://www.apibuilder.io * Service version: 1.0.1 * User agent: apibuilder app.apibuilder.io/gilt/ionroller-api/1.0.1/play_2_x_scala_3_standalone_json */ package com.gilt.ionroller.api.v1.models { /** * Elastic Beanstalk configuration including deployment bucket, stack name and * option settings * * @param deploymentBucket Deployment bucket used to deploy Elastic Beanstalk applications * @param stack Solution stack name (i.e. 64bit Amazon Linux 2015.03 v2.0.0 running Docker * 1.6.2) * @param settings Elastic Beanstalk configuration option settings, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html * @param resources Elastic Beanstalk environment resources, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-resources.html * @param packages Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param sources Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param files Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param users Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param groups Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param commands Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param containerCommands Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html * @param services Elastic Beanstalk container customization, see * http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html */ final case class EbConfig( deploymentBucket: String, stack: _root_.scala.Option[String] = None, settings: _root_.scala.Option[Seq[com.gilt.ionroller.api.v1.models.OptionSetting]] = None, resources: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, packages: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, sources: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, files: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, users: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, groups: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, commands: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, containerCommands: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None, services: _root_.scala.Option[_root_.play.api.libs.json.JsObject] = None ) /** * Settings for external ELB * * @param name Name of ELB * @param securityGroup Security group for ELB instances * @param rolloutDelayMinutes Delay in minutes between rollout increments */ final case class ElbSettings( name: String, securityGroup: String, rolloutDelayMinutes: Int ) /** * Elastic Beanstalk Environment running in AWS * * @param release Details of the release present in the environment * @param health Health of environment */ final case class Environment( release: com.gilt.ionroller.api.v1.models.Release, health: String ) /** * Elastic Beanstalk configuration option setting */ final case class OptionSetting( namespace: String, optionName: String, value: String ) /** * Mapping from port in Docker container to external host port * * @param internal Port to be forwarded from Docker container * @param external Port to be mapped to on external hosts */ final case class PortMapping( internal: Int, external: Int ) /** * A release of a particular tag of a Docker image * * @param image The Docker repository and name of images to be released * @param tag The tag for the image to be released * @param config Configuration timestamp * @param rolloutStatus Current rollout status */ final case class Release( image: String, tag: String, config: _root_.org.joda.time.DateTime, rolloutStatus: _root_.scala.Option[com.gilt.ionroller.api.v1.models.RolloutStatus] = None ) /** * Current rollout status for release * * @param numInstances Number of instances in external load balancer * @param completedAt Time at which latest increment completed */ final case class RolloutStatus( numInstances: _root_.scala.Option[Int] = None, completedAt: _root_.scala.Option[_root_.org.joda.time.DateTime] = None ) final case class Service( name: String, state: com.gilt.ionroller.api.v1.models.ServiceState ) /** * Configuration used by a service * * @param url URL of endpoint pointing at service * @param hostedZoneId Hosted Zone ID for DNS entry * @param awsAccountId ID of AWS account where this service is deployed * @param externalElb Details for external ELB * @param serviceRole Role used to run this service; specifies policy for accessing S3, RDS, DynamoDb * etc. * @param image Docker image details used in deployments * @param portMappings List of port mappings configured for use by Docker image * @param volumeMappings List of volume mappings configured for use by Docker image * @param runArgs Arguments passed to running Docker image * @param eb Elastic Beanstalk configuration including deployment bucket, stack name and * option settings like env variables, vpc, security groups etc. * @param removeUnusedAfterMinutes When an environment becomes unused, remove it after the specified number of * minutes * @param timestamp When this configuration has been created */ final case class ServiceConfig( url: String, hostedZoneId: String, awsAccountId: String, externalElb: _root_.scala.Option[com.gilt.ionroller.api.v1.models.ElbSettings] = None, serviceRole: String, image: String, portMappings: Seq[com.gilt.ionroller.api.v1.models.PortMapping], volumeMappings: _root_.scala.Option[Seq[com.gilt.ionroller.api.v1.models.VolumeMapping]] = None, runArgs: Seq[String], eb: com.gilt.ionroller.api.v1.models.EbConfig, removeUnusedAfterMinutes: _root_.scala.Option[Long] = None, timestamp: _root_.scala.Option[_root_.org.joda.time.DateTime] = None ) /** * Current state of service environments * * @param environments List of environments and their current status */ final case class ServiceCurrentState( environments: Seq[com.gilt.ionroller.api.v1.models.Environment] ) /** * Desired future state of service * * @param current Current release of software * @param next Next release of software * @param future Future release of software */ final case class ServiceDesiredState( current: _root_.scala.Option[com.gilt.ionroller.api.v1.models.Release] = None, next: _root_.scala.Option[com.gilt.ionroller.api.v1.models.Release] = None, future: _root_.scala.Option[com.gilt.ionroller.api.v1.models.Release] = None ) /** * State of service environments * * @param current List of environments and their current status * @param desired List of environments and their desired status */ final case class ServiceState( current: com.gilt.ionroller.api.v1.models.ServiceCurrentState, desired: _root_.scala.Option[com.gilt.ionroller.api.v1.models.ServiceDesiredState] = None ) /** * Mapping from path inside Docker container to external volume * * @param internal Location on image's filesystem that Docker volume is mapped to * @param external Identifier or path for location to be mapped into Docker environment */ final case class VolumeMapping( internal: String, external: String ) } package com.gilt.ionroller.api.v1.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 com.gilt.ionroller.api.v1.models.json._ private[v1] implicit val jsonReadsUUID: play.api.libs.json.Reads[_root_.java.util.UUID] = __.read[String].map { str => _root_.java.util.UUID.fromString(str) } private[v1] 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[v1] 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[v1] 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[v1] 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[v1] 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 jsonReadsIonrollerAPIEbConfig: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.EbConfig] = { for { deploymentBucket <- (__ \ "deployment_bucket").read[String] stack <- (__ \ "stack").readNullable[String] settings <- (__ \ "settings").readNullable[Seq[com.gilt.ionroller.api.v1.models.OptionSetting]] resources <- (__ \ "resources").readNullable[_root_.play.api.libs.json.JsObject] packages <- (__ \ "packages").readNullable[_root_.play.api.libs.json.JsObject] sources <- (__ \ "sources").readNullable[_root_.play.api.libs.json.JsObject] files <- (__ \ "files").readNullable[_root_.play.api.libs.json.JsObject] users <- (__ \ "users").readNullable[_root_.play.api.libs.json.JsObject] groups <- (__ \ "groups").readNullable[_root_.play.api.libs.json.JsObject] commands <- (__ \ "commands").readNullable[_root_.play.api.libs.json.JsObject] containerCommands <- (__ \ "container_commands").readNullable[_root_.play.api.libs.json.JsObject] services <- (__ \ "services").readNullable[_root_.play.api.libs.json.JsObject] } yield EbConfig(deploymentBucket, stack, settings, resources, packages, sources, files, users, groups, commands, containerCommands, services) } def jsObjectEbConfig(obj: com.gilt.ionroller.api.v1.models.EbConfig): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "deployment_bucket" -> play.api.libs.json.JsString(obj.deploymentBucket) ) ++ (obj.stack match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("stack" -> play.api.libs.json.JsString(x)) }) ++ (obj.settings match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("settings" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.resources match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("resources" -> x) }) ++ (obj.packages match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("packages" -> x) }) ++ (obj.sources match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("sources" -> x) }) ++ (obj.files match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("files" -> x) }) ++ (obj.users match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("users" -> x) }) ++ (obj.groups match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("groups" -> x) }) ++ (obj.commands match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("commands" -> x) }) ++ (obj.containerCommands match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("container_commands" -> x) }) ++ (obj.services match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("services" -> x) }) } implicit def jsonWritesIonrollerAPIEbConfig: play.api.libs.json.Writes[EbConfig] = { (obj: com.gilt.ionroller.api.v1.models.EbConfig) => { com.gilt.ionroller.api.v1.models.json.jsObjectEbConfig(obj) } } implicit def jsonReadsIonrollerAPIElbSettings: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.ElbSettings] = { for { name <- (__ \ "name").read[String] securityGroup <- (__ \ "security_group").read[String] rolloutDelayMinutes <- (__ \ "rollout_delay_minutes").read[Int] } yield ElbSettings(name, securityGroup, rolloutDelayMinutes) } def jsObjectElbSettings(obj: com.gilt.ionroller.api.v1.models.ElbSettings): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "security_group" -> play.api.libs.json.JsString(obj.securityGroup), "rollout_delay_minutes" -> play.api.libs.json.JsNumber(obj.rolloutDelayMinutes) ) } implicit def jsonWritesIonrollerAPIElbSettings: play.api.libs.json.Writes[ElbSettings] = { (obj: com.gilt.ionroller.api.v1.models.ElbSettings) => { com.gilt.ionroller.api.v1.models.json.jsObjectElbSettings(obj) } } implicit def jsonReadsIonrollerAPIEnvironment: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.Environment] = { for { release <- (__ \ "release").read[com.gilt.ionroller.api.v1.models.Release] health <- (__ \ "health").read[String] } yield Environment(release, health) } def jsObjectEnvironment(obj: com.gilt.ionroller.api.v1.models.Environment): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "release" -> com.gilt.ionroller.api.v1.models.json.jsObjectRelease(obj.release), "health" -> play.api.libs.json.JsString(obj.health) ) } implicit def jsonWritesIonrollerAPIEnvironment: play.api.libs.json.Writes[Environment] = { (obj: com.gilt.ionroller.api.v1.models.Environment) => { com.gilt.ionroller.api.v1.models.json.jsObjectEnvironment(obj) } } implicit def jsonReadsIonrollerAPIOptionSetting: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.OptionSetting] = { for { namespace <- (__ \ "Namespace").read[String] optionName <- (__ \ "OptionName").read[String] value <- (__ \ "Value").read[String] } yield OptionSetting(namespace, optionName, value) } def jsObjectOptionSetting(obj: com.gilt.ionroller.api.v1.models.OptionSetting): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "Namespace" -> play.api.libs.json.JsString(obj.namespace), "OptionName" -> play.api.libs.json.JsString(obj.optionName), "Value" -> play.api.libs.json.JsString(obj.value) ) } implicit def jsonWritesIonrollerAPIOptionSetting: play.api.libs.json.Writes[OptionSetting] = { (obj: com.gilt.ionroller.api.v1.models.OptionSetting) => { com.gilt.ionroller.api.v1.models.json.jsObjectOptionSetting(obj) } } implicit def jsonReadsIonrollerAPIPortMapping: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.PortMapping] = { for { internal <- (__ \ "internal").read[Int] external <- (__ \ "external").read[Int] } yield PortMapping(internal, external) } def jsObjectPortMapping(obj: com.gilt.ionroller.api.v1.models.PortMapping): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "internal" -> play.api.libs.json.JsNumber(obj.internal), "external" -> play.api.libs.json.JsNumber(obj.external) ) } implicit def jsonWritesIonrollerAPIPortMapping: play.api.libs.json.Writes[PortMapping] = { (obj: com.gilt.ionroller.api.v1.models.PortMapping) => { com.gilt.ionroller.api.v1.models.json.jsObjectPortMapping(obj) } } implicit def jsonReadsIonrollerAPIRelease: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.Release] = { for { image <- (__ \ "image").read[String] tag <- (__ \ "tag").read[String] config <- (__ \ "config").read[_root_.org.joda.time.DateTime] rolloutStatus <- (__ \ "rollout_status").readNullable[com.gilt.ionroller.api.v1.models.RolloutStatus] } yield Release(image, tag, config, rolloutStatus) } def jsObjectRelease(obj: com.gilt.ionroller.api.v1.models.Release): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "image" -> play.api.libs.json.JsString(obj.image), "tag" -> play.api.libs.json.JsString(obj.tag), "config" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(obj.config)) ) ++ (obj.rolloutStatus match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("rollout_status" -> com.gilt.ionroller.api.v1.models.json.jsObjectRolloutStatus(x)) }) } implicit def jsonWritesIonrollerAPIRelease: play.api.libs.json.Writes[Release] = { (obj: com.gilt.ionroller.api.v1.models.Release) => { com.gilt.ionroller.api.v1.models.json.jsObjectRelease(obj) } } implicit def jsonReadsIonrollerAPIRolloutStatus: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.RolloutStatus] = { for { numInstances <- (__ \ "num_instances").readNullable[Int] completedAt <- (__ \ "completed_at").readNullable[_root_.org.joda.time.DateTime] } yield RolloutStatus(numInstances, completedAt) } def jsObjectRolloutStatus(obj: com.gilt.ionroller.api.v1.models.RolloutStatus): play.api.libs.json.JsObject = { (obj.numInstances match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("num_instances" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.completedAt match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("completed_at" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(x))) }) } implicit def jsonWritesIonrollerAPIRolloutStatus: play.api.libs.json.Writes[RolloutStatus] = { (obj: com.gilt.ionroller.api.v1.models.RolloutStatus) => { com.gilt.ionroller.api.v1.models.json.jsObjectRolloutStatus(obj) } } implicit def jsonReadsIonrollerAPIService: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.Service] = { for { name <- (__ \ "name").read[String] state <- (__ \ "state").read[com.gilt.ionroller.api.v1.models.ServiceState] } yield Service(name, state) } def jsObjectService(obj: com.gilt.ionroller.api.v1.models.Service): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "name" -> play.api.libs.json.JsString(obj.name), "state" -> com.gilt.ionroller.api.v1.models.json.jsObjectServiceState(obj.state) ) } implicit def jsonWritesIonrollerAPIService: play.api.libs.json.Writes[Service] = { (obj: com.gilt.ionroller.api.v1.models.Service) => { com.gilt.ionroller.api.v1.models.json.jsObjectService(obj) } } implicit def jsonReadsIonrollerAPIServiceConfig: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.ServiceConfig] = { for { url <- (__ \ "url").read[String] hostedZoneId <- (__ \ "hosted_zone_id").read[String] awsAccountId <- (__ \ "aws_account_id").read[String] externalElb <- (__ \ "external_elb").readNullable[com.gilt.ionroller.api.v1.models.ElbSettings] serviceRole <- (__ \ "service_role").read[String] image <- (__ \ "image").read[String] portMappings <- (__ \ "port_mappings").read[Seq[com.gilt.ionroller.api.v1.models.PortMapping]] volumeMappings <- (__ \ "volume_mappings").readNullable[Seq[com.gilt.ionroller.api.v1.models.VolumeMapping]] runArgs <- (__ \ "run_args").read[Seq[String]] eb <- (__ \ "eb").read[com.gilt.ionroller.api.v1.models.EbConfig] removeUnusedAfterMinutes <- (__ \ "remove_unused_after_minutes").readNullable[Long] timestamp <- (__ \ "timestamp").readNullable[_root_.org.joda.time.DateTime] } yield ServiceConfig(url, hostedZoneId, awsAccountId, externalElb, serviceRole, image, portMappings, volumeMappings, runArgs, eb, removeUnusedAfterMinutes, timestamp) } def jsObjectServiceConfig(obj: com.gilt.ionroller.api.v1.models.ServiceConfig): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "url" -> play.api.libs.json.JsString(obj.url), "hosted_zone_id" -> play.api.libs.json.JsString(obj.hostedZoneId), "aws_account_id" -> play.api.libs.json.JsString(obj.awsAccountId), "service_role" -> play.api.libs.json.JsString(obj.serviceRole), "image" -> play.api.libs.json.JsString(obj.image), "port_mappings" -> play.api.libs.json.Json.toJson(obj.portMappings), "run_args" -> play.api.libs.json.Json.toJson(obj.runArgs), "eb" -> com.gilt.ionroller.api.v1.models.json.jsObjectEbConfig(obj.eb) ) ++ (obj.externalElb match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("external_elb" -> com.gilt.ionroller.api.v1.models.json.jsObjectElbSettings(x)) }) ++ (obj.volumeMappings match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("volume_mappings" -> play.api.libs.json.Json.toJson(x)) }) ++ (obj.removeUnusedAfterMinutes match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("remove_unused_after_minutes" -> play.api.libs.json.JsNumber(x)) }) ++ (obj.timestamp match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("timestamp" -> play.api.libs.json.JsString(_root_.org.joda.time.format.ISODateTimeFormat.dateTime.print(x))) }) } implicit def jsonWritesIonrollerAPIServiceConfig: play.api.libs.json.Writes[ServiceConfig] = { (obj: com.gilt.ionroller.api.v1.models.ServiceConfig) => { com.gilt.ionroller.api.v1.models.json.jsObjectServiceConfig(obj) } } implicit def jsonReadsIonrollerAPIServiceCurrentState: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.ServiceCurrentState] = { (__ \ "environments").read[Seq[com.gilt.ionroller.api.v1.models.Environment]].map { x => ServiceCurrentState(environments = x) } } def jsObjectServiceCurrentState(obj: com.gilt.ionroller.api.v1.models.ServiceCurrentState): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "environments" -> play.api.libs.json.Json.toJson(obj.environments) ) } implicit def jsonWritesIonrollerAPIServiceCurrentState: play.api.libs.json.Writes[ServiceCurrentState] = { (obj: com.gilt.ionroller.api.v1.models.ServiceCurrentState) => { com.gilt.ionroller.api.v1.models.json.jsObjectServiceCurrentState(obj) } } implicit def jsonReadsIonrollerAPIServiceDesiredState: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.ServiceDesiredState] = { for { current <- (__ \ "current").readNullable[com.gilt.ionroller.api.v1.models.Release] next <- (__ \ "next").readNullable[com.gilt.ionroller.api.v1.models.Release] future <- (__ \ "future").readNullable[com.gilt.ionroller.api.v1.models.Release] } yield ServiceDesiredState(current, next, future) } def jsObjectServiceDesiredState(obj: com.gilt.ionroller.api.v1.models.ServiceDesiredState): play.api.libs.json.JsObject = { (obj.current match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("current" -> com.gilt.ionroller.api.v1.models.json.jsObjectRelease(x)) }) ++ (obj.next match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("next" -> com.gilt.ionroller.api.v1.models.json.jsObjectRelease(x)) }) ++ (obj.future match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("future" -> com.gilt.ionroller.api.v1.models.json.jsObjectRelease(x)) }) } implicit def jsonWritesIonrollerAPIServiceDesiredState: play.api.libs.json.Writes[ServiceDesiredState] = { (obj: com.gilt.ionroller.api.v1.models.ServiceDesiredState) => { com.gilt.ionroller.api.v1.models.json.jsObjectServiceDesiredState(obj) } } implicit def jsonReadsIonrollerAPIServiceState: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.ServiceState] = { for { current <- (__ \ "current").read[com.gilt.ionroller.api.v1.models.ServiceCurrentState] desired <- (__ \ "desired").readNullable[com.gilt.ionroller.api.v1.models.ServiceDesiredState] } yield ServiceState(current, desired) } def jsObjectServiceState(obj: com.gilt.ionroller.api.v1.models.ServiceState): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "current" -> com.gilt.ionroller.api.v1.models.json.jsObjectServiceCurrentState(obj.current) ) ++ (obj.desired match { case None => play.api.libs.json.Json.obj() case Some(x) => play.api.libs.json.Json.obj("desired" -> com.gilt.ionroller.api.v1.models.json.jsObjectServiceDesiredState(x)) }) } implicit def jsonWritesIonrollerAPIServiceState: play.api.libs.json.Writes[ServiceState] = { (obj: com.gilt.ionroller.api.v1.models.ServiceState) => { com.gilt.ionroller.api.v1.models.json.jsObjectServiceState(obj) } } implicit def jsonReadsIonrollerAPIVolumeMapping: play.api.libs.json.Reads[com.gilt.ionroller.api.v1.models.VolumeMapping] = { for { internal <- (__ \ "internal").read[String] external <- (__ \ "external").read[String] } yield VolumeMapping(internal, external) } def jsObjectVolumeMapping(obj: com.gilt.ionroller.api.v1.models.VolumeMapping): play.api.libs.json.JsObject = { play.api.libs.json.Json.obj( "internal" -> play.api.libs.json.JsString(obj.internal), "external" -> play.api.libs.json.JsString(obj.external) ) } implicit def jsonWritesIonrollerAPIVolumeMapping: play.api.libs.json.Writes[VolumeMapping] = { (obj: com.gilt.ionroller.api.v1.models.VolumeMapping) => { com.gilt.ionroller.api.v1.models.json.jsObjectVolumeMapping(obj) } } } }