/** * Generated by API Builder - https://www.apibuilder.io * Service version: 0.0.1-dev * User agent: apibuilder app.apibuilder.io/shopr/clickouts-api/0.0.1-dev/http4s_0_23 */ package com.shopr.api.clickouts.api.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 com.shopr.api.clickouts.api.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 jsonDecoderClickoutsApiClientOrigin: Decoder[com.shopr.api.clickouts.api.v0.models.ClientOrigin] = Decoder.decodeString.map(com.shopr.api.clickouts.api.v0.models.ClientOrigin(_)) implicit val jsonEncoderClickoutsApiClientOrigin: Encoder[com.shopr.api.clickouts.api.v0.models.ClientOrigin] = Encoder.encodeString.contramap[com.shopr.api.clickouts.api.v0.models.ClientOrigin](_.toString) implicit def decodeClickoutsApiClickout: Decoder[Clickout] = Decoder.instance { c => for { productId <- c.downField("productId").as[String] seller <- c.downField("seller").as[String] sellerProductId <- c.downField("sellerProductId").as[String] price <- c.downField("price").as[BigDecimal] deepUrl <- c.downField("deepUrl").as[String] lowestPrice <- c.downField("lowestPrice").as[BigDecimal] highestPrice <- c.downField("highestPrice").as[BigDecimal] offerCount <- c.downField("offerCount").as[Int] offerPosition <- c.downField("offerPosition").as[Int] categoryId <- c.downField("categoryId").as[String] tracking <- c.downField("tracking").as[com.shopr.api.clickouts.api.v0.models.Tracking] creationTime <- c.downField("creationTime").as[_root_.java.time.Instant] } yield { Clickout( productId = productId, seller = seller, sellerProductId = sellerProductId, price = price, deepUrl = deepUrl, lowestPrice = lowestPrice, highestPrice = highestPrice, offerCount = offerCount, offerPosition = offerPosition, categoryId = categoryId, tracking = tracking, creationTime = creationTime ) } } implicit def encodeClickoutsApiClickout: Encoder[Clickout] = Encoder.instance { t => Json.fromFields(Seq( Some("productId" -> t.productId.asJson), Some("seller" -> t.seller.asJson), Some("sellerProductId" -> t.sellerProductId.asJson), Some("price" -> t.price.asJson), Some("deepUrl" -> t.deepUrl.asJson), Some("lowestPrice" -> t.lowestPrice.asJson), Some("highestPrice" -> t.highestPrice.asJson), Some("offerCount" -> t.offerCount.asJson), Some("offerPosition" -> t.offerPosition.asJson), Some("categoryId" -> t.categoryId.asJson), Some("tracking" -> t.tracking.asJson), Some("creationTime" -> t.creationTime.asJson) ).flatten) } implicit def decodeClickoutsApiErrorCode: Decoder[ErrorCode] = Decoder.instance { c => for { code <- c.downField("code").as[String] localizedStringCode <- c.downField("localized_string_code").as[String] } yield { ErrorCode( code = code, localizedStringCode = localizedStringCode ) } } implicit def encodeClickoutsApiErrorCode: Encoder[ErrorCode] = Encoder.instance { t => Json.fromFields(Seq( Some("code" -> t.code.asJson), Some("localized_string_code" -> t.localizedStringCode.asJson) ).flatten) } implicit def decodeClickoutsApiErrorResponse: Decoder[ErrorResponse] = Decoder.instance { c => for { message <- c.downField("message").as[Option[String]] errorCodes <- c.downField("error_codes").as[Seq[com.shopr.api.clickouts.api.v0.models.ErrorCode]] fingerprint <- c.downField("fingerprint").as[Option[String]] } yield { ErrorResponse( message = message, errorCodes = errorCodes, fingerprint = fingerprint ) } } implicit def encodeClickoutsApiErrorResponse: Encoder[ErrorResponse] = Encoder.instance { t => Json.fromFields(Seq( t.message.map(t => "message" -> t.asJson), Some("error_codes" -> t.errorCodes.asJson), t.fingerprint.map(t => "fingerprint" -> t.asJson) ).flatten) } implicit def decodeClickoutsApiStatus: Decoder[Status] = Decoder.instance { c => for { response <- c.downField("response").as[String] } yield { Status( response = response ) } } implicit def encodeClickoutsApiStatus: Encoder[Status] = Encoder.instance { t => Json.fromFields(Seq( Some("response" -> t.response.asJson) ).flatten) } implicit def decodeClickoutsApiTracking: Decoder[Tracking] = Decoder.instance { c => for { ipAddress <- c.downField("ipAddress").as[String] origin <- c.downField("origin").as[com.shopr.api.clickouts.api.v0.models.ClientOrigin] userAgent <- c.downField("userAgent").as[Option[String]] referrer <- c.downField("referrer").as[Option[String]] } yield { Tracking( ipAddress = ipAddress, origin = origin, userAgent = userAgent, referrer = referrer ) } } implicit def encodeClickoutsApiTracking: Encoder[Tracking] = Encoder.instance { t => Json.fromFields(Seq( Some("ipAddress" -> t.ipAddress.asJson), Some("origin" -> t.origin.asJson), t.userAgent.map(t => "userAgent" -> t.asJson), t.referrer.map(t => "referrer" -> t.asJson) ).flatten) } } }