8000 Generate sum types for @oneOf inputs by rpiaggio · Pull Request #739 · gemini-hlsw/clue · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.sbt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
lazy val V = _root_.scalafix.sbt.BuildInfo

ThisBuild / tlBaseVersion := "0.50"
ThisBuild / tlBaseVersion := "0.51"
ThisBuild / tlCiReleaseBranches := Seq("master")
ThisBuild / tlJdkRelease := Some(8)
ThisBuild / githubWorkflowJavaVersions := Seq("11", "17").map(JavaSpec.temurin(_))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -386,14 +386,21 @@ input DeclinationDecimalInput {
}

# Declination, choose one of the available units
input DeclinationInput {
input DeclinationInput @oneOf {
microarcseconds: Long
degrees: BigDecimal
dms: DmsString
fromLong: DeclinationLongInput
fromDecimal: DeclinationDecimalInput
}

scalar GroupId

input GroupElementInput @oneOf {
groupId: GroupId
observationId: ObservationId
}

# Integral value in Declination
input DeclinationLongInput {
# integral value in associated units
Expand Down
1 change: 1 addition & 0 deletions gen/input/src/main/scala/test/LucumaODBSchema.scala
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ trait LucumaODB {
type TargetId = String
type NonEmptyString = String
type ConstraintSetId = String
type GroupId = String
}
}
// format: on
91 changes: 84 additions & 7 deletions gen/output/src/main/scala/test/LucumaODBSchema.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ object LucumaODB {
type TargetId = String
type NonEmptyString = String
type ConstraintSetId = String
type GroupId = String
def ignoreUnusedImportScalars(): Unit = ()
}
object Enums {
Expand Down Expand Up @@ -1684,16 +1685,92 @@ object LucumaODB {
implicit val showDeclinationDecimalInput: cats.Show[DeclinationDecimalInput] = cats.Show.fromToString
implicit val jsonEncoderDeclinationDecimalInput: io.circe.Encoder.AsObject[DeclinationDecimalInput] = io.circe.generic.semiauto.deriveEncoder[DeclinationDecimalInput].mapJsonObject(clue.data.Input.dropIgnores)
}
case class DeclinationInput(val microarcseconds: clue.data.Input[Long] = clue.data.Ignore, val degrees: clue.data.Input[BigDecimal] = clue.data.Ignore, val dms: clue.data.Input[DmsString] = clue.data.Ignore, val fromLong: clue.data.Input[DeclinationLongInput] = clue.data.Ignore, val fromDecimal: clue.data.Input[DeclinationDecimalInput] = clue.data.Ignore)
sealed trait DeclinationInput
object DeclinationInput {
val microarcseconds: monocle.Lens[DeclinationInput, clue.data.Input[Long]] = monocle.macros.GenLens[DeclinationInput](_.microarcseconds)
val degrees: monocle.Lens[DeclinationInput, clue.data.Input[BigDecimal]] = monocle.macros.GenLens[DeclinationInput](_.degrees)
val dms: monocle.Lens[DeclinationInput, clue.data.Input[DmsString]] = monocle.macros.GenLens[DeclinationInput](_.dms)
val fromLong: monocle.Lens[DeclinationInput, clue.data.Input[DeclinationLongInput]] = monocle.macros.GenLens[DeclinationInput](_.fromLong)
val fromDecimal: monocle.Lens[DeclinationInput, clue.data.Input[DeclinationDecimalInput]] = monocle.macros.GenLens[DeclinationInput](_.fromDecimal)
case class Microarcseconds(val value: Long) extends DeclinationInput()
object Microarcseconds {
val value: monocle.Iso[DeclinationInput.Microarcseconds, Long] = monocle.Focus[DeclinationInput.Microarcseconds](_.value)
implicit val eqMicroarcseconds: cats.Eq[DeclinationInput.Microarcseconds] = cats.Eq.fromUniversalEquals
implicit val showMicroarcseconds: cats.Show[DeclinationInput.Microarcseconds] = cats.Show.fromToString
}
case class Degrees(val value: BigDecimal) extends DeclinationInput()
object Degrees {
val value: monocle.Iso[DeclinationInput.Degrees, BigDecimal] = monocle.Focus[DeclinationInput.Degrees](_.value)
implicit val eqDegrees: cats.Eq[DeclinationInput.Degrees] = cats.Eq.fromUniversalEquals
implicit val showDegrees: cats.Show[DeclinationInput.Degrees] = cats.Show.fromToString
}
case class Dms(val value: DmsString) extends DeclinationInput()
object Dms {
val value: monocle.Iso[DeclinationInput.Dms, DmsString] = monocle.Focus[DeclinationInput.Dms](_.value)
implicit val eqDms: cats.Eq[DeclinationInput.Dms] = cats.Eq.fromUniversalEquals
implicit val showDms: cats.Show[DeclinationInput.Dms] = cats.Show.fromToString
}
case class FromLong(val value: DeclinationLongInput) extends DeclinationInput()
object FromLong {
val value: monocle.Iso[DeclinationInput.FromLong, DeclinationLongInput] = monocle.Focus[DeclinationInput.FromLong](_.value)
implicit val eqFromLong: cats.Eq[DeclinationInput.FromLong] = cats.Eq.fromUniversalEquals
implicit val showFromLong: cats.Show[DeclinationInput.FromLong] = cats.Show.fromToString
}
case class FromDecimal(val value: DeclinationDecimalInput) extends DeclinationInput()
object FromDecimal {
val value: monocle.Iso[DeclinationInput.FromDecimal, DeclinationDecimalInput] = monocle.Focus[DeclinationInput.FromDecimal](_.value)
implicit val eqFromDecimal: cats.Eq[DeclinationInput.FromDecimal] = cats.Eq.fromUniversalEquals
implicit val showFromDecimal: cats.Show[DeclinationInput.FromDecimal] = cats.Show.fromToString
}
val microarcseconds: monocle.Prism[DeclinationInput, DeclinationInput.Microarcseconds] = monocle.macros.GenPrism[DeclinationInput, DeclinationInput.Microarcseconds]
val degrees: monocle.Prism[DeclinationInput, DeclinationInput.Degrees] = monocle.macros.GenPrism[DeclinationInput, DeclinationInput.Degrees]
val dms: monocle.Prism[DeclinationInput, DeclinationInput.Dms] = monocle.macros.GenPrism[DeclinationInput, DeclinationInput.Dms]
val fromLong: monocle.Prism[DeclinationInput, DeclinationInput.FromLong] = monocle.macros.GenPrism[DeclinationInput, DeclinationInput.FromLong]
val fromDecimal: monocle.Prism[DeclinationInput, DeclinationInput.FromDecimal] = monocle.macros.GenPrism[DeclinationInput, DeclinationInput.FromDecimal]
implicit val eqDeclinationInput: cats.Eq[DeclinationInput] = cats.Eq.fromUniversalEquals
implicit val showDeclinationInput: cats.Show[DeclinationInput] = cats.Show.fromToString
implicit val jsonEncoderDeclinationInput: io.circe.Encoder.AsObject[DeclinationInput] = io.circe.generic.semiauto.deriveEncoder[DeclinationInput].mapJsonObject(clue.data.Input.dropIgnores)
implicit val jsonEncoderDeclinationInput: io.circe.Encoder.AsObject[DeclinationInput] = io.circe.Encoder.AsObject.instance[DeclinationInput] {
instance => io.circe.JsonObject.empty.+: {
import io.circe.syntax._
instance match {
case DeclinationInput.Microarcseconds(value) =>
"microarcseconds" -> value.asJson
case DeclinationInput.Degrees(value) =>
"degrees" -> value.asJson
case DeclinationInput.Dms(value) =>
"dms" -> value.asJson
case DeclinationInput.FromLong(value) =>
"fromLong" -> value.asJson
case DeclinationInput.FromDecimal(value) =>
"fromDecimal" -> value.asJson
}
}
}
}
sealed trait GroupElementInput
object GroupElementInput {
case class GroupId(val value: Scalars.GroupId) extends GroupElementInput()
object GroupId {
val value: monocle.Iso[GroupElementInput.GroupId, Scalars.GroupId] = monocle.Focus[GroupElementInput.GroupId](_.value)
implicit val eqGroupId: cats.Eq[GroupElementInput.GroupId] = cats.Eq.fromUniversalEquals
implicit val showGroupId: cats.Show[GroupElementInput.GroupId] = cats.Show.fromToString
}
case class ObservationId(val value: Scalars.ObservationId) extends GroupElementInput()
object ObservationId {
val value: monocle.Iso[GroupElementInput.ObservationId, Scalars.ObservationId] = monocle.Focus[GroupElementInput.ObservationId](_.value)
implicit val eqObservationId: cats.Eq[GroupElementInput.ObservationId] = cats.Eq.fromUniversalEquals
implicit val showObservationId: cats.Show[GroupElementInput.ObservationId] = cats.Show.fromToString
}
val groupId: monocle.Prism[GroupElementInput, GroupElementInput.GroupId] = monocle.macros.GenPrism[GroupElementInput, GroupElementInput.GroupId]
val observationId: monocle.Prism[GroupElementInput, GroupElementInput.ObservationId] = monocle.macros.GenPrism[GroupElementInput, GroupElementInput.ObservationId]
implicit val eqGroupElementInput: cats.Eq[GroupElementInput] = cats.Eq.fromUniversalEquals
implicit val showGroupElementInput: cats.Show[GroupElementInput] = cats.Show.fromToString
implicit val jsonEncoderGroupElementInput: io.circe.Encoder.AsObject[GroupElementInput] = io.circe.Encoder.AsObject.instance[GroupElementInput] {
instance => io.circe.JsonObject.empty.+: {
import io.circe.syntax._
instance match {
case GroupElementInput.GroupId(value) =>
"groupId" -> value.asJson
case GroupElementInput.ObservationId(value) =>
"observationId" -> value.asJson
}
}
}
}
case class DeclinationLongInput(val value: Long, val units: DeclinationUnits)
object DeclinationLongInput {
Expand Down
10 changes: 6 additions & 4 deletions gen/output/src/main/scala/test/LucumaQuery.scala
Original file line number Diff line number Diff line change
Expand Up @@ -54,18 +54,20 @@ object LucumaQuery extends GraphQLOperation[LucumaODB] {
object Tracking {
case class Sidereal(val epoch: EpochString) extends Tracking()
object Sidereal {
val epoch: monocle.Lens[Data.Program.Targets.Nodes.Tracking.Sidereal, EpochString] = monocle.macros.GenLens[Data.Program.Targets.Nodes.Tracking.Sidereal](_.epoch)
val epoch: monocle.Iso[Data.Program.Targets.Nodes.Tracking.Sidereal, EpochString] = monocle.Focus[Data.Program.Targets.Nodes.Tracking.Sidereal](_.epoch)
implicit val eqSidereal: cats.Eq[Data.Program.Targets.Nodes.Tracking.Sidereal] = cats.Eq.fromUniversalEquals
implicit val showSidereal: cats.Show[Data.Program.Targets.Nodes.Tracking.Sidereal] = cats.Show.fromToString
implicit val jsonDecoderSidereal: io.circe.Decoder[Data.Program.Targets.Nodes.Tracking.Sidereal] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets.Nodes.Tracking.Sidereal]
}
case class Nonsidereal(val keyType: EphemerisKeyType) extends Tracking()
object Nonsidereal {
val keyType: monocle.Lens[Data.Program.Targets.Nodes.Tracking.Nonsidereal, EphemerisKeyType] = monocle.macros.GenLens[Data.Program.Targets.Nodes.Tracking.Nonsidereal](_.keyType)
val keyType: monocle.Iso[Data.Program.Targets.Nodes.Tracking.Nonsidereal, EphemerisKeyType] = monocle.Focus[Data.Program.Targets.Nodes.Tracking.Nonsidereal](_.keyType)
implicit val eqNonsidereal: cats.Eq[Data.Program.Targets.Nodes.Tracking.Nonsidereal] = cats.Eq.fromUniversalEquals
implicit val showNonsidereal: cats.Show[Data.Program.Targets.Nodes.Tracking.Nonsidereal] = cats.Show.fromToString
implicit val jsonDecoderNonsidereal: io.circe.Decoder[Data.Program.Targets.Nodes.Tracking.Nonsidereal] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets.Nodes.Tracking.Nonsidereal]
}
val sidereal: monocle.Prism[Data.Program.Targets.Nodes.Tracking, Data.Program.Targets.Nodes.Tracking.Sidereal] = monocle.macros.GenPrism[Data.Program.Targets.Nodes.Tracking, Data.Program.Targets.Nodes.Tracking.Sidereal]
val nonsidereal: monocle.Prism[Data.Program.Targets.Nodes.Tracking, Data.Program.Targets.Nodes.Tracking.Nonsidereal] = monocle.macros.GenPrism[Data.Program.Targets.Nodes.Tracking, Data.Program.Targets.Nodes.Tracking.Nonsidereal]
implicit val eqTracking: cats.Eq[Data.Program.Targets.Nodes.Tracking] = cats.Eq.fromUniversalEquals
implicit val showTracking: cats.Show[Data.Program.Targets.Nodes.Tracking] = cats.Show.fromToString
implicit val jsonDecoderTracking: io.circe.Decoder[Data.Program.Targets.Nodes.Tracking] = List[io.circe.Decoder[Data.Program.Targets.Nodes.Tracking]](io.circe.Decoder[Data.Program.Targets.Nodes.Tracking.Sidereal].asInstanceOf[io.circe.Decoder[Data.Program.Targets.Nodes.Tracking]], io.circe.Decoder[Data.Program.Targets.Nodes.Tracking.Nonsidereal].asInstanceOf[io.circe.Decoder[Data.Program.Targets.Nodes.Tracking]]).reduceLeft(_ or _)
Expand All @@ -77,7 +79,7 @@ object LucumaQuery extends GraphQLOperation[LucumaODB] {
implicit val showNodes: cats.Show[Data.Program.Targets.Nodes] = cats.Show.fromToString
implicit val jsonDecoderNodes: io.circe.Decoder[Data.Program.Targets.Nodes] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets.Nodes]
}
val nodes: monocle.Lens[Data.Program.Targets, List[Data.Program.Targets.Nodes]] = monocle.macros.GenLens[Data.Program.Targets](_.nodes)
val nodes: monocle.Iso[Data.Program.Targets, List[Data.Program.Targets.Nodes]] = monocle.Focus[Data.Program.Targets](_.nodes)
implicit val eqTargets: cats.Eq[Data.Program.Targets] = cats.Eq.fromUniversalEquals
implicit val showTargets: cats.Show[Data.Program.Targets] = cats.Show.fromToString
implicit val jsonDecoderTargets: io.circe.Decoder[Data.Program.Targets] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets]
Expand All @@ -89,7 +91,7 @@ object LucumaQuery extends GraphQLOperation[LucumaODB] {
implicit val showProgram: cats.Show[Data.Program] = cats.Show.fromToString
implicit val jsonDecoderProgram: io.circe.Decoder[Data.Program] = io.circe.generic.semiauto.deriveDecoder[Data.Program]
}
val program: monocle.Lens[Data, Option[Data.Program]] = monocle.macros.GenLens[Data](_.program)
val program: monocle.Iso[Data, Option[Data.Program]] = monocle.Focus[Data](_.program)
implicit val eqData: cats.Eq[Data] = cats.Eq.fromUniversalEquals
implicit val showData: cats.Show[Data] = cats.Show.fromToString
implicit val jsonDecoderData: io.circe.Decoder[Data] = io.circe.generic.semiauto.deriveDecoder[Data]
Expand Down
6 changes: 3 additions & 3 deletions gen/output/src/main/scala/test/LucumaQuery2.scala
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ object LucumaQuery2 extends GraphQLOperation[LucumaODB] {
object Nodes {
case class Tracking(val epoch: EpochString)
object Tracking {
val epoch: monocle.Lens[Data.Program.Targets.Nodes.Tracking, EpochString] = monocle.macros.GenLens[Data.Program.Targets.Nodes.Tracking](_.epoch)
val epoch: monocle.Iso[Data.Program.Targets.Nodes.Tracking, EpochString] = monocle.Focus[Data.Program.Targets.Nodes.Tracking](_.epoch)
implicit val eqTracking: cats.Eq[Data.Program.Targets.Nodes.Tracking] = cats.Eq.fromUniversalEquals
implicit val showTracking: cats.Show[Data.Program.Targets.Nodes.Tracking] = cats.Show.fromToString
implicit val jsonDecoderTracking: io.circe.Decoder[Data.Program.Targets.Nodes.Tracking] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets.Nodes.Tracking]
Expand All @@ -61,7 +61,7 @@ object LucumaQuery2 extends GraphQLOperation[LucumaODB] {
implicit val showNodes: cats.Show[Data.Program.Targets.Nodes] = cats.Show.fromToString
implicit val jsonDecoderNodes: io.circe.Decoder[Data.Program.Targets.Nodes] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets.Nodes]
}
val nodes: monocle.Lens[Data.Program.Targets, List[Data.Program.Targets.Nodes]] = monocle.macros.GenLens[Data.Program.Targets](_.nodes)
val nodes: monocle.Iso[Data.Program.Targets, List[Data.Program.Targets.Nodes]] = monocle.Focus[Data.Program.Targets](_.nodes)
implicit val eqTargets: cats.Eq[Data.Program.Targets] = cats.Eq.fromUniversalEquals
implicit val showTargets: cats.Show[Data.Program.Targets] = cats.Show.fromToString
implicit val jsonDecoderTargets: io.circe.Decoder[Data.Program.Targets] = io.circe.generic.semiauto.deriveDecoder[Data.Program.Targets]
Expand All @@ -73,7 +73,7 @@ object LucumaQuery2 extends GraphQLOperation[LucumaODB] {
implicit val showProgram: cats.Show[Data.Program] = cats.Show.fromToString
implicit val jsonDecoderProgram: io.circe.Decoder[Data.Program] = io.circe.generic.semiauto.deriveDecoder[Data.Program]
}
val program: monocle.Lens[Data, Option[Data.Program]] = monocle.macros.GenLens[Data](_.program)
val program: monocle.Iso[Data, Option[Data.Program]] = monocle.Focus[Data](_.program)
implicit val eqData: cats.Eq[Data] = cats.Eq.fromUniversalEquals
implicit val showData: cats.Show[Data] = cats.Show.fromToString
implicit val jsonDecoderData: io.circe.Decoder[Data] = io.circe.generic.semiauto.deriveDecoder[Data]
Expand Down
6 changes: 4 additions & 2 deletions gen/output/src/main/scala/test/LucumaQuery3.scala
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ object LucumaQuery3 extends GraphQLOperation[LucumaODB] {
implicit val showAsterism: cats.Show[Data.Observations.Nodes.ObservationTarget.Asterism] = cats.Show.fromToString
implicit val jsonDecoderAsterism: io.circe.Decoder[Data.Observations.Nodes.ObservationTarget.Asterism] = io.circe.generic.semiauto.deriveDecoder[Data.Observations.Nodes.ObservationTarget.Asterism]
}
val target: monocle.Prism[Data.Observations.Nodes.ObservationTarget, Data.Observations.Nodes.ObservationTarget.Target] = monocle.macros.GenPrism[Data.Observations.Nodes.ObservationTarget, Data.Observations.Nodes.ObservationTarget.Target]
val asterism: monocle.Prism[Data.Observations.Nodes.ObservationTarget, Data.Observations.Nodes.ObservationTarget.Asterism] = monocle.macros.GenPrism[Data.Observations.Nodes.ObservationTarget, Data.Observations.Nodes.ObservationTarget.Asterism]
implicit val eqObservationTarget: cats.Eq[Data.Observations.Nodes.ObservationTarget] = cats.Eq.fromUniversalEquals
implicit val showObservationTarget: cats.Show[Data.Observations.Nodes.ObservationTarget] = cats.Show.fromToString
implicit val jsonDecoderObservationTarget: io.circe.Decoder[Data.Observations.Nodes.ObservationTarget] = List[io.circe.Decoder[Data.Observations.Nodes.ObservationTarget]](io.circe.Decoder[Data.Observations.Nodes.ObservationTarget.Target].asInstanceOf[io.circe.Decoder[Data.Observations.Nodes.ObservationTarget]], io.circe.Decoder[Data.Observations.Nodes.ObservationTarget.Asterism].asInstanceOf[io.circe.Decoder[Data.Observations.Nodes.ObservationTarget]]).reduceLeft(_ or _)
Expand All @@ -73,12 +75,12 @@ object LucumaQuery3 extends GraphQLOperation[LucumaODB] {
implicit val showNodes: cats.Show[Data.Observations.Nodes] = cats.Show.fromToString
implicit val jsonDecoderNodes: io.circe.Decoder[Data.Observations.Nodes] = io.circe.generic.semiauto.deriveDecoder[Data.Observations.Nodes]
}
val nodes: monocle.Lens[Data.Observations, List[Data.Observations.Nodes]] = monocle.macros.GenLens[Data.Observations](_.nodes) 72F6
val nodes: monocle.Iso[Data.Observations, List[Data.Observations.Nodes]] = monocle.Focus[Data.Observations](_.nodes)
implicit val eqObservations: cats.Eq[Data.Observations] = cats.Eq.fromUniversalEquals
implicit val showObservations: cats.Show[Data.Observations] = cats.Show.fromToString
implicit val jsonDecoderObservations: io.circe.Decoder[Data.Observations] = io.circe.generic.semiauto.deriveDecoder[Data.Observations]
}
val observations: monocle.Lens[Data, Data.Observations] = monocle.macros.GenLens[Data](_.observations)
val observations: monocle.Iso[Data, Data.Observations] = monocle.Focus[Data](_.observations)
implicit val eqData: cats.Eq[Data] = cats.Eq.fromUniversalEquals
implicit val showData: cats.Show[Data] = cats.Show.fromToString
implicit val jsonDecoderData: io.circe.Decoder[Data] = io.circe.generic.semiauto.deriveDecoder[Data]
Expand Down
Loading
Loading
0