/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1 * User agent: apibuilder app.apibuilder.io/cerium/termsteelversionapi/0.0.1/http4s_0_15 */ package cerium.termsteelversionapi.v0.models { package object json { import io.circe.Decoder._ import io.circe.Encoder._ import scala.language.implicitConversions // See below - Make Scala 2.11 Either monadic import scala.util.Try import io.circe.{Json, JsonObject, Encoder, Decoder, DecodingFailure} import io.circe.syntax._ import cerium.termsteelversionapi.v0.models.json._ import io.apibuilder.common.v0.models.json._ import io.apibuilder.spec.v0.models.json._ // Make Scala 2.11 Either monadic private[v0] implicit def eitherOps[A,B](e: Either[A,B]) = cats.implicits.catsSyntaxEither(e) private[v0] implicit val decodeUUID: Decoder[_root_.java.util.UUID] = Decoder.decodeString.emapTry(str => Try(_root_.java.util.UUID.fromString(str))) private[v0] implicit val encodeUUID: Encoder[_root_.java.util.UUID] = Encoder.encodeString.contramap[_root_.java.util.UUID](uuid => uuid.toString) private[v0] implicit val decodeInstant: Decoder[_root_.java.time.Instant] = Decoder.decodeString.emapTry(str => Try(_root_.java.time.OffsetDateTime.parse(str).toInstant)) private[v0] implicit val encodeInstant: Encoder[_root_.java.time.Instant] = Encoder.encodeString.contramap[_root_.java.time.Instant](_.toString) private[v0] implicit val decodeLocalDate: Decoder[_root_.java.time.LocalDate] = Decoder.decodeString.emapTry(str => Try(_root_.java.time.LocalDate.parse(str))) private[v0] implicit val encodeLocalDate: Encoder[_root_.java.time.LocalDate] = Encoder.encodeString.contramap[_root_.java.time.LocalDate](_.toString) implicit val jsonDecoderTermsteelversionapiFileFlag: Decoder[cerium.termsteelversionapi.v0.models.FileFlag] = Decoder.decodeString.map(cerium.termsteelversionapi.v0.models.FileFlag(_)) implicit val jsonEncoderTermsteelversionapiFileFlag: Encoder[cerium.termsteelversionapi.v0.models.FileFlag] = Encoder.encodeString.contramap[cerium.termsteelversionapi.v0.models.FileFlag](_.toString) implicit def decodeTermsteelversionapiAttribute: Decoder[Attribute] = Decoder.instance { c => for { name <- c.downField("name").as[String] value <- c.downField("value").as[String] } yield { Attribute( name = name, value = value ) } } implicit def encodeTermsteelversionapiAttribute: Encoder[Attribute] = Encoder.instance { t => Json.fromFields(Seq( Some("name" -> t.name.asJson), Some("value" -> t.value.asJson) ).flatten) } implicit def decodeTermsteelversionapiError: Decoder[Error] = Decoder.instance { c => for { code <- c.downField("code").as[String] message <- c.downField("message").as[String] } yield { Error( code = code, message = message ) } } implicit def encodeTermsteelversionapiError: Encoder[Error] = Encoder.instance { t => Json.fromFields(Seq( Some("code" -> t.code.asJson), Some("message" -> t.message.asJson) ).flatten) } implicit def decodeTermsteelversionapiFile: Decoder[File] = Decoder.instance { c => for { name <- c.downField("name").as[String] dir <- c.downField("dir").as[Option[String]] contents <- c.downField("contents").as[String] flags <- c.downField("flags").as[Option[Seq[cerium.termsteelversionapi.v0.models.FileFlag]]] } yield { File( name = name, dir = dir, contents = contents, flags = flags ) } } implicit def encodeTermsteelversionapiFile: Encoder[File] = Encoder.instance { t => Json.fromFields(Seq( Some("name" -> t.name.asJson), t.dir.map(t => "dir" -> t.asJson), Some("contents" -> t.contents.asJson), t.flags.map(t => "flags" -> t.asJson) ).flatten) } implicit def decodeTermsteelversionapiGenerator: Decoder[Generator] = Decoder.instance { c => for { key <- c.downField("key").as[String] name <- c.downField("name").as[String] language <- c.downField("language").as[Option[String]] description <- c.downField("description").as[Option[String]] attributes <- c.downField("attributes").as[Seq[String]] } yield { Generator( key = key, name = name, language = language, description = description, attributes = attributes ) } } implicit def encodeTermsteelversionapiGenerator: Encoder[Generator] = Encoder.instance { t => Json.fromFields(Seq( Some("key" -> t.key.asJson), Some("name" -> t.name.asJson), t.language.map(t => "language" -> t.asJson), t.description.map(t => "description" -> t.asJson), Some("attributes" -> t.attributes.asJson) ).flatten) } implicit def decodeTermsteelversionapiHealthcheck: Decoder[Healthcheck] = Decoder.instance { c => for { status <- c.downField("status").as[String] } yield { Healthcheck( status = status ) } } implicit def encodeTermsteelversionapiHealthcheck: Encoder[Healthcheck] = Encoder.instance { t => Json.fromFields(Seq( Some("status" -> t.status.asJson) ).flatten) } implicit def decodeTermsteelversionapiInvocation: Decoder[Invocation] = Decoder.instance { c => for { source <- c.downField("source").as[String] files <- c.downField("files").as[Seq[cerium.termsteelversionapi.v0.models.File]] } yield { Invocation( source = source, files = files ) } } implicit def encodeTermsteelversionapiInvocation: Encoder[Invocation] = Encoder.instance { t => Json.fromFields(Seq( Some("source" -> t.source.asJson), Some("files" -> t.files.asJson) ).flatten) } implicit def decodeTermsteelversionapiInvocationForm: Decoder[InvocationForm] = Decoder.instance { c => for { service <- c.downField("service").as[io.apibuilder.spec.v0.models.Service] attributes <- c.downField("attributes").as[Seq[cerium.termsteelversionapi.v0.models.Attribute]] userAgent <- c.downField("user_agent").as[Option[String]] importedServices <- c.downField("imported_services").as[Option[Seq[io.apibuilder.spec.v0.models.Service]]] } yield { InvocationForm( service = service, attributes = attributes, userAgent = userAgent, importedServices = importedServices ) } } implicit def encodeTermsteelversionapiInvocationForm: Encoder[InvocationForm] = Encoder.instance { t => Json.fromFields(Seq( Some("service" -> t.service.asJson), Some("attributes" -> t.attributes.asJson), t.userAgent.map(t => "user_agent" -> t.asJson), t.importedServices.map(t => "imported_services" -> t.asJson) ).flatten) } } }