All Downloads are FREE. Search and download functionalities are using the official Maven repository.

lucuma.odb.json.partnerlink.scala Maven / Gradle / Ivy

// Copyright (c) 2016-2023 Association of Universities for Research in Astronomy, Inc. (AURA)
// For license information see LICENSE or https://opensource.org/licenses/BSD-3-Clause

package lucuma.odb.json

import cats.syntax.either.*
import io.circe.Decoder
import io.circe.Encoder
import io.circe.Json
import io.circe.syntax.*
import lucuma.core.enums.Partner
import lucuma.core.enums.PartnerLinkType
import lucuma.core.model.PartnerLink

trait PartnerLinkCodec {

  given Decoder[PartnerLink.HasPartner] =
    Decoder.instance { c =>
      c.downField("partner").as[Partner].map(PartnerLink.HasPartner.apply)
    }

  given Encoder[PartnerLink.HasPartner] =
    Encoder.instance { a =>
      Json.obj(
        "linkType" -> a.linkType.asJson,
        "partner"  -> a.partner.asJson
      )
    }

  given Decoder[PartnerLink] =
    Decoder.instance { c =>
      c.downField("linkType").as[PartnerLinkType].flatMap:
        case PartnerLinkType.HasPartner            => c.as[PartnerLink.HasPartner]
        case PartnerLinkType.HasNonPartner         => PartnerLink.HasNonPartner.asRight
        case PartnerLinkType.HasUnspecifiedPartner => PartnerLink.HasUnspecifiedPartner.asRight
    }

  given Encoder[PartnerLink] =
    Encoder.instance[PartnerLink] {
      case p: PartnerLink.HasPartner                 => p.asJson
      case _: PartnerLink.HasNonPartner.type         => Json.obj("linkType" -> PartnerLink.HasNonPartner.linkType.asJson)
      case _: PartnerLink.HasUnspecifiedPartner.type => Json.obj("linkType" -> PartnerLink.HasUnspecifiedPartner.linkType.asJson)
    }

}

object partnerlink extends PartnerLinkCodec




© 2015 - 2024 Weber Informatics LLC | Privacy Policy