/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1-dev * User agent: apibuilder app.apibuilder.io/chenggit/flowerate/0.0.1-dev/http4s_0_20 */ package io.cheng.flowerate.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 io.cheng.flowerate.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 jsonDecoderFlowerateCurrency: Decoder[io.cheng.flowerate.v0.models.Currency] = Decoder.decodeString.map(io.cheng.flowerate.v0.models.Currency(_)) implicit val jsonEncoderFlowerateCurrency: Encoder[io.cheng.flowerate.v0.models.Currency] = Encoder.encodeString.contramap[io.cheng.flowerate.v0.models.Currency](_.toString) implicit val jsonDecoderFlowerateCurrencyRateEvent: Decoder[io.cheng.flowerate.v0.models.CurrencyRateEvent] = Decoder.decodeString.map(io.cheng.flowerate.v0.models.CurrencyRateEvent(_)) implicit val jsonEncoderFlowerateCurrencyRateEvent: Encoder[io.cheng.flowerate.v0.models.CurrencyRateEvent] = Encoder.encodeString.contramap[io.cheng.flowerate.v0.models.CurrencyRateEvent](_.toString) implicit def decodeFlowerateFixerErrorDetail: Decoder[FixerErrorDetail] = Decoder.instance { c => for { code <- c.downField("code").as[Long] __type__ <- c.downField("type").as[String] } yield { FixerErrorDetail( code = code, `type` = __type__ ) } } implicit def encodeFlowerateFixerErrorDetail: Encoder[FixerErrorDetail] = Encoder.instance { t => Json.fromFields(Seq( Some("code" -> t.code.asJson), Some("type" -> t.`type`.asJson) ).flatten) } implicit def decodeFlowerateFixerRatesFailureResponse: Decoder[FixerRatesFailureResponse] = Decoder.instance { c => for { success <- c.downField("success").as[Boolean] error <- c.downField("error").as[io.cheng.flowerate.v0.models.FixerErrorDetail] } yield { FixerRatesFailureResponse( success = success, error = error ) } } implicit def encodeFlowerateFixerRatesFailureResponse: Encoder[FixerRatesFailureResponse] = Encoder.instance { t => Json.fromFields(Seq( Some("success" -> t.success.asJson), Some("error" -> t.error.asJson) ).flatten) } implicit def decodeFlowerateFixerRatesSuccessResponse: Decoder[FixerRatesSuccessResponse] = Decoder.instance { c => for { success <- c.downField("success").as[Boolean] base <- c.downField("base").as[io.cheng.flowerate.v0.models.Currency] rates <- c.downField("rates").as[Map[String, Double]] timestamp <- c.downField("timestamp").as[Long] } yield { FixerRatesSuccessResponse( success = success, base = base, rates = rates, timestamp = timestamp ) } } implicit def encodeFlowerateFixerRatesSuccessResponse: Encoder[FixerRatesSuccessResponse] = Encoder.instance { t => Json.fromFields(Seq( Some("success" -> t.success.asJson), Some("base" -> t.base.asJson), Some("rates" -> t.rates.asJson), Some("timestamp" -> t.timestamp.asJson) ).flatten) } implicit def decodeFlowerateRateBetweenResponse: Decoder[RateBetweenResponse] = Decoder.instance { c => for { base <- c.downField("base").as[io.cheng.flowerate.v0.models.Currency] target <- c.downField("target").as[io.cheng.flowerate.v0.models.Currency] rate <- c.downField("rate").as[Double] timestamp <- c.downField("timestamp").as[Long] } yield { RateBetweenResponse( base = base, target = target, rate = rate, timestamp = timestamp ) } } implicit def encodeFlowerateRateBetweenResponse: Encoder[RateBetweenResponse] = Encoder.instance { t => Json.fromFields(Seq( Some("base" -> t.base.asJson), Some("target" -> t.target.asJson), Some("rate" -> t.rate.asJson), Some("timestamp" -> t.timestamp.asJson) ).flatten) } implicit def decodeFlowerateRateToAllResponse: Decoder[RateToAllResponse] = Decoder.instance { c => for { base <- c.downField("base").as[io.cheng.flowerate.v0.models.Currency] rates <- c.downField("rates").as[Map[String, Double]] timestamp <- c.downField("timestamp").as[Long] } yield { RateToAllResponse( base = base, rates = rates, timestamp = timestamp ) } } implicit def encodeFlowerateRateToAllResponse: Encoder[RateToAllResponse] = Encoder.instance { t => Json.fromFields(Seq( Some("base" -> t.base.asJson), Some("rates" -> t.rates.asJson), Some("timestamp" -> t.timestamp.asJson) ).flatten) } implicit def decodeFlowerateWebhookDetail: Decoder[WebhookDetail] = Decoder.instance { c => for { currencyRateEvent <- c.downField("currencyRateEvent").as[io.cheng.flowerate.v0.models.CurrencyRateEvent] url <- c.downField("url").as[String] } yield { WebhookDetail( currencyRateEvent = currencyRateEvent, url = url ) } } implicit def encodeFlowerateWebhookDetail: Encoder[WebhookDetail] = Encoder.instance { t => Json.fromFields(Seq( Some("currencyRateEvent" -> t.currencyRateEvent.asJson), Some("url" -> t.url.asJson) ).flatten) } implicit def decodeFlowerateWebhookRegisterRequest: Decoder[WebhookRegisterRequest] = Decoder.instance { c => for { clientId <- c.downField("clientId").as[String] webhooks <- c.downField("webhooks").as[Seq[io.cheng.flowerate.v0.models.WebhookDetail]] } yield { WebhookRegisterRequest( clientId = clientId, webhooks = webhooks ) } } implicit def encodeFlowerateWebhookRegisterRequest: Encoder[WebhookRegisterRequest] = Encoder.instance { t => Json.fromFields(Seq( Some("clientId" -> t.clientId.asJson), Some("webhooks" -> t.webhooks.asJson) ).flatten) } implicit def decodeFlowerateFixerRateResponse: Decoder[FixerRateResponse] = Decoder.instance { c => c.get[io.cheng.flowerate.v0.models.FixerRatesSuccessResponse]("FixerRatesSuccessResponse") orElse c.get[io.cheng.flowerate.v0.models.FixerRatesFailureResponse]("FixerRatesFailureResponse") orElse Right(io.cheng.flowerate.v0.models.FixerRateResponseUndefinedType(c.value.toString)) } implicit def encodeFlowerateFixerRateResponse: Encoder[FixerRateResponse] = Encoder.instance { case t: io.cheng.flowerate.v0.models.FixerRatesSuccessResponse => Json.fromJsonObject(JsonObject.singleton("FixerRatesSuccessResponse", t.asJson)) case t: io.cheng.flowerate.v0.models.FixerRatesFailureResponse => Json.fromJsonObject(JsonObject.singleton("FixerRatesFailureResponse", t.asJson)) case other => sys.error(s"The type[${other.getClass.getName}] has no JSON encoder") } } }