From b38aea003a8f93dd74b8112bbc4314bf98330009 Mon Sep 17 00:00:00 2001 From: Pawel Iwanow <7759586+pwliwanow@users.noreply.github.com> Date: Tue, 16 Apr 2024 13:56:17 +0200 Subject: [PATCH] Upgrade zio-schema and adjust OpenAPI and CSV modules --- .../scala/dev/chopsticks/csv/CsvDecoder.scala | 1424 +++++---- .../scala/dev/chopsticks/csv/CsvEncoder.scala | 985 +----- .../dev/chopsticks/csv/CsvDecoderTest.scala | 4 +- .../OpenApiZioSchemaCirceConverter.scala | 2699 ++++++++--------- .../OpenApiZioSchemaToTapirConverter.scala | 241 +- .../openapi/OpenApiZioSchemas.scala | 18 +- .../openapi/common/ConverterCacheKey.scala | 44 + .../common/OpenApiConverterUtils.scala | 50 + .../openapi/common/OpenApiSettings.scala | 16 + project/Dependencies.scala | 4 +- 10 files changed, 2406 insertions(+), 3079 deletions(-) create mode 100644 chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/ConverterCacheKey.scala create mode 100644 chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiConverterUtils.scala create mode 100644 chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiSettings.scala diff --git a/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvDecoder.scala b/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvDecoder.scala index 7bda5e02..ffefd264 100644 --- a/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvDecoder.scala +++ b/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvDecoder.scala @@ -1,8 +1,9 @@ package dev.chopsticks.csv import dev.chopsticks.openapi.{OpenApiParsedAnnotations, OpenApiSumTypeSerDeStrategy, OpenApiValidation} +import dev.chopsticks.openapi.common.{ConverterCache, OpenApiConverterUtils} import sttp.tapir.Validator -import zio.schema.{FieldSet, Schema, StandardType} +import zio.schema.{FieldSet, Schema, StandardType, TypeId} import zio.Chunk import zio.schema.Schema.Primitive @@ -150,6 +151,23 @@ object CsvDecoder extends CsvProductDecoders { else Some(options.nestedFieldLabel(columnName, "*")) } + def caseClass0Decoder[A](construct: () => A): CsvDecoder[A] = new CsvDecoder[A] { + override val isOptional = false + override val isPrimitive = false + override def parseAsOption( + row: Map[String, String], + columnName: Option[String] + ): Either[List[CsvDecoderError], Option[A]] = { + Right(Some(construct())) + } + override def parse( + value: Map[String, String], + column: Option[String] + ): Either[List[CsvDecoderError], A] = { + Right(construct()) + } + } + private val unitDecoder: CsvDecoder[Unit] = createPrimitive { case (v, _) if v.isBlank => Right(()) case (_, col) => Left(List(CsvDecoderError(s"Cannot parse value to Unit type.", col))) @@ -163,6 +181,13 @@ object CsvDecoder extends CsvProductDecoders { } } + private val byteDecoder: CsvDecoder[Byte] = createPrimitive { case (value, col) => + value.toByteOption match { + case Some(n) => Right(n) + case None => Left(List(CsvDecoderError(s"Cannot parse byte.", col))) + } + } + private val shortDecoder: CsvDecoder[Short] = createPrimitive { case (value, col) => value.toShortOption match { case Some(n) => Right(n) @@ -406,7 +431,29 @@ object CsvDecoder extends CsvProductDecoders { private def columnNotProvided = new RuntimeException(s"Error in CsvDecoder, column was not provided for a primitive value.") - private class Converter(options: CsvCodecOptions) { + final private[csv] class LazyDecoder[A] extends CsvDecoder[A] with ConverterCache.Lazy[CsvDecoder[A]] { + override def isOptional: Boolean = get.isOptional + override def isPrimitive: Boolean = get.isOptional + override def parse(row: Map[String, String], columnName: Option[String]): Either[List[CsvDecoderError], A] = + get.parse(row, columnName) + override def parseAsOption( + row: Map[String, String], + columnName: Option[String] + ): Either[List[CsvDecoderError], Option[A]] = + get.parseAsOption(row, columnName) + } + + private class Converter( + options: CsvCodecOptions, + cache: ConverterCache[CsvDecoder] = new ConverterCache[CsvDecoder]() + ) { + private def convertUsingCache[A]( + typeId: TypeId, + annotations: OpenApiParsedAnnotations[A] + )(convert: => CsvDecoder[A]): CsvDecoder[A] = { + cache.convertUsingCache(typeId, annotations)(convert)(() => new LazyDecoder[A]()) + } + // scalafmt: { maxColumn = 800, optIn.configStyleArguments = false } def convert[A](schema: Schema[A] /*, modifiers: Any => Any*/ ): CsvDecoder[A] = schema match { @@ -419,7 +466,7 @@ object CsvDecoder extends CsvProductDecoders { extractAnnotations(annotations) ) - case Schema.SetSchema(_, _) => + case Schema.Set(_, _) => ??? case Schema.Transform(schema, f, _, annotations, _) => @@ -436,525 +483,786 @@ object CsvDecoder extends CsvProductDecoders { case l @ Schema.Lazy(_) => convert(l.schema) - case Schema.GenericRecord(fieldSet, annotations) => - genericRecordConverter(fieldSet, annotations) + case Schema.GenericRecord(id, fieldSet, annotations) => + genericRecordConverter(id, fieldSet, annotations) - case Schema.CaseClass1(f1, construct, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val baseDecoder = forProduct1( - options = options, - names = ArraySeq(f1.label), - decoders = ArraySeq(decoder1) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass2(f1, f2, construct, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val baseDecoder = forProduct2( - options = options, - names = ArraySeq(f1.label, f2.label), - decoders = ArraySeq(decoder1, decoder2) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass3(f1, f2, f3, construct, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val baseDecoder = forProduct3( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label), - decoders = ArraySeq(decoder1, decoder2, decoder3) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass4(f1, f2, f3, f4, construct, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val baseDecoder = forProduct4( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass5(f1, f2, f3, f4, f5, construct, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val baseDecoder = forProduct5( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass6(f1, f2, f3, f4, f5, f6, construct, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val baseDecoder = forProduct6( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, construct, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val baseDecoder = forProduct7( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, construct, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val baseDecoder = forProduct8( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass9(f1, f2, f3, f4, f5, f6, f7, f8, f9, construct, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val baseDecoder = forProduct9( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass10(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, construct, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val baseDecoder = forProduct10( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass11(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, construct, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val baseDecoder = forProduct11( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass12(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, construct, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val baseDecoder = forProduct12( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass13(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val baseDecoder = forProduct13( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass14(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val baseDecoder = forProduct14( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass15(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val baseDecoder = forProduct15( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass16(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val baseDecoder = forProduct16( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass17(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val baseDecoder = forProduct17( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label, f17.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass18(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val baseDecoder = forProduct18( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label, f17.label, f18.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass19(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => + case Schema.CaseClass0(id, construct, annotations) => val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val baseDecoder = forProduct19( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label, f17.label, f18.label, f19.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass20(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val decoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val baseDecoder = forProduct20( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label, f17.label, f18.label, f19.label, f20.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass21(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val decoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val decoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) - val baseDecoder = forProduct21( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label, f17.label, f18.label, f19.label, f20.label, f21.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21) - )(construct) - addAnnotations(baseDecoder, parsed) - - case Schema.CaseClass22(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => + convertUsingCache(id, parsed) { + val baseDecoder = caseClass0Decoder(construct) + addAnnotations(baseDecoder, parsed) + } + + case Schema.CaseClass1(id, f1, construct, annotations) => val parsed = extractAnnotations[A](annotations) - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val decoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val decoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) - val decoder22 = addAnnotations(convert(f22.schema), extractAnnotations(f22.annotations)) - val baseDecoder = forProduct22( - options = options, - names = ArraySeq(f1.label, f2.label, f3.label, f4.label, f5.label, f6.label, f7.label, f8.label, f9.label, f10.label, f11.label, f12.label, f13.label, f14.label, f15.label, f16.label, f17.label, f18.label, f19.label, f20.label, f21.label, f22.label), - decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21, decoder22) - )(construct) - addAnnotations(baseDecoder, parsed) + convertUsingCache(id, parsed) { + val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) + val baseDecoder = forProduct1( + options = options, + names = ArraySeq(f1.name.toString), + decoders = ArraySeq(decoder1) + )(construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum1(c1, annotations) => - convertEnum[A](annotations, c1) + case s @ Schema.CaseClass2(_, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val baseDecoder = forProduct2( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString + ), + decoders = ArraySeq(decoder1, decoder2) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum2(c1, c2, annotations) => - convertEnum[A](annotations, c1, c2) + case s @ Schema.CaseClass3(_, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val baseDecoder = forProduct3( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum3(c1, c2, c3, annotations) => - convertEnum[A](annotations, c1, c2, c3) + case s @ Schema.CaseClass4(_, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val baseDecoder = forProduct4( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum4(c1, c2, c3, c4, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4) + case s @ Schema.CaseClass5(_, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val baseDecoder = forProduct5( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum5(c1, c2, c3, c4, c5, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5) + case s @ Schema.CaseClass6(_, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val baseDecoder = forProduct6( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum6(c1, c2, c3, c4, c5, c6, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6) + case s @ Schema.CaseClass7(_, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val baseDecoder = forProduct7( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum7(c1, c2, c3, c4, c5, c6, c7, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7) + case s @ Schema.CaseClass8(_, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val baseDecoder = forProduct8( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum8(c1, c2, c3, c4, c5, c6, c7, c8, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8) + case s @ Schema.CaseClass9(_, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val baseDecoder = forProduct9( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum9(c1, c2, c3, c4, c5, c6, c7, c8, c9, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9) + case s @ Schema.CaseClass10(_, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val baseDecoder = forProduct10( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum10(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10) + case s @ Schema.CaseClass11(_, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val baseDecoder = forProduct11( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum11(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11) + case s @ Schema.CaseClass12(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val baseDecoder = forProduct12( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum12(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) + case s @ Schema.CaseClass13(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val baseDecoder = forProduct13( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum13(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) + case s @ Schema.CaseClass14(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val baseDecoder = forProduct14( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum14(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14) + case s @ Schema.CaseClass15(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val baseDecoder = forProduct15( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum15(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) + case s @ Schema.CaseClass16(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val baseDecoder = forProduct16( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum16(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) + case s @ Schema.CaseClass17(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val baseDecoder = forProduct17( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString, + s.field17.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum17(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17) + case s @ Schema.CaseClass18(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val baseDecoder = forProduct18( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString, + s.field17.name.toString, + s.field18.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum18(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18) + case s @ Schema.CaseClass19(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val baseDecoder = forProduct19( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString, + s.field17.name.toString, + s.field18.name.toString, + s.field19.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum19(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19) + case s @ Schema.CaseClass20(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val decoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val baseDecoder = forProduct20( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString, + s.field17.name.toString, + s.field18.name.toString, + s.field19.name.toString, + s.field20.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum20(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20) + case s @ Schema.CaseClass21(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val decoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val decoder21 = addAnnotations(convert(s.field21.schema), extractAnnotations(s.field21.annotations)) + val baseDecoder = forProduct21( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString, + s.field17.name.toString, + s.field18.name.toString, + s.field19.name.toString, + s.field20.name.toString, + s.field21.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum21(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21) + case s @ Schema.CaseClass22(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val decoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val decoder21 = addAnnotations(convert(s.field21.schema), extractAnnotations(s.field21.annotations)) + val decoder22 = addAnnotations(convert(s.field22.schema), extractAnnotations(s.field22.annotations)) + val baseDecoder = forProduct22( + options = options, + names = ArraySeq( + s.field1.name.toString, + s.field2.name.toString, + s.field3.name.toString, + s.field4.name.toString, + s.field5.name.toString, + s.field6.name.toString, + s.field7.name.toString, + s.field8.name.toString, + s.field9.name.toString, + s.field10.name.toString, + s.field11.name.toString, + s.field12.name.toString, + s.field13.name.toString, + s.field14.name.toString, + s.field15.name.toString, + s.field16.name.toString, + s.field17.name.toString, + s.field18.name.toString, + s.field19.name.toString, + s.field20.name.toString, + s.field21.name.toString, + s.field22.name.toString + ), + decoders = ArraySeq(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21, decoder22) + )(s.construct) + addAnnotations(baseDecoder, parsed) + } - case Schema.Enum22(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22) + case s: Schema.Enum[A] => + convertEnum[A](s.annotations, s.cases) case _ => ??? @@ -964,18 +1272,18 @@ object CsvDecoder extends CsvProductDecoders { private def convertEnum[A]( annotations: Chunk[Any], - cases: Schema.Case[_, A]* + cases: Chunk[Schema.Case[A, _]] ): CsvDecoder[A] = { val enumAnnotations = extractAnnotations[A](annotations) val decodersByName = cases.iterator .map { c => val cAnn = extractAnnotations(c.annotations) val decoder = addAnnotations( - convert(c.codec), + convert(c.schema), extractAnnotations(c.annotations) ).asInstanceOf[CsvDecoder[Any]] - val entityName = cAnn.entityName.getOrElse(throw new RuntimeException( - s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined to derive a CsvDecoder. Received annotations: $cAnn" + val entityName = OpenApiConverterUtils.getCaseEntityName(c, cAnn).getOrElse(throw new RuntimeException( + s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined or be a case class to derive a CsvDecoder. Received annotations: $cAnn" )) entityName -> decoder } @@ -1048,66 +1356,69 @@ object CsvDecoder extends CsvProductDecoders { @SuppressWarnings(Array("org.wartremover.warts.JavaSerializable")) private def genericRecordConverter( + id: TypeId, fieldSet: FieldSet, annotations: Chunk[Any] ): CsvDecoder[ListMap[String, _]] = { val parsed = extractAnnotations[ListMap[String, _]](annotations) - val fieldDecoders = fieldSet.toChunk.iterator - .map { field => - val fieldDecoder = addAnnotations(convert(field.schema), extractAnnotations(field.annotations)) - field.label -> fieldDecoder - } - .toMap - val baseDecoder = new CsvDecoder[ListMap[String, _]] { - override val isOptional = false - override val isPrimitive = false - override def parseAsOption( - row: Map[String, String], - columnName: Option[String] - ): Either[List[CsvDecoderError], Option[ListMap[String, _]]] = { - // if parsing all fields gives Right(None) then the parsing result is Right(None) - val errors = new ListBuffer[CsvDecoderError] - val values = ListMap.newBuilder[String, Any] - var someCount = 0 - - for ((fieldLabel, fieldDecoder) <- fieldDecoders) { - fieldDecoder.parseAsOption(row, Some(options.nestedFieldLabel(columnName, fieldLabel))) match { - case Right(Some(value)) => - someCount += 1 - values.addOne((fieldLabel, value)) - case Right(None) => - values.addOne((fieldLabel, None)) - case Left(errs) => errors.addAll(errs) - } + convertUsingCache(id, parsed) { + val fieldDecoders = fieldSet.toChunk.iterator + .map { field => + val fieldDecoder = addAnnotations(convert(field.schema), extractAnnotations(field.annotations)) + field.name.toString -> fieldDecoder } + .toMap + val baseDecoder = new CsvDecoder[ListMap[String, _]] { + override val isOptional = false + override val isPrimitive = false + override def parseAsOption( + row: Map[String, String], + columnName: Option[String] + ): Either[List[CsvDecoderError], Option[ListMap[String, _]]] = { + // if parsing all fields gives Right(None) then the parsing result is Right(None) + val errors = new ListBuffer[CsvDecoderError] + val values = ListMap.newBuilder[String, Any] + var someCount = 0 + + for ((fieldLabel, fieldDecoder) <- fieldDecoders) { + fieldDecoder.parseAsOption(row, Some(options.nestedFieldLabel(columnName, fieldLabel))) match { + case Right(Some(value)) => + someCount += 1 + values.addOne((fieldLabel, value)) + case Right(None) => + values.addOne((fieldLabel, None)) + case Left(errs) => errors.addAll(errs) + } + } - if (errors.nonEmpty) Left(errors.toList) - else if (someCount == 0) Right(None) - else if (someCount < fieldDecoders.size) { - Left(List(CsvDecoderError.notAllRequiredColumnsExist(errorColumn(options, columnName)))) + if (errors.nonEmpty) Left(errors.toList) + else if (someCount == 0) Right(None) + else if (someCount < fieldDecoders.size) { + Left(List(CsvDecoderError.notAllRequiredColumnsExist(errorColumn(options, columnName)))) + } + else Right(Some(values.result())) } - else Right(Some(values.result())) - } - override def parse( - row: Map[String, String], - column: Option[String] - ): Either[List[CsvDecoderError], ListMap[String, _]] = { - val errors = new ListBuffer[CsvDecoderError] - val values = ListMap.newBuilder[String, Any] - - for ((fieldLabel, fieldDecoder) <- fieldDecoders) { - fieldDecoder.parse(row, Some(options.nestedFieldLabel(column, fieldLabel))) match { - case Right(value) => values.addOne((fieldLabel, value)) - case Left(errs) => errors.addAll(errs) + override def parse( + row: Map[String, String], + column: Option[String] + ): Either[List[CsvDecoderError], ListMap[String, _]] = { + val errors = new ListBuffer[CsvDecoderError] + val values = ListMap.newBuilder[String, Any] + + for ((fieldLabel, fieldDecoder) <- fieldDecoders) { + fieldDecoder.parse(row, Some(options.nestedFieldLabel(column, fieldLabel))) match { + case Right(value) => values.addOne((fieldLabel, value)) + case Left(errs) => errors.addAll(errs) + } } - } - if (errors.isEmpty) Right(values.result()) - else Left(errors.toList) + if (errors.isEmpty) Right(values.result()) + else Left(errors.toList) + } } + addAnnotations(baseDecoder, parsed) } - addAnnotations(baseDecoder, parsed) } private def primitiveConverter[A]( @@ -1118,6 +1429,7 @@ object CsvDecoder extends CsvProductDecoders { case StandardType.UnitType => unitDecoder case StandardType.StringType => stringDecoder case StandardType.BoolType => boolDecoder + case StandardType.ByteType => byteDecoder case StandardType.ShortType => shortDecoder case StandardType.IntType => intDecoder case StandardType.LongType => longDecoder @@ -1137,13 +1449,13 @@ object CsvDecoder extends CsvProductDecoders { case StandardType.ZoneIdType => zoneIdDecoder case StandardType.ZoneOffsetType => zoneOffsetDecoder case StandardType.DurationType => durationDecoder - case StandardType.InstantType(_) => instantDecoder - case StandardType.LocalDateType(_) => localDateDecoder - case StandardType.LocalTimeType(_) => localTimeDecoder - case StandardType.LocalDateTimeType(_) => localDateTimeDecoder - case StandardType.OffsetTimeType(_) => offsetTimeDecoder - case StandardType.OffsetDateTimeType(_) => offsetDateTimeDecoder - case StandardType.ZonedDateTimeType(_) => zonedDateTimeDecoder + case StandardType.InstantType => instantDecoder + case StandardType.LocalDateType => localDateDecoder + case StandardType.LocalTimeType => localTimeDecoder + case StandardType.LocalDateTimeType => localDateTimeDecoder + case StandardType.OffsetTimeType => offsetTimeDecoder + case StandardType.OffsetDateTimeType => offsetDateTimeDecoder + case StandardType.ZonedDateTimeType => zonedDateTimeDecoder } addAnnotations(baseDecoder.asInstanceOf[CsvDecoder[A]], extractAnnotations(annotations)) } diff --git a/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvEncoder.scala b/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvEncoder.scala index a9a9384b..bf232c84 100644 --- a/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvEncoder.scala +++ b/chopsticks-csv/src/main/scala/dev/chopsticks/csv/CsvEncoder.scala @@ -1,10 +1,11 @@ package dev.chopsticks.csv import dev.chopsticks.openapi.{OpenApiParsedAnnotations, OpenApiSumTypeSerDeStrategy} +import dev.chopsticks.openapi.common.{ConverterCache, OpenApiConverterUtils} import org.apache.commons.text.StringEscapeUtils -import zio.schema.{Schema, StandardType} +import zio.schema.{Schema, StandardType, TypeId} import zio.{Chunk, ChunkBuilder} -import zio.schema.Schema.Primitive +import zio.schema.Schema.{Field, Primitive} import java.time.{ DayOfWeek, @@ -21,7 +22,6 @@ import java.time.{ } import java.util.UUID import scala.annotation.nowarn -import scala.collection.immutable.ListMap import scala.collection.mutable import scala.language.existentials @@ -56,7 +56,8 @@ final case class CsvEncodingResult(headers: Chunk[String], rows: Chunk[Chunk[Str } } -trait CsvEncoder[A] { self => +trait CsvEncoder[A] { + self => def encodeSeq(values: Iterable[A]): CsvEncodingResult = { val encodedValues = Chunk.fromIterable(values).map(v => encode(v)) val headers = encodedValues @@ -81,6 +82,7 @@ trait CsvEncoder[A] { self => def encode(value: A): mutable.LinkedHashMap[String, String] = encode(value, columnName = None, mutable.LinkedHashMap.empty) + def encode( value: A, columnName: Option[String], @@ -96,22 +98,12 @@ trait CsvEncoder[A] { self => self.encode(f(value), columnName, acc) } } - } object CsvEncoder { import dev.chopsticks.openapi.OpenApiParsedAnnotations._ - final private case class CacheKey(entityName: String, annotationsHash: Int) - - final private[csv] class LazyEncoder[A]() extends CsvEncoder[A] { - private var _encoder: CsvEncoder[A] = _ - private[CsvEncoder] def set(encoder: CsvEncoder[A]): Unit = - this._encoder = encoder - private def get: CsvEncoder[A] = - if (_encoder == null) throw new RuntimeException("LazyEncoder has not yet been initialized") - else _encoder - + final private[csv] class LazyEncoder[A] extends CsvEncoder[A] with ConverterCache.Lazy[CsvEncoder[A]] { override def encode( value: A, columnName: Option[String], @@ -124,7 +116,7 @@ object CsvEncoder { def derive[A](options: CsvCodecOptions = CsvCodecOptions.default)(implicit schema: Schema[A] ): CsvEncoder[A] = { - new Converter(options, mutable.Map.empty).convert(schema) + new Converter(options).convert(schema) } private val unitEncoder: CsvEncoder[Unit] = new CsvEncoder[Unit] { @@ -141,6 +133,13 @@ object CsvEncoder { } } + private val byteEncoder: CsvEncoder[Byte] = new CsvEncoder[Byte] { + override def encode(value: Byte, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]) = { + val _ = acc.put(columnName.getOrElse(""), value.toString) + acc + } + } + private val shortEncoder: CsvEncoder[Short] = new CsvEncoder[Short] { override def encode(value: Short, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]) = { val _ = acc.put(columnName.getOrElse(""), value.toString) @@ -342,24 +341,15 @@ object CsvEncoder { } } - private class Converter(options: CsvCodecOptions, cache: scala.collection.mutable.Map[CacheKey, LazyEncoder[_]]) { - private def convertUsingCache[A](annotations: OpenApiParsedAnnotations[A])(convert: => CsvEncoder[A]) - : CsvEncoder[A] = { - annotations.entityName match { - case Some(name) => - val cacheKey = CacheKey(name, annotations.hashCode()) - cache.get(cacheKey) match { - case Some(value) => value.asInstanceOf[CsvEncoder[A]] - case None => - val lazyEnc = new LazyEncoder[A]() - val _ = cache.addOne(cacheKey -> lazyEnc) - val result = convert - lazyEnc.set(result) - result - } - case None => - convert - } + private class Converter( + options: CsvCodecOptions, + cache: ConverterCache[CsvEncoder] = new ConverterCache[CsvEncoder]() + ) { + private def convertUsingCache[A]( + typeId: TypeId, + annotations: OpenApiParsedAnnotations[A] + )(convert: => CsvEncoder[A]): CsvEncoder[A] = { + cache.convertUsingCache(typeId, annotations)(convert)(() => new LazyEncoder[A]()) } // scalafmt: { maxColumn = 800, optIn.configStyleArguments = false } @@ -370,11 +360,12 @@ object CsvEncoder { case Schema.Sequence(schemaA, _, toChunk, annotations, _) => addAnnotations( + None, encodeChunk(convert(schemaA), options).contramap(toChunk), extractAnnotations(annotations) ) - case Schema.SetSchema(_, _) => + case Schema.Set(_, _) => ??? case Schema.Transform(schema, _, g, annotations, _) => @@ -385,10 +376,11 @@ object CsvEncoder { case Left(error) => throw new RuntimeException(s"Couldn't transform schema: $error") } } - addAnnotations(baseEncoder, typedAnnotations) + addAnnotations(None, baseEncoder, typedAnnotations) case Schema.Optional(schema, annotations) => addAnnotations[A]( + None, baseEncoder = encodeOption(convert(schema)).asInstanceOf[CsvEncoder[A]], metadata = extractAnnotations(annotations) ) @@ -396,881 +388,68 @@ object CsvEncoder { case l @ Schema.Lazy(_) => convert(l.schema) - case Schema.GenericRecord(fieldSet, annotations) => - val recordAnnotations: OpenApiParsedAnnotations[A] = extractAnnotations[A](annotations) - convertUsingCache(recordAnnotations) { - val fieldEncoders = fieldSet.toChunk - .map { field => - addAnnotations(convert(field.schema), extractAnnotations(field.annotations)) - } - val baseEncoder = new CsvEncoder[ListMap[String, _]] { - override def encode(value: ListMap[String, _], columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - value.iterator - .zip(fieldEncoders.iterator) - .foldLeft(acc) { case (res, ((k, v), encoder)) => - encoder.asInstanceOf[CsvEncoder[Any]].encode(v.asInstanceOf[Any], Some(k), res) - } - } - } - addAnnotations(baseEncoder, recordAnnotations) - } - - case Schema.CaseClass1(f1, _, ext1, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass2(f1, f2, _, ext1, ext2, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass3(f1, f2, f3, _, ext1, ext2, ext3, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass4(f1, f2, f3, f4, _, ext1, ext2, ext3, ext4, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass5(f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass6(f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } + case s: Schema.Record[A] => + convertRecord[A](s.id, s.annotations, s.fields) - case Schema.CaseClass9(f1, f2, f3, f4, f5, f6, f7, f8, f9, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass10(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass11(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass12(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass13(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass14(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } + case s: Schema.Enum[A] => + convertEnum[A](s.id, s.annotations, s.cases) - case Schema.CaseClass15(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass16(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass17(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res = encoder17.encode(ext17(value), Some(options.nestedFieldLabel(columnName, f17.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass18(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res = encoder17.encode(ext17(value), Some(options.nestedFieldLabel(columnName, f17.label)), res) - res = encoder18.encode(ext18(value), Some(options.nestedFieldLabel(columnName, f18.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } - - case Schema.CaseClass19(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res = encoder17.encode(ext17(value), Some(options.nestedFieldLabel(columnName, f17.label)), res) - res = encoder18.encode(ext18(value), Some(options.nestedFieldLabel(columnName, f18.label)), res) - res = encoder19.encode(ext19(value), Some(options.nestedFieldLabel(columnName, f19.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } + case _ => + ??? + } - case Schema.CaseClass20(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val encoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res = encoder17.encode(ext17(value), Some(options.nestedFieldLabel(columnName, f17.label)), res) - res = encoder18.encode(ext18(value), Some(options.nestedFieldLabel(columnName, f18.label)), res) - res = encoder19.encode(ext19(value), Some(options.nestedFieldLabel(columnName, f19.label)), res) - res = encoder20.encode(ext20(value), Some(options.nestedFieldLabel(columnName, f20.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) - } + // scalafmt: { maxColumn = 120, optIn.configStyleArguments = true } - case Schema.CaseClass21(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, ext21, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val encoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val encoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res = encoder17.encode(ext17(value), Some(options.nestedFieldLabel(columnName, f17.label)), res) - res = encoder18.encode(ext18(value), Some(options.nestedFieldLabel(columnName, f18.label)), res) - res = encoder19.encode(ext19(value), Some(options.nestedFieldLabel(columnName, f19.label)), res) - res = encoder20.encode(ext20(value), Some(options.nestedFieldLabel(columnName, f20.label)), res) - res = encoder21.encode(ext21(value), Some(options.nestedFieldLabel(columnName, f21.label)), res) - res - } - } - addAnnotations(baseEncoder, parsed) + private def convertRecord[A]( + id: TypeId, + annotations: Chunk[Any], + fields: Chunk[Field[A, _]] + ): CsvEncoder[A] = { + val recordAnnotations: OpenApiParsedAnnotations[A] = extractAnnotations[A](annotations) + convertUsingCache(id, recordAnnotations) { + val fieldEncoders = fields + .map { field => + addAnnotations(None, convert(field.schema), extractAnnotations(field.annotations)) } - - case Schema.CaseClass22(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, ext21, ext22, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val encoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val encoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) - val encoder22 = addAnnotations(convert(f22.schema), extractAnnotations(f22.annotations)) - val baseEncoder = new CsvEncoder[A] { - override def encode(value: A, columnName: Option[String], acc: mutable.LinkedHashMap[String, String]): mutable.LinkedHashMap[String, String] = { - var res = acc - res = encoder1.encode(ext1(value), Some(options.nestedFieldLabel(columnName, f1.label)), res) - res = encoder2.encode(ext2(value), Some(options.nestedFieldLabel(columnName, f2.label)), res) - res = encoder3.encode(ext3(value), Some(options.nestedFieldLabel(columnName, f3.label)), res) - res = encoder4.encode(ext4(value), Some(options.nestedFieldLabel(columnName, f4.label)), res) - res = encoder5.encode(ext5(value), Some(options.nestedFieldLabel(columnName, f5.label)), res) - res = encoder6.encode(ext6(value), Some(options.nestedFieldLabel(columnName, f6.label)), res) - res = encoder7.encode(ext7(value), Some(options.nestedFieldLabel(columnName, f7.label)), res) - res = encoder8.encode(ext8(value), Some(options.nestedFieldLabel(columnName, f8.label)), res) - res = encoder9.encode(ext9(value), Some(options.nestedFieldLabel(columnName, f9.label)), res) - res = encoder10.encode(ext10(value), Some(options.nestedFieldLabel(columnName, f10.label)), res) - res = encoder11.encode(ext11(value), Some(options.nestedFieldLabel(columnName, f11.label)), res) - res = encoder12.encode(ext12(value), Some(options.nestedFieldLabel(columnName, f12.label)), res) - res = encoder13.encode(ext13(value), Some(options.nestedFieldLabel(columnName, f13.label)), res) - res = encoder14.encode(ext14(value), Some(options.nestedFieldLabel(columnName, f14.label)), res) - res = encoder15.encode(ext15(value), Some(options.nestedFieldLabel(columnName, f15.label)), res) - res = encoder16.encode(ext16(value), Some(options.nestedFieldLabel(columnName, f16.label)), res) - res = encoder17.encode(ext17(value), Some(options.nestedFieldLabel(columnName, f17.label)), res) - res = encoder18.encode(ext18(value), Some(options.nestedFieldLabel(columnName, f18.label)), res) - res = encoder19.encode(ext19(value), Some(options.nestedFieldLabel(columnName, f19.label)), res) - res = encoder20.encode(ext20(value), Some(options.nestedFieldLabel(columnName, f20.label)), res) - res = encoder21.encode(ext21(value), Some(options.nestedFieldLabel(columnName, f21.label)), res) - res = encoder22.encode(ext22(value), Some(options.nestedFieldLabel(columnName, f22.label)), res) - res - } + val baseEncoder = new CsvEncoder[A] { + override def encode( + value: A, + columnName: Option[String], + acc: mutable.LinkedHashMap[String, String] + ): mutable.LinkedHashMap[String, String] = { + var res = acc + var i = 0 + while (i < fields.length) { + val field = fields(i) + val encoder = fieldEncoders(i) + res = encoder + .asInstanceOf[CsvEncoder[Any]] + .encode(field.get(value), Some(options.nestedFieldLabel(columnName, field.name.toString)), res) + i += 1 } - addAnnotations(baseEncoder, parsed) + res } - - case Schema.Enum1(c1, annotations) => - convertEnum[A](annotations, c1) - - case Schema.Enum2(c1, c2, annotations) => - convertEnum[A](annotations, c1, c2) - - case Schema.Enum3(c1, c2, c3, annotations) => - convertEnum[A](annotations, c1, c2, c3) - - case Schema.Enum4(c1, c2, c3, c4, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4) - - case Schema.Enum5(c1, c2, c3, c4, c5, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5) - - case Schema.Enum6(c1, c2, c3, c4, c5, c6, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6) - - case Schema.Enum7(c1, c2, c3, c4, c5, c6, c7, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7) - - case Schema.Enum8(c1, c2, c3, c4, c5, c6, c7, c8, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8) - - case Schema.Enum9(c1, c2, c3, c4, c5, c6, c7, c8, c9, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9) - - case Schema.Enum10(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10) - - case Schema.Enum11(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11) - - case Schema.Enum12(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) - - case Schema.Enum13(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) - - case Schema.Enum14(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14) - - case Schema.Enum15(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) - - case Schema.Enum16(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) - - case Schema.Enum17(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17) - - case Schema.Enum18(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18) - - case Schema.Enum19(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19) - - case Schema.Enum20(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20) - - case Schema.Enum21(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21) - - case Schema.Enum22(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22) - - case _ => - ??? + } + addAnnotations(Some(id), baseEncoder, recordAnnotations) } - - // scalafmt: { maxColumn = 120, optIn.configStyleArguments = true } + } private def convertEnum[A]( + id: TypeId, annotations: Chunk[Any], - cases: Schema.Case[_, A]* + cases: Chunk[Schema.Case[A, _]] ): CsvEncoder[A] = { val enumAnnotations = extractAnnotations[A](annotations) val encodersByName = cases.iterator .map { c => val cAnn = extractAnnotations(c.annotations) val encoder = addAnnotations( - convert(c.codec), + None, + convert(c.schema), extractAnnotations(c.annotations) ).asInstanceOf[CsvEncoder[Any]] - val entityName = cAnn.entityName.getOrElse(throw new RuntimeException( - s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined to derive a CsvEncoder. Received annotations: $cAnn" + val entityName = OpenApiConverterUtils.getCaseEntityName(c, cAnn).getOrElse(throw new RuntimeException( + s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined or be a case class to derive a CsvEncoder. Received annotations: $cAnn" )) entityName -> (encoder, c) } @@ -1300,11 +479,11 @@ object CsvEncoder { val discriminatorColumnName = Some(options.nestedFieldLabel(columnName, discriminator.discriminatorFieldName)) res = stringEncoder.encode(discriminator.discriminatorFieldName, discriminatorColumnName, res) - enc.encode(c.unsafeDeconstruct(value).asInstanceOf[Any], columnName, res) + enc.encode(c.deconstruct(value).asInstanceOf[Any], columnName, res) } } } - addAnnotations(decoder, enumAnnotations) + addAnnotations(Some(id), decoder, enumAnnotations) } private def primitiveConverter[A]( @@ -1315,6 +494,7 @@ object CsvEncoder { case StandardType.UnitType => unitEncoder case StandardType.StringType => stringEncoder case StandardType.BoolType => boolEncoder + case StandardType.ByteType => byteEncoder case StandardType.ShortType => shortEncoder case StandardType.IntType => intEncoder case StandardType.LongType => longEncoder @@ -1334,19 +514,20 @@ object CsvEncoder { case StandardType.ZoneIdType => zoneIdEncoder case StandardType.ZoneOffsetType => zoneOffsetEncoder case StandardType.DurationType => durationEncoder - case StandardType.InstantType(_) => instantEncoder - case StandardType.LocalDateType(_) => localDateEncoder - case StandardType.LocalTimeType(_) => localTimeEncoder - case StandardType.LocalDateTimeType(_) => localDateTimeEncoder - case StandardType.OffsetTimeType(_) => offsetTimeEncoder - case StandardType.OffsetDateTimeType(_) => offsetDateTimeEncoder - case StandardType.ZonedDateTimeType(_) => zonedDateTimeEncoder + case StandardType.InstantType => instantEncoder + case StandardType.LocalDateType => localDateEncoder + case StandardType.LocalTimeType => localTimeEncoder + case StandardType.LocalDateTimeType => localDateTimeEncoder + case StandardType.OffsetTimeType => offsetTimeEncoder + case StandardType.OffsetDateTimeType => offsetDateTimeEncoder + case StandardType.ZonedDateTimeType => zonedDateTimeEncoder } - addAnnotations(baseEncoder.asInstanceOf[CsvEncoder[A]], extractAnnotations(annotations)) + addAnnotations(None, baseEncoder.asInstanceOf[CsvEncoder[A]], extractAnnotations(annotations)) } @nowarn("cat=unused-params") private def addAnnotations[A]( + typeId: Option[TypeId], baseEncoder: CsvEncoder[A], metadata: OpenApiParsedAnnotations[A] ): CsvEncoder[A] = { diff --git a/chopsticks-csv/src/test/scala/dev/chopsticks/csv/CsvDecoderTest.scala b/chopsticks-csv/src/test/scala/dev/chopsticks/csv/CsvDecoderTest.scala index 5b870a83..986a4a0a 100644 --- a/chopsticks-csv/src/test/scala/dev/chopsticks/csv/CsvDecoderTest.scala +++ b/chopsticks-csv/src/test/scala/dev/chopsticks/csv/CsvDecoderTest.scala @@ -31,7 +31,7 @@ object CsvDecoderTest { object CsvDecoderTestName extends OpenApiModel[CsvDecoderTestName] { implicit override lazy val zioSchema: Schema[CsvDecoderTestName] = Schema[String] - .validate(Validator.all(Validator.minLength(1), Validator.maxLength(100))) + .validated(Validator.all(Validator.minLength(1), Validator.maxLength(100))) .mapBoth(CsvDecoderTestName(_), _.value) } @@ -39,7 +39,7 @@ object CsvDecoderTest { object CsvDecoderTestAddressList extends OpenApiModel[CsvDecoderTestAddressList] { implicit override lazy val zioSchema: Schema[CsvDecoderTestAddressList] = Schema[List[CsvDecoderTestAddress]] - .validate(Validator.minSize(1)) + .validated(Validator.minSize(1)) .mapBoth(CsvDecoderTestAddressList(_), _.value) } diff --git a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaCirceConverter.scala b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaCirceConverter.scala index 84ab15cf..3b0c9652 100644 --- a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaCirceConverter.scala +++ b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaCirceConverter.scala @@ -2,11 +2,12 @@ package dev.chopsticks.openapi import cats.data.{NonEmptyList, Validated} import dev.chopsticks.openapi.OpenApiParsedAnnotations.extractAnnotations +import dev.chopsticks.openapi.common.{ConverterCache, OpenApiConverterUtils} import io.circe.{Decoder, DecodingFailure, Encoder, HCursor, Json, JsonObject} import io.circe.Decoder.{AccumulatingResult, Result} import io.circe.Encoder.AsObject import sttp.tapir.Validator -import zio.schema.{FieldSet, Schema => ZioSchema, StandardType} +import zio.schema.{FieldSet, Schema => ZioSchema, StandardType, TypeId} import zio.Chunk import java.math.BigInteger @@ -31,11 +32,10 @@ import scala.collection.mutable.ListBuffer import scala.language.existentials object OpenApiZioSchemaCirceConverter { - final private case class CacheKey(entityName: String, annotationsHash: Int) object Decoder { def convert[A](zioSchema: ZioSchema[A]): Decoder[A] = { - new Converter(scala.collection.mutable.Map.empty).convert(zioSchema) + new Converter().convert(zioSchema) } // allows non-empty objects and arrays to be decoded as Unit @@ -50,34 +50,23 @@ object OpenApiZioSchemaCirceConverter { ) } - final private[openapi] class LazyDecoder[A]() extends io.circe.Decoder[A] { - private var _decoder: io.circe.Decoder[A] = _ - private[Decoder] def set(encoder: io.circe.Decoder[A]): Unit = - this._decoder = encoder - private def get: io.circe.Decoder[A] = - if (_decoder == null) throw new RuntimeException("LazyDecoder has not yet been initialized") - else _decoder + private def decodeCaseClass0[A](construct: () => A): Decoder[A] = { + decodeUnit.map(_ => construct()) + } + + final private[openapi] class LazyDecoder[A] extends ConverterCache.Lazy[io.circe.Decoder[A]] + with io.circe.Decoder[A] { override def apply(c: HCursor): Result[A] = get(c) } - private class Converter(cache: scala.collection.mutable.Map[CacheKey, LazyDecoder[_]]) { - - private def convertUsingCache[A](annotations: OpenApiParsedAnnotations[A])(convert: => Decoder[A]): Decoder[A] = { - annotations.entityName match { - case Some(name) => - val cacheKey = CacheKey(name, annotations.hashCode()) - cache.get(cacheKey) match { - case Some(value) => value.asInstanceOf[io.circe.Decoder[A]] - case None => - val lazyDec = new LazyDecoder[A]() - val _ = cache.addOne(cacheKey -> lazyDec) - val result = convert - lazyDec.set(result) - result - } - case None => - convert - } + private class Converter( + cache: ConverterCache[io.circe.Decoder] = new ConverterCache[io.circe.Decoder]() + ) { + private def convertUsingCache[A]( + typeId: TypeId, + annotations: OpenApiParsedAnnotations[A] + )(convert: => Decoder[A]): Decoder[A] = { + cache.convertUsingCache(typeId, annotations)(convert)(() => new LazyDecoder[A]) } def convert[A](zioSchema: ZioSchema[A]): Decoder[A] = { @@ -92,10 +81,10 @@ object OpenApiZioSchemaCirceConverter { extractAnnotations(annotations) ) - case ZioSchema.MapSchema(_, _, _) => + case ZioSchema.Map(_, _, _) => ??? - case ZioSchema.SetSchema(schema, annotation) => + case ZioSchema.Set(schema, annotation) => addAnnotations( io.circe.Decoder.decodeSet(convert(schema)), extractAnnotations(annotation) @@ -106,7 +95,7 @@ object OpenApiZioSchemaCirceConverter { val baseDecoder = convert(schema).emap(f) addAnnotations(baseDecoder, typedAnnotations) - case ZioSchema.Tuple(_, _, _) => + case ZioSchema.Tuple2(_, _, _) => ??? case ZioSchema.Optional(schema, annotations) => @@ -118,763 +107,704 @@ object OpenApiZioSchemaCirceConverter { case ZioSchema.Fail(_, _) => ??? - case ZioSchema.GenericRecord(fieldSet, annotations) => - genericRecordConverter(fieldSet, annotations) + case ZioSchema.GenericRecord(id, fieldSet, annotations) => + genericRecordConverter(id, fieldSet, annotations) - case either @ ZioSchema.EitherSchema(_, _, _) => + case either @ ZioSchema.Either(_, _, _) => convert(either.toEnum).asInstanceOf[Decoder[A]] case l @ ZioSchema.Lazy(_) => convert(l.schema) - case ZioSchema.Meta(_, _) => - ??? - - case ZioSchema.CaseClass1(f1, construct, _, annotations) => + case ZioSchema.CaseClass0(id, construct, annotations) => val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val baseDecoder = io.circe.Decoder.forProduct1(parsed.transformJsonLabel(f1.label))(construct)(decoder1) + convertUsingCache(id, parsed) { + val baseDecoder = decodeCaseClass0(construct) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass2(f1, f2, construct, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) + case s @ ZioSchema.CaseClass1(_, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field.schema), extractAnnotations(s.field.annotations)) + val baseDecoder = io.circe.Decoder.forProduct1(parsed.transformJsonLabel(s.field.name.toString))(s.defaultConstruct)(decoder1) + addAnnotations(baseDecoder, parsed) + } + + case s @ ZioSchema.CaseClass2(_, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) val baseDecoder = io.circe.Decoder.forProduct2( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label) - )(construct)(decoder1, decoder2) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString) + )(s.construct)(decoder1, decoder2) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass3(f1, f2, f3, construct, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) + case s @ ZioSchema.CaseClass3(_, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) val baseDecoder = io.circe.Decoder.forProduct3( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label) - )(construct)(decoder1, decoder2, decoder3) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString) + )(s.construct)(decoder1, decoder2, decoder3) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass4(f1, f2, f3, f4, construct, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) + case s @ ZioSchema.CaseClass4(_, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) val baseDecoder = io.circe.Decoder.forProduct4( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label) - )(construct)(decoder1, decoder2, decoder3, decoder4) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass5(f1, f2, f3, f4, f5, construct, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) + case s @ ZioSchema.CaseClass5(_, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) val baseDecoder = io.circe.Decoder.forProduct5( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass6(f1, f2, f3, f4, f5, f6, construct, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) + case s @ ZioSchema.CaseClass6(_, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) val baseDecoder = io.circe.Decoder.forProduct6( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, construct, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) + case s @ ZioSchema.CaseClass7(_, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) val baseDecoder = io.circe.Decoder.forProduct7( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, construct, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) + case s @ ZioSchema.CaseClass8(_, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) val baseDecoder = io.circe.Decoder.forProduct8( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass9(f1, f2, f3, f4, f5, f6, f7, f8, f9, construct, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) + case s @ ZioSchema.CaseClass9(_, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) val baseDecoder = io.circe.Decoder.forProduct9( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass10(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, construct, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) + case s @ ZioSchema.CaseClass10(_, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) val baseDecoder = io.circe.Decoder.forProduct10( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass11(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, construct, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) + case s @ ZioSchema.CaseClass11(_, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) val baseDecoder = io.circe.Decoder.forProduct11( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass12(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, construct, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) + case s @ ZioSchema.CaseClass12(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) val baseDecoder = io.circe.Decoder.forProduct12( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass13(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) + case s @ ZioSchema.CaseClass13(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) val baseDecoder = io.circe.Decoder.forProduct13( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass14(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) + case s @ ZioSchema.CaseClass14(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) val baseDecoder = io.circe.Decoder.forProduct14( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass15(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) + case s @ ZioSchema.CaseClass15(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) val baseDecoder = io.circe.Decoder.forProduct15( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass16(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) + case s @ ZioSchema.CaseClass16(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) val baseDecoder = io.circe.Decoder.forProduct16( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass17(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) + case s @ ZioSchema.CaseClass17(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) val baseDecoder = io.circe.Decoder.forProduct17( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass18(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) + case s @ ZioSchema.CaseClass18(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) val baseDecoder = io.circe.Decoder.forProduct18( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass19(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) + case s @ ZioSchema.CaseClass19(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) val baseDecoder = io.circe.Decoder.forProduct19( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass20(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val decoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) + case s @ ZioSchema.CaseClass20(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val decoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) val baseDecoder = io.circe.Decoder.forProduct20( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label), - parsed.transformJsonLabel(f20.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString), + parsed.transformJsonLabel(s.field20.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass21(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val decoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val decoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) + case s @ ZioSchema.CaseClass21(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val decoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val decoder21 = addAnnotations(convert(s.field21.schema), extractAnnotations(s.field21.annotations)) val baseDecoder = io.circe.Decoder.forProduct21( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label), - parsed.transformJsonLabel(f20.label), - parsed.transformJsonLabel(f21.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString), + parsed.transformJsonLabel(s.field20.name.toString), + parsed.transformJsonLabel(s.field21.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21) addAnnotations(baseDecoder, parsed) } - case ZioSchema.CaseClass22(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, construct, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val decoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val decoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val decoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val decoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val decoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val decoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val decoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val decoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val decoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val decoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val decoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val decoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val decoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val decoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val decoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val decoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val decoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val decoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val decoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val decoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val decoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) - val decoder22 = addAnnotations(convert(f22.schema), extractAnnotations(f22.annotations)) + case s @ ZioSchema.CaseClass22(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val decoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val decoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val decoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val decoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val decoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val decoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val decoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val decoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val decoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val decoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val decoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val decoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val decoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val decoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val decoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val decoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val decoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val decoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val decoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val decoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val decoder21 = addAnnotations(convert(s.field21.schema), extractAnnotations(s.field21.annotations)) + val decoder22 = addAnnotations(convert(s.field22.schema), extractAnnotations(s.field22.annotations)) val baseDecoder = io.circe.Decoder.forProduct22( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label), - parsed.transformJsonLabel(f20.label), - parsed.transformJsonLabel(f21.label), - parsed.transformJsonLabel(f22.label) - )(construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21, decoder22) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString), + parsed.transformJsonLabel(s.field20.name.toString), + parsed.transformJsonLabel(s.field21.name.toString), + parsed.transformJsonLabel(s.field22.name.toString) + )(s.construct)(decoder1, decoder2, decoder3, decoder4, decoder5, decoder6, decoder7, decoder8, decoder9, decoder10, decoder11, decoder12, decoder13, decoder14, decoder15, decoder16, decoder17, decoder18, decoder19, decoder20, decoder21, decoder22) addAnnotations(baseDecoder, parsed) } - case ZioSchema.Enum1(c1, annotations) => - convertEnum[A](annotations, c1) - - case ZioSchema.Enum2(c1, c2, annotations) => - convertEnum[A](annotations, c1, c2) - - case ZioSchema.Enum3(c1, c2, c3, annotations) => - convertEnum[A](annotations, c1, c2, c3) - - case ZioSchema.Enum4(c1, c2, c3, c4, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4) - - case ZioSchema.Enum5(c1, c2, c3, c4, c5, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5) - - case ZioSchema.Enum6(c1, c2, c3, c4, c5, c6, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6) - - case ZioSchema.Enum7(c1, c2, c3, c4, c5, c6, c7, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7) - - case ZioSchema.Enum8(c1, c2, c3, c4, c5, c6, c7, c8, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8) - - case ZioSchema.Enum9(c1, c2, c3, c4, c5, c6, c7, c8, c9, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9) - - case ZioSchema.Enum10(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10) - - case ZioSchema.Enum11(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11) - - case ZioSchema.Enum12(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) - - case ZioSchema.Enum13(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) - - case ZioSchema.Enum14(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14) - - case ZioSchema.Enum15(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) - - case ZioSchema.Enum16(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) - - case ZioSchema.Enum17(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17) - - case ZioSchema.Enum18(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18) - - case ZioSchema.Enum19(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19) - - case ZioSchema.Enum20(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20) - - case ZioSchema.Enum21(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21) - - case ZioSchema.Enum22(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22) + case s: ZioSchema.Enum[A] => + convertEnum[A](s.annotations, s.cases: _*) case _ => ??? @@ -884,18 +814,18 @@ object OpenApiZioSchemaCirceConverter { private def convertEnum[A]( annotations: Chunk[Any], - cases: ZioSchema.Case[_, A]* + cases: ZioSchema.Case[A, _]* ): Decoder[A] = { val enumAnnotations = extractAnnotations[A](annotations) val decodersByName = cases.iterator .map { c => val cAnn = extractAnnotations(c.annotations) val decoder = addAnnotations( - convert(c.codec), + convert(c.schema), extractAnnotations(c.annotations) ).asInstanceOf[io.circe.Decoder[Any]] - val entityName = cAnn.entityName.getOrElse(throw new RuntimeException( - s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined to derive an io.circe.Decoder. Received annotations: $cAnn" + val entityName = OpenApiConverterUtils.getCaseEntityName(c, cAnn).getOrElse(throw new RuntimeException( + s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined or be a case class to derive an io.circe.Decoder. Received annotations: $cAnn" )) entityName -> decoder } @@ -936,13 +866,17 @@ object OpenApiZioSchemaCirceConverter { addAnnotations(decoder, enumAnnotations) } - private def genericRecordConverter(fieldSet: FieldSet, annotations: Chunk[Any]): Decoder[ListMap[String, _]] = { + private def genericRecordConverter( + id: TypeId, + fieldSet: FieldSet, + annotations: Chunk[Any] + ): Decoder[ListMap[String, _]] = { val parsed = extractAnnotations[ListMap[String, _]](annotations) - convertUsingCache(parsed) { + convertUsingCache(id, parsed) { val fieldDecoders = fieldSet.toChunk.iterator .map { field => val fieldDecoder = addAnnotations(convert(field.schema), extractAnnotations(field.annotations)) - parsed.transformJsonLabel(field.label) -> (field.label, fieldDecoder) + parsed.transformJsonLabel(field.name.toString) -> (field.name.toString, fieldDecoder) } .toMap val baseDecoder = new Decoder[ListMap[String, _]] { @@ -997,6 +931,7 @@ object OpenApiZioSchemaCirceConverter { case StandardType.UnitType => decodeUnit case StandardType.StringType => io.circe.Decoder[String] case StandardType.BoolType => io.circe.Decoder[Boolean] + case StandardType.ByteType => io.circe.Decoder[Byte] case StandardType.ShortType => io.circe.Decoder[Short] case StandardType.IntType => io.circe.Decoder[Int] case StandardType.LongType => io.circe.Decoder[Long] @@ -1009,18 +944,18 @@ object OpenApiZioSchemaCirceConverter { case StandardType.UUIDType => io.circe.Decoder[UUID] case StandardType.DayOfWeekType => io.circe.Decoder[Int] // todo add validation case StandardType.DurationType => io.circe.Decoder[String] - case StandardType.InstantType(_) => io.circe.Decoder[Instant] - case StandardType.LocalDateType(_) => io.circe.Decoder[LocalDate] - case StandardType.LocalDateTimeType(_) => io.circe.Decoder[LocalDateTime] - case StandardType.LocalTimeType(_) => io.circe.Decoder[LocalTime] + case StandardType.InstantType => io.circe.Decoder[Instant] + case StandardType.LocalDateType => io.circe.Decoder[LocalDate] + case StandardType.LocalDateTimeType => io.circe.Decoder[LocalDateTime] + case StandardType.LocalTimeType => io.circe.Decoder[LocalTime] case StandardType.MonthType => io.circe.Decoder[String] // todo add validation case StandardType.MonthDayType => io.circe.Decoder[String] // todo add validation - case StandardType.OffsetDateTimeType(_) => io.circe.Decoder[OffsetDateTime] - case StandardType.OffsetTimeType(_) => io.circe.Decoder[OffsetTime] + case StandardType.OffsetDateTimeType => io.circe.Decoder[OffsetDateTime] + case StandardType.OffsetTimeType => io.circe.Decoder[OffsetTime] case StandardType.PeriodType => io.circe.Decoder[Period] case StandardType.YearType => io.circe.Decoder[Year] case StandardType.YearMonthType => io.circe.Decoder[YearMonth] - case StandardType.ZonedDateTimeType(_) => io.circe.Decoder[ZonedDateTime] + case StandardType.ZonedDateTimeType => io.circe.Decoder[ZonedDateTime] case StandardType.ZoneIdType => io.circe.Decoder[ZoneId] case StandardType.ZoneOffsetType => io.circe.Decoder[ZoneOffset] } @@ -1048,38 +983,28 @@ object OpenApiZioSchemaCirceConverter { object Encoder { def convert[A](zioSchema: ZioSchema[A]): Encoder[A] = { - new Converter(scala.collection.mutable.Map.empty).convert(zioSchema) + new Converter().convert(zioSchema) } - final private[openapi] class LazyEncoder[A]() extends io.circe.Encoder[A] { - private var _encoder: io.circe.Encoder[A] = _ - private[Encoder] def set(encoder: io.circe.Encoder[A]): Unit = - this._encoder = encoder - private def get: io.circe.Encoder[A] = - if (_encoder == null) throw new RuntimeException("LazyEncoder has not yet been initialized") - else _encoder + private val emptyJson = Json.obj() + private val _caseClass0Encoder = new Encoder[Any] { + override def apply(a: Any): Json = emptyJson + } + + def caseClass0Encoder[A] = _caseClass0Encoder.asInstanceOf[Encoder[A]] + + final private[openapi] class LazyEncoder[A] extends ConverterCache.Lazy[io.circe.Encoder[A]] + with io.circe.Encoder[A] { override def apply(a: A): Json = get(a) } - private class Converter(cache: scala.collection.mutable.Map[CacheKey, LazyEncoder[_]]) { - - private def convertUsingCache[A](annotations: OpenApiParsedAnnotations[A])(convert: => io.circe.Encoder[A]) - : io.circe.Encoder[A] = { - annotations.entityName match { - case Some(name) => - val cacheKey = CacheKey(name, annotations.hashCode()) - cache.get(cacheKey) match { - case Some(value) => value.asInstanceOf[io.circe.Encoder[A]] - case None => - val lazyEnc = new LazyEncoder[A]() - val _ = cache.addOne(cacheKey -> lazyEnc) - val result = convert - lazyEnc.set(result) - result - } - case None => - convert - } + private class Converter(cache: ConverterCache[io.circe.Encoder] = new ConverterCache[io.circe.Encoder]()) { + + private def convertUsingCache[A]( + typeId: TypeId, + annotations: OpenApiParsedAnnotations[A] + )(convert: => io.circe.Encoder[A]): io.circe.Encoder[A] = { + cache.convertUsingCache(typeId, annotations)(convert)(() => new LazyEncoder[A]) } def convert[A](zioSchema: ZioSchema[A]): io.circe.Encoder[A] = { @@ -1094,10 +1019,10 @@ object OpenApiZioSchemaCirceConverter { extractAnnotations(annotations) ) - case ZioSchema.MapSchema(_, _, _) => + case ZioSchema.Map(_, _, _) => ??? - case ZioSchema.SetSchema(schema, annotation) => + case ZioSchema.Set(schema, annotation) => addAnnotations( io.circe.Encoder.encodeSet(convert(schema)).asInstanceOf[Encoder[A]], extractAnnotations(annotation) @@ -1114,7 +1039,7 @@ object OpenApiZioSchemaCirceConverter { } addAnnotations(baseSchema, typedAnnotations) - case ZioSchema.Tuple(_, _, _) => + case ZioSchema.Tuple2(_, _, _) => ??? case ZioSchema.Optional(schema, annotations) => @@ -1126,9 +1051,9 @@ object OpenApiZioSchemaCirceConverter { case ZioSchema.Fail(_, _) => ??? - case ZioSchema.GenericRecord(fieldSet, annotations) => + case ZioSchema.GenericRecord(id, fieldSet, annotations) => val recordAnnotations: OpenApiParsedAnnotations[A] = extractAnnotations[A](annotations) - convertUsingCache(recordAnnotations) { + convertUsingCache(id, recordAnnotations) { val fieldEncoders = fieldSet.toChunk .map { field => addAnnotations(convert(field.schema), extractAnnotations(field.annotations)) @@ -1146,760 +1071,703 @@ object OpenApiZioSchemaCirceConverter { addAnnotations(baseEncoder, recordAnnotations) } - case either @ ZioSchema.EitherSchema(_, _, _) => + case either @ ZioSchema.Either(_, _, _) => convert(either.toEnum).asInstanceOf[Encoder[A]] case l @ ZioSchema.Lazy(_) => convert(l.schema) - case ZioSchema.Meta(_, _) => - ??? - - case ZioSchema.CaseClass1(f1, _, ext1, annotations) => + case ZioSchema.CaseClass0(id, _, annotations) => val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val baseEncoder = io.circe.Encoder.forProduct1(parsed.transformJsonLabel(f1.label))(ext1)(encoder1) + convertUsingCache(id, parsed) { + val baseEncoder = caseClass0Encoder[A] addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass2(f1, f2, _, ext1, ext2, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) + case s @ ZioSchema.CaseClass1(_, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field.schema), extractAnnotations(s.field.annotations)) + val baseEncoder = io.circe.Encoder.forProduct1( + parsed.transformJsonLabel(s.field.name.toString) + )((a: A) => (s.field.get(a)))(encoder1) + addAnnotations(baseEncoder, parsed) + } + + case s @ ZioSchema.CaseClass2(_, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) val baseEncoder = io.circe.Encoder.forProduct2( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label) - )((a: A) => (ext1(a), ext2(a)))(encoder1, encoder2) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a)))(encoder1, encoder2) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass3(f1, f2, f3, _, ext1, ext2, ext3, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) + case s @ ZioSchema.CaseClass3(_, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) val baseEncoder = io.circe.Encoder.forProduct3( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label) - )((a: A) => (ext1(a), ext2(a), ext3(a)))(encoder1, encoder2, encoder3) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a)))(encoder1, encoder2, encoder3) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass4(f1, f2, f3, f4, _, ext1, ext2, ext3, ext4, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) + case s @ ZioSchema.CaseClass4(_, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) val baseEncoder = io.circe.Encoder.forProduct4( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a)))(encoder1, encoder2, encoder3, encoder4) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a)))(encoder1, encoder2, encoder3, encoder4) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass5(f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) + case s @ ZioSchema.CaseClass5(_, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) val baseEncoder = io.circe.Encoder.forProduct5( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a)))(encoder1, encoder2, encoder3, encoder4, encoder5) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass6(f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) + case s @ ZioSchema.CaseClass6(_, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) val baseEncoder = io.circe.Encoder.forProduct6( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) + case s @ ZioSchema.CaseClass7(_, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) val baseEncoder = io.circe.Encoder.forProduct7( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) + case s @ ZioSchema.CaseClass8(_, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) val baseEncoder = io.circe.Encoder.forProduct8( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass9(f1, f2, f3, f4, f5, f6, f7, f8, f9, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) + case s @ ZioSchema.CaseClass9(_, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) val baseEncoder = io.circe.Encoder.forProduct9( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass10(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) + case s @ ZioSchema.CaseClass10(_, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) val baseEncoder = io.circe.Encoder.forProduct10( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass11(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) + case s @ ZioSchema.CaseClass11(_, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) val baseEncoder = io.circe.Encoder.forProduct11( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass12(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) + case s @ ZioSchema.CaseClass12(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) val baseEncoder = io.circe.Encoder.forProduct12( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass13(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) + case s @ ZioSchema.CaseClass13(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) val baseEncoder = io.circe.Encoder.forProduct13( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass14(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) + case s @ ZioSchema.CaseClass14(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) val baseEncoder = io.circe.Encoder.forProduct14( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass15(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) + case s @ ZioSchema.CaseClass15(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) val baseEncoder = io.circe.Encoder.forProduct15( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass16(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) + case s @ ZioSchema.CaseClass16(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) val baseEncoder = io.circe.Encoder.forProduct16( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass17(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) + case s @ ZioSchema.CaseClass17(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val encoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) val baseEncoder = io.circe.Encoder.forProduct17( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a), ext17(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a), s.field17.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass18(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) + case s @ ZioSchema.CaseClass18(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val encoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val encoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) val baseEncoder = io.circe.Encoder.forProduct18( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a), ext17(a), ext18(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a), s.field17.get(a), s.field18.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass19(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) + case s @ ZioSchema.CaseClass19(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val encoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val encoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val encoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) val baseEncoder = io.circe.Encoder.forProduct19( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a), ext17(a), ext18(a), ext19(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a), s.field17.get(a), s.field18.get(a), s.field19.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass20(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val encoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) + case s @ ZioSchema.CaseClass20(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val encoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val encoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val encoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val encoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) val baseEncoder = io.circe.Encoder.forProduct20( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label), - parsed.transformJsonLabel(f20.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a), ext17(a), ext18(a), ext19(a), ext20(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19, encoder20) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString), + parsed.transformJsonLabel(s.field20.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a), s.field17.get(a), s.field18.get(a), s.field19.get(a), s.field20.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19, encoder20) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass21(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, ext21, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val encoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val encoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) + case s @ ZioSchema.CaseClass21(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val encoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val encoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val encoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val encoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val encoder21 = addAnnotations(convert(s.field21.schema), extractAnnotations(s.field21.annotations)) val baseEncoder = io.circe.Encoder.forProduct21( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label), - parsed.transformJsonLabel(f20.label), - parsed.transformJsonLabel(f21.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a), ext17(a), ext18(a), ext19(a), ext20(a), ext21(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19, encoder20, encoder21) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString), + parsed.transformJsonLabel(s.field20.name.toString), + parsed.transformJsonLabel(s.field21.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a), s.field17.get(a), s.field18.get(a), s.field19.get(a), s.field20.get(a), s.field21.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19, encoder20, encoder21) addAnnotations(baseEncoder, parsed) } - case ZioSchema.CaseClass22(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, ext21, ext22, annotations) => - val parsed = extractAnnotations[A](annotations) - convertUsingCache(parsed) { - val encoder1 = addAnnotations(convert(f1.schema), extractAnnotations(f1.annotations)) - val encoder2 = addAnnotations(convert(f2.schema), extractAnnotations(f2.annotations)) - val encoder3 = addAnnotations(convert(f3.schema), extractAnnotations(f3.annotations)) - val encoder4 = addAnnotations(convert(f4.schema), extractAnnotations(f4.annotations)) - val encoder5 = addAnnotations(convert(f5.schema), extractAnnotations(f5.annotations)) - val encoder6 = addAnnotations(convert(f6.schema), extractAnnotations(f6.annotations)) - val encoder7 = addAnnotations(convert(f7.schema), extractAnnotations(f7.annotations)) - val encoder8 = addAnnotations(convert(f8.schema), extractAnnotations(f8.annotations)) - val encoder9 = addAnnotations(convert(f9.schema), extractAnnotations(f9.annotations)) - val encoder10 = addAnnotations(convert(f10.schema), extractAnnotations(f10.annotations)) - val encoder11 = addAnnotations(convert(f11.schema), extractAnnotations(f11.annotations)) - val encoder12 = addAnnotations(convert(f12.schema), extractAnnotations(f12.annotations)) - val encoder13 = addAnnotations(convert(f13.schema), extractAnnotations(f13.annotations)) - val encoder14 = addAnnotations(convert(f14.schema), extractAnnotations(f14.annotations)) - val encoder15 = addAnnotations(convert(f15.schema), extractAnnotations(f15.annotations)) - val encoder16 = addAnnotations(convert(f16.schema), extractAnnotations(f16.annotations)) - val encoder17 = addAnnotations(convert(f17.schema), extractAnnotations(f17.annotations)) - val encoder18 = addAnnotations(convert(f18.schema), extractAnnotations(f18.annotations)) - val encoder19 = addAnnotations(convert(f19.schema), extractAnnotations(f19.annotations)) - val encoder20 = addAnnotations(convert(f20.schema), extractAnnotations(f20.annotations)) - val encoder21 = addAnnotations(convert(f21.schema), extractAnnotations(f21.annotations)) - val encoder22 = addAnnotations(convert(f22.schema), extractAnnotations(f22.annotations)) + case s @ ZioSchema.CaseClass22(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + val parsed = extractAnnotations[A](s.annotations) + convertUsingCache(s.id, parsed) { + val encoder1 = addAnnotations(convert(s.field1.schema), extractAnnotations(s.field1.annotations)) + val encoder2 = addAnnotations(convert(s.field2.schema), extractAnnotations(s.field2.annotations)) + val encoder3 = addAnnotations(convert(s.field3.schema), extractAnnotations(s.field3.annotations)) + val encoder4 = addAnnotations(convert(s.field4.schema), extractAnnotations(s.field4.annotations)) + val encoder5 = addAnnotations(convert(s.field5.schema), extractAnnotations(s.field5.annotations)) + val encoder6 = addAnnotations(convert(s.field6.schema), extractAnnotations(s.field6.annotations)) + val encoder7 = addAnnotations(convert(s.field7.schema), extractAnnotations(s.field7.annotations)) + val encoder8 = addAnnotations(convert(s.field8.schema), extractAnnotations(s.field8.annotations)) + val encoder9 = addAnnotations(convert(s.field9.schema), extractAnnotations(s.field9.annotations)) + val encoder10 = addAnnotations(convert(s.field10.schema), extractAnnotations(s.field10.annotations)) + val encoder11 = addAnnotations(convert(s.field11.schema), extractAnnotations(s.field11.annotations)) + val encoder12 = addAnnotations(convert(s.field12.schema), extractAnnotations(s.field12.annotations)) + val encoder13 = addAnnotations(convert(s.field13.schema), extractAnnotations(s.field13.annotations)) + val encoder14 = addAnnotations(convert(s.field14.schema), extractAnnotations(s.field14.annotations)) + val encoder15 = addAnnotations(convert(s.field15.schema), extractAnnotations(s.field15.annotations)) + val encoder16 = addAnnotations(convert(s.field16.schema), extractAnnotations(s.field16.annotations)) + val encoder17 = addAnnotations(convert(s.field17.schema), extractAnnotations(s.field17.annotations)) + val encoder18 = addAnnotations(convert(s.field18.schema), extractAnnotations(s.field18.annotations)) + val encoder19 = addAnnotations(convert(s.field19.schema), extractAnnotations(s.field19.annotations)) + val encoder20 = addAnnotations(convert(s.field20.schema), extractAnnotations(s.field20.annotations)) + val encoder21 = addAnnotations(convert(s.field21.schema), extractAnnotations(s.field21.annotations)) + val encoder22 = addAnnotations(convert(s.field22.schema), extractAnnotations(s.field22.annotations)) val baseEncoder = io.circe.Encoder.forProduct22( - parsed.transformJsonLabel(f1.label), - parsed.transformJsonLabel(f2.label), - parsed.transformJsonLabel(f3.label), - parsed.transformJsonLabel(f4.label), - parsed.transformJsonLabel(f5.label), - parsed.transformJsonLabel(f6.label), - parsed.transformJsonLabel(f7.label), - parsed.transformJsonLabel(f8.label), - parsed.transformJsonLabel(f9.label), - parsed.transformJsonLabel(f10.label), - parsed.transformJsonLabel(f11.label), - parsed.transformJsonLabel(f12.label), - parsed.transformJsonLabel(f13.label), - parsed.transformJsonLabel(f14.label), - parsed.transformJsonLabel(f15.label), - parsed.transformJsonLabel(f16.label), - parsed.transformJsonLabel(f17.label), - parsed.transformJsonLabel(f18.label), - parsed.transformJsonLabel(f19.label), - parsed.transformJsonLabel(f20.label), - parsed.transformJsonLabel(f21.label), - parsed.transformJsonLabel(f22.label) - )((a: A) => (ext1(a), ext2(a), ext3(a), ext4(a), ext5(a), ext6(a), ext7(a), ext8(a), ext9(a), ext10(a), ext11(a), ext12(a), ext13(a), ext14(a), ext15(a), ext16(a), ext17(a), ext18(a), ext19(a), ext20(a), ext21(a), ext22(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19, encoder20, encoder21, encoder22) + parsed.transformJsonLabel(s.field1.name.toString), + parsed.transformJsonLabel(s.field2.name.toString), + parsed.transformJsonLabel(s.field3.name.toString), + parsed.transformJsonLabel(s.field4.name.toString), + parsed.transformJsonLabel(s.field5.name.toString), + parsed.transformJsonLabel(s.field6.name.toString), + parsed.transformJsonLabel(s.field7.name.toString), + parsed.transformJsonLabel(s.field8.name.toString), + parsed.transformJsonLabel(s.field9.name.toString), + parsed.transformJsonLabel(s.field10.name.toString), + parsed.transformJsonLabel(s.field11.name.toString), + parsed.transformJsonLabel(s.field12.name.toString), + parsed.transformJsonLabel(s.field13.name.toString), + parsed.transformJsonLabel(s.field14.name.toString), + parsed.transformJsonLabel(s.field15.name.toString), + parsed.transformJsonLabel(s.field16.name.toString), + parsed.transformJsonLabel(s.field17.name.toString), + parsed.transformJsonLabel(s.field18.name.toString), + parsed.transformJsonLabel(s.field19.name.toString), + parsed.transformJsonLabel(s.field20.name.toString), + parsed.transformJsonLabel(s.field21.name.toString), + parsed.transformJsonLabel(s.field22.name.toString) + )((a: A) => (s.field1.get(a), s.field2.get(a), s.field3.get(a), s.field4.get(a), s.field5.get(a), s.field6.get(a), s.field7.get(a), s.field8.get(a), s.field9.get(a), s.field10.get(a), s.field11.get(a), s.field12.get(a), s.field13.get(a), s.field14.get(a), s.field15.get(a), s.field16.get(a), s.field17.get(a), s.field18.get(a), s.field19.get(a), s.field20.get(a), s.field21.get(a), s.field22.get(a)))(encoder1, encoder2, encoder3, encoder4, encoder5, encoder6, encoder7, encoder8, encoder9, encoder10, encoder11, encoder12, encoder13, encoder14, encoder15, encoder16, encoder17, encoder18, encoder19, encoder20, encoder21, encoder22) addAnnotations(baseEncoder, parsed) } - case ZioSchema.Enum1(c1, annotations) => - convertEnum[A](annotations, c1) - - case ZioSchema.Enum2(c1, c2, annotations) => - convertEnum[A](annotations, c1, c2) - - case ZioSchema.Enum3(c1, c2, c3, annotations) => - convertEnum[A](annotations, c1, c2, c3) - - case ZioSchema.Enum4(c1, c2, c3, c4, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4) - - case ZioSchema.Enum5(c1, c2, c3, c4, c5, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5) - - case ZioSchema.Enum6(c1, c2, c3, c4, c5, c6, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6) - - case ZioSchema.Enum7(c1, c2, c3, c4, c5, c6, c7, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7) - - case ZioSchema.Enum8(c1, c2, c3, c4, c5, c6, c7, c8, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8) - - case ZioSchema.Enum9(c1, c2, c3, c4, c5, c6, c7, c8, c9, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9) - - case ZioSchema.Enum10(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10) - - case ZioSchema.Enum11(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11) - - case ZioSchema.Enum12(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) - - case ZioSchema.Enum13(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) - - case ZioSchema.Enum14(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14) - - case ZioSchema.Enum15(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) - - case ZioSchema.Enum16(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) - - case ZioSchema.Enum17(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17) - - case ZioSchema.Enum18(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18) - - case ZioSchema.Enum19(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19) - - case ZioSchema.Enum20(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20) - - case ZioSchema.Enum21(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21) - - case ZioSchema.Enum22(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22) + case s: ZioSchema.Enum[A] => + convertEnum[A](s.annotations, s.cases: _*) case _ => ??? @@ -1909,19 +1777,21 @@ object OpenApiZioSchemaCirceConverter { private def convertEnum[A]( annotations: Chunk[Any], - cases: ZioSchema.Case[_, A]* + cases: ZioSchema.Case[A, _]* ): Encoder[A] = { val enumAnnotations = extractAnnotations[A](annotations) val encodersByName = cases.iterator .map { c => val cAnn = extractAnnotations(c.annotations) val encoder = addAnnotations( - convert(c.codec), + convert(c.schema), extractAnnotations(c.annotations) ).asInstanceOf[io.circe.Encoder[Any]] - val entityName = cAnn.entityName.getOrElse(throw new RuntimeException( - s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined to derive an io.circe.Encoder. Received annotations: $cAnn" - )) + val entityName = OpenApiConverterUtils.getCaseEntityName(c, cAnn).getOrElse( + throw new RuntimeException( + s"Subtype of ${enumAnnotations.entityName.getOrElse("-")} must have entityName defined or be a case class to derive an io.circe.Encoder. Received annotations: $cAnn" + ) + ) entityName -> (encoder, c) } .toMap @@ -1942,7 +1812,7 @@ object OpenApiZioSchemaCirceConverter { override def apply(a: A): Json = { val discValue = discriminator.discriminatorValue(a) val (enc, c) = encodersByName(discriminator.mapping(discValue)) - val json = enc(c.unsafeDeconstruct(a).asInstanceOf[Any]) + val json = enc(c.deconstruct(a).asInstanceOf[Any]) json.mapObject { o => o.add(discriminator.discriminatorFieldName, Json.fromString(discValue)) } @@ -1957,6 +1827,7 @@ object OpenApiZioSchemaCirceConverter { case StandardType.UnitType => io.circe.Encoder[Unit] case StandardType.StringType => io.circe.Encoder[String] case StandardType.BoolType => io.circe.Encoder[Boolean] + case StandardType.ByteType => io.circe.Encoder[Byte] case StandardType.ShortType => io.circe.Encoder[Short] case StandardType.IntType => io.circe.Encoder[Int] case StandardType.LongType => io.circe.Encoder[Long] @@ -1969,18 +1840,18 @@ object OpenApiZioSchemaCirceConverter { case StandardType.UUIDType => io.circe.Encoder[UUID] case StandardType.DayOfWeekType => io.circe.Encoder[Int] // todo add validation case StandardType.DurationType => io.circe.Encoder[String] - case StandardType.InstantType(_) => io.circe.Encoder[Instant] - case StandardType.LocalDateType(_) => io.circe.Encoder[LocalDate] - case StandardType.LocalDateTimeType(_) => io.circe.Encoder[LocalDateTime] - case StandardType.LocalTimeType(_) => io.circe.Encoder[LocalTime] + case StandardType.InstantType => io.circe.Encoder[Instant] + case StandardType.LocalDateType => io.circe.Encoder[LocalDate] + case StandardType.LocalDateTimeType => io.circe.Encoder[LocalDateTime] + case StandardType.LocalTimeType => io.circe.Encoder[LocalTime] case StandardType.MonthType => io.circe.Encoder[String] // todo add validation case StandardType.MonthDayType => io.circe.Encoder[String] // todo add validation - case StandardType.OffsetDateTimeType(_) => io.circe.Encoder[OffsetDateTime] - case StandardType.OffsetTimeType(_) => io.circe.Encoder[OffsetTime] + case StandardType.OffsetDateTimeType => io.circe.Encoder[OffsetDateTime] + case StandardType.OffsetTimeType => io.circe.Encoder[OffsetTime] case StandardType.PeriodType => io.circe.Encoder[Period] case StandardType.YearType => io.circe.Encoder[Year] case StandardType.YearMonthType => io.circe.Encoder[YearMonth] - case StandardType.ZonedDateTimeType(_) => io.circe.Encoder[ZonedDateTime] + case StandardType.ZonedDateTimeType => io.circe.Encoder[ZonedDateTime] case StandardType.ZoneIdType => io.circe.Encoder[ZoneId] case StandardType.ZoneOffsetType => io.circe.Encoder[ZoneOffset] } diff --git a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaToTapirConverter.scala b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaToTapirConverter.scala index df723c35..03b7ef1c 100644 --- a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaToTapirConverter.scala +++ b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemaToTapirConverter.scala @@ -1,14 +1,14 @@ package dev.chopsticks.openapi import dev.chopsticks.openapi.OpenApiParsedAnnotations.extractAnnotations +import dev.chopsticks.openapi.common.OpenApiConverterUtils import sttp.tapir.{FieldName, Schema => TapirSchema, SchemaType} import sttp.tapir.Schema.SName import sttp.tapir.SchemaType.{SDiscriminator, SOption, SRef, SchemaWithValue} -import zio.schema.{FieldSet, Schema => ZioSchema, StandardType} +import zio.schema.{Schema => ZioSchema, StandardType, TypeId} import zio.Chunk import scala.collection.compat.immutable.ArraySeq -import scala.collection.immutable.ListMap object OpenApiZioSchemaToTapirConverter { def convert[A](zioSchema: ZioSchema[A]): TapirSchema[A] = { @@ -18,9 +18,12 @@ object OpenApiZioSchemaToTapirConverter { final case class CacheValue(schemaName: SName, description: Option[String], default: Option[(Any, Option[Any])]) private class Converter(cache: scala.collection.mutable.Map[String, CacheValue]) { - private def convertUsingCache[A](annotations: OpenApiParsedAnnotations[A])(convert: => TapirSchema[A]) - : TapirSchema[A] = { - annotations.entityName match { + private def convertUsingCache[A]( + typeId: TypeId, + annotations: OpenApiParsedAnnotations[A] + )(convert: => TapirSchema[A]): TapirSchema[A] = { + val entityName = OpenApiConverterUtils.getEntityName(Some(typeId), annotations) + entityName match { case Some(name) => cache.get(name) match { case Some(value) => @@ -60,16 +63,18 @@ object OpenApiZioSchemaToTapirConverter { case ZioSchema.Sequence(schemaA, _, toChunk, annotations, _) => addAnnotations( + typeId = None, TapirSchema(SchemaType.SArray(convert(schemaA))(toChunk)), extractAnnotations(annotations) ) - case ZioSchema.MapSchema(_, _, _) => + case ZioSchema.Map(_, _, _) => ??? - case ZioSchema.SetSchema(schema, annotation) => + case ZioSchema.Set(schema, annotation) => addAnnotations( - TapirSchema(SchemaType.SArray(convert(schema))(_.asInstanceOf[Iterable[_]])), // todo check it + typeId = None, + TapirSchema(SchemaType.SArray(convert(schema))(_.asInstanceOf[Iterable[_]])), extractAnnotations(annotation) ) @@ -82,13 +87,14 @@ object OpenApiZioSchemaToTapirConverter { case Right(value) => value } } - addAnnotations(baseSchema, typedAnnotations, skipName = true) + addAnnotations(typeId = None, baseSchema, typedAnnotations, skipName = true) - case ZioSchema.Tuple(_, _, _) => + case ZioSchema.Tuple2(_, _, _) => ??? case ZioSchema.Optional(schema, annotations) => addAnnotations[A]( + typeId = None, baseSchema = { val underlying = convert(schema) TapirSchema[A]( @@ -104,206 +110,48 @@ object OpenApiZioSchemaToTapirConverter { case ZioSchema.Fail(_, _) => ??? - case ZioSchema.GenericRecord(fieldSet, annotations) => - convertGenericRecord(fieldSet, annotations) - - case either @ ZioSchema.EitherSchema(_, _, _) => + case either @ ZioSchema.Either(_, _, _) => convert(either.toEnum).as[A] case l @ ZioSchema.Lazy(_) => convert(l.schema) - case ZioSchema.Meta(_, _) => - ??? - - case ZioSchema.CaseClass1(f1, _, ext1, annotations) => - convertCaseClass[A](annotations, f1 -> ext1) - - case ZioSchema.CaseClass2(f1, f2, _, ext1, ext2, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2) - - case ZioSchema.CaseClass3(f1, f2, f3, _, ext1, ext2, ext3, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3) - - case ZioSchema.CaseClass4(f1, f2, f3, f4, _, ext1, ext2, ext3, ext4, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4) - - case ZioSchema.CaseClass5(f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5) - - case ZioSchema.CaseClass6(f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6) - - case ZioSchema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7) - - case ZioSchema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8) - - case ZioSchema.CaseClass9(f1, f2, f3, f4, f5, f6, f7, f8, f9, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9) - - case ZioSchema.CaseClass10(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10) - - case ZioSchema.CaseClass11(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11) - - case ZioSchema.CaseClass12(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12) - - case ZioSchema.CaseClass13(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13) - - case ZioSchema.CaseClass14(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14) - - case ZioSchema.CaseClass15(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15) - - case ZioSchema.CaseClass16(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16) - - case ZioSchema.CaseClass17(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16, f17 -> ext17) - - case ZioSchema.CaseClass18(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16, f17 -> ext17, f18 -> ext18) - - case ZioSchema.CaseClass19(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16, f17 -> ext17, f18 -> ext18, f19 -> ext19) - - case ZioSchema.CaseClass20(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16, f17 -> ext17, f18 -> ext18, f19 -> ext19, f20 -> ext20) - - case ZioSchema.CaseClass21(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, ext21, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16, f17 -> ext17, f18 -> ext18, f19 -> ext19, f20 -> ext20, f21 -> ext21) - - case ZioSchema.CaseClass22(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9, ext10, ext11, ext12, ext13, ext14, ext15, ext16, ext17, ext18, ext19, ext20, ext21, ext22, annotations) => - convertCaseClass[A](annotations, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8, f9 -> ext9, f10 -> ext10, f11 -> ext11, f12 -> ext12, f13 -> ext13, f14 -> ext14, f15 -> ext15, f16 -> ext16, f17 -> ext17, f18 -> ext18, f19 -> ext19, f20 -> ext20, f21 -> ext21, f22 -> ext22) - - case ZioSchema.Enum1(c1, annotations) => - convertEnum[A](annotations, c1) - - case ZioSchema.Enum2(c1, c2, annotations) => - convertEnum[A](annotations, c1, c2) - - case ZioSchema.Enum3(c1, c2, c3, annotations) => - convertEnum[A](annotations, c1, c2, c3) - - case ZioSchema.Enum4(c1, c2, c3, c4, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4) - - case ZioSchema.Enum5(c1, c2, c3, c4, c5, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5) - - case ZioSchema.Enum6(c1, c2, c3, c4, c5, c6, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6) + case s: ZioSchema.Record[A] => + convertCaseClass[A](s.id, s.annotations, s.fields) - case ZioSchema.Enum7(c1, c2, c3, c4, c5, c6, c7, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7) + case s: ZioSchema.Enum[A] => + convertEnum[A](s.id, s.annotations, s.cases: _*) - case ZioSchema.Enum8(c1, c2, c3, c4, c5, c6, c7, c8, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8) - - case ZioSchema.Enum9(c1, c2, c3, c4, c5, c6, c7, c8, c9, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9) - - case ZioSchema.Enum10(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10) - - case ZioSchema.Enum11(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11) - - case ZioSchema.Enum12(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12) - - case ZioSchema.Enum13(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13) - - case ZioSchema.Enum14(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14) - - case ZioSchema.Enum15(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15) - - case ZioSchema.Enum16(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16) - - case ZioSchema.Enum17(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17) - - case ZioSchema.Enum18(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18) - - case ZioSchema.Enum19(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19) - - case ZioSchema.Enum20(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20) - - case ZioSchema.Enum21(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21) - - case ZioSchema.Enum22(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, annotations) => - convertEnum[A](annotations, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22) - - // case ZioSchema.Enum2(c1, c2, annotations) => -// convertEnum[A](annotations, ) case _ => ??? } //scalafmt: { maxColumn = 120, optIn.configStyleArguments = true } } - private def convertGenericRecord( - fieldSet: FieldSet, - annotations: Chunk[Any] - ): TapirSchema[ListMap[String, _]] = { - val recordAnnotations = extractAnnotations[ListMap[String, _]](annotations) - convertUsingCache(recordAnnotations) { - val tapirFields = fieldSet.toChunk.iterator - .map { field => - val schema = addAnnotations( - convert(field.schema).asInstanceOf[TapirSchema[Any]], - extractAnnotations(field.annotations) - ) - val transformedLabel = recordAnnotations.transformJsonLabel(field.label) - SchemaType.SProductField( - _name = FieldName(transformedLabel, transformedLabel), - _schema = schema, - _get = (a: ListMap[String, _]) => Some(a(field.label)) - ) - } - .toList - addAnnotations( - TapirSchema(SchemaType.SProduct[ListMap[String, _]](tapirFields)), - recordAnnotations - ) - } - } - private def convertCaseClass[A]( + id: TypeId, annotations: Chunk[Any], - fields: (ZioSchema.Field[_], A => Any)* + fields: Chunk[ZioSchema.Field[A, _]] ): TapirSchema[A] = { val caseClassAnnotations = extractAnnotations[A](annotations) - convertUsingCache(caseClassAnnotations) { + convertUsingCache(id, caseClassAnnotations) { val tapirFields: List[SchemaType.SProductField[A]] = fields.iterator - .map { case (field, getField) => + .map { case field => val schema = addAnnotations( + typeId = None, convert(field.schema).asInstanceOf[TapirSchema[Any]], extractAnnotations(field.annotations) ) - val transformedLabel = caseClassAnnotations.transformJsonLabel(field.label) + val transformedLabel = caseClassAnnotations.transformJsonLabel(field.name.toString) SchemaType.SProductField( _name = FieldName(transformedLabel, transformedLabel), _schema = schema, - _get = (a: A) => Some(getField(a)) + _get = (a: A) => Some(field.get(a)) ) } .toList addAnnotations( + typeId = Some(id), TapirSchema(SchemaType.SProduct[A](tapirFields)), caseClassAnnotations ) @@ -311,14 +159,16 @@ object OpenApiZioSchemaToTapirConverter { } private def convertEnum[A]( + typeId: TypeId, annotations: Chunk[Any], - cases: ZioSchema.Case[_, A]* + cases: ZioSchema.Case[A, _]* ): TapirSchema[A] = { val enumAnnotations = extractAnnotations[A](annotations) val schemas = cases.iterator - .map(c => addAnnotations(convert(c.codec), extractAnnotations(c.annotations))) + .map(c => addAnnotations(typeId = None, convert(c.schema), extractAnnotations(c.annotations))) .to(ArraySeq) addAnnotations( + typeId = Some(typeId), baseSchema = TapirSchema( SchemaType.SCoproduct[A]( schemas.toList, @@ -337,7 +187,7 @@ object OpenApiZioSchemaToTapirConverter { var result = Option.empty[TapirSchema[_]] while (i < schemas.length && result.isEmpty) { val c = cases(i) - result = c.deconstruct(a) match { + result = c.deconstructOption(a) match { case Some(_) => Some(schemas(i)) case None => result } @@ -351,13 +201,15 @@ object OpenApiZioSchemaToTapirConverter { } private def addAnnotations[A]( + typeId: Option[TypeId], baseSchema: TapirSchema[A], metadata: OpenApiParsedAnnotations[A], skipName: Boolean = false ): TapirSchema[A] = { var result = baseSchema - if (metadata.entityName.isDefined && !skipName) { - result = baseSchema.copy(name = metadata.entityName.map(schemaName)) + val entityName = OpenApiConverterUtils.getEntityName(typeId, metadata) + if (entityName.isDefined && !skipName) { + result = baseSchema.copy(name = entityName.map(schemaName)) } if (metadata.description.isDefined) { result = result.copy(description = metadata.description) @@ -378,6 +230,7 @@ object OpenApiZioSchemaToTapirConverter { case StandardType.UnitType => SchemaType.SProduct(List.empty) case StandardType.StringType => SchemaType.SString() case StandardType.BoolType => SchemaType.SBoolean() + case StandardType.ByteType => SchemaType.SInteger() case StandardType.ShortType => SchemaType.SInteger() case StandardType.IntType => SchemaType.SInteger() case StandardType.LongType => SchemaType.SNumber() @@ -390,22 +243,22 @@ object OpenApiZioSchemaToTapirConverter { case StandardType.UUIDType => SchemaType.SString() case StandardType.DayOfWeekType => SchemaType.SInteger() case StandardType.DurationType => SchemaType.SString() - case StandardType.InstantType(_) => SchemaType.SDateTime() - case StandardType.LocalDateType(_) => SchemaType.SDate() - case StandardType.LocalDateTimeType(_) => SchemaType.SDateTime() - case StandardType.LocalTimeType(_) => SchemaType.SString() + case StandardType.InstantType => SchemaType.SDateTime() + case StandardType.LocalDateType => SchemaType.SDate() + case StandardType.LocalDateTimeType => SchemaType.SDateTime() + case StandardType.LocalTimeType => SchemaType.SString() case StandardType.MonthType => SchemaType.SString() case StandardType.MonthDayType => SchemaType.SString() - case StandardType.OffsetDateTimeType(_) => SchemaType.SDateTime() - case StandardType.OffsetTimeType(_) => SchemaType.SString() + case StandardType.OffsetDateTimeType => SchemaType.SDateTime() + case StandardType.OffsetTimeType => SchemaType.SString() case StandardType.PeriodType => SchemaType.SString() case StandardType.YearType => SchemaType.SString() case StandardType.YearMonthType => SchemaType.SString() - case StandardType.ZonedDateTimeType(_) => SchemaType.SDateTime() + case StandardType.ZonedDateTimeType => SchemaType.SDateTime() case StandardType.ZoneIdType => SchemaType.SString() case StandardType.ZoneOffsetType => SchemaType.SString() } - addAnnotations(TapirSchema[A](schemaType = schemaType), extractAnnotations(annotations)) + addAnnotations(typeId = None, TapirSchema[A](schemaType = schemaType), extractAnnotations(annotations)) } } } diff --git a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemas.scala b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemas.scala index 9beb3e67..b2b76ad0 100644 --- a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemas.scala +++ b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/OpenApiZioSchemas.scala @@ -5,16 +5,16 @@ import eu.timepit.refined.types.all.NonNegInt import eu.timepit.refined.types.numeric.{NonNegLong, PosInt, PosLong} import eu.timepit.refined.types.string.NonEmptyString import sttp.tapir.Validator -import zio.schema.{DefaultJavaTimeSchemas, Schema} +import zio.schema.Schema import zio.schema.internal.SourceLocation import zio.Chunk -object OpenApiZioSchemas extends DefaultJavaTimeSchemas { +object OpenApiZioSchemas { implicit class ZioSchemaOps[A](val schema: Schema[A]) extends AnyVal { def named(name: String): Schema[A] = { schema.annotate(OpenApiAnnotations.entityName(name)) } - def validate(validator: Validator[A]): Schema[A] = { + def validated(validator: Validator[A]): Schema[A] = { schema.annotate(OpenApiAnnotations.validate[A](validator)) } def description(description: String): Schema[A] = { @@ -49,32 +49,32 @@ object OpenApiZioSchemas extends DefaultJavaTimeSchemas { implicit val nonEmptyStringSchema: Schema[NonEmptyString] = Schema[String] - .validate(Validators.nonEmptyStringValidator) + .validated(Validators.nonEmptyStringValidator) .transformWithoutAnnotations[NonEmptyString](NonEmptyString.from, _.value) implicit val posIntSchema: Schema[PosInt] = Schema[Int] - .validate(Validators.posIntValidator) + .validated(Validators.posIntValidator) .transformWithoutAnnotations[PosInt](PosInt.from, _.value) implicit val nonNegIntSchema: Schema[NonNegInt] = Schema[Int] - .validate(Validators.nonNegIntValidator) + .validated(Validators.nonNegIntValidator) .transformWithoutAnnotations[NonNegInt](NonNegInt.from, _.value) implicit val posLongSchema: Schema[PosLong] = Schema[Long] - .validate(Validators.posLongValidator) + .validated(Validators.posLongValidator) .transformWithoutAnnotations[PosLong](PosLong.from, _.value) implicit val nonNegLongSchema: Schema[NonNegLong] = Schema[Long] - .validate(Validators.nonNegLongValidator) + .validated(Validators.nonNegLongValidator) .transformWithoutAnnotations[NonNegLong](NonNegLong.from, _.value) implicit def nonEmptyListSchema[A: Schema]: Schema[NonEmptyList[A]] = Schema[List[A]] - .validate(Validators.nonEmptyCollectionValidator) + .validated(Validators.nonEmptyCollectionValidator[A, List]) .transformWithoutAnnotations( xs => { NonEmptyList.fromList(xs) match { diff --git a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/ConverterCacheKey.scala b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/ConverterCacheKey.scala new file mode 100644 index 00000000..1e0e67ed --- /dev/null +++ b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/ConverterCacheKey.scala @@ -0,0 +1,44 @@ +package dev.chopsticks.openapi.common + +import dev.chopsticks.openapi.OpenApiParsedAnnotations +import zio.schema.TypeId + +final private[chopsticks] case class ConverterCacheKey(entityName: String, annotationsHash: Int) + +final private[chopsticks] class ConverterCache[C[_]]( + cache: scala.collection.mutable.Map[ConverterCacheKey, C[_] with ConverterCache.Lazy[C[_]]] = + scala.collection.mutable.Map.empty[ConverterCacheKey, C[_] with ConverterCache.Lazy[C[_]]] +) { + private[chopsticks] def convertUsingCache[A]( + typeId: TypeId, + annotations: OpenApiParsedAnnotations[A] + )(convert: => C[A])( + initLazy: () => C[A] with ConverterCache.Lazy[C[A]] + ): C[A] = { + val entityName = OpenApiConverterUtils.getEntityName(Some(typeId), annotations) + entityName match { + case Some(name) => + val cacheKey = ConverterCacheKey(name, annotations.hashCode()) + cache.get(cacheKey) match { + case Some(value) => value.asInstanceOf[C[A]] + case None => + val lazyEnc = initLazy() + val _ = cache.addOne(cacheKey -> lazyEnc.asInstanceOf[C[_] with ConverterCache.Lazy[C[_]]]) + val result = convert + lazyEnc.set(result) + result + } + case None => + convert + } + } +} +object ConverterCache { + private[chopsticks] trait Lazy[A] { + private var _value: A = _ + final private[ConverterCache] def set(value: A): Unit = _value = value + final private[chopsticks] def get: A = + if (_value == null) throw new RuntimeException(s"${this.getClass.getSimpleName} has not yet been initialized") + else _value + } +} diff --git a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiConverterUtils.scala b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiConverterUtils.scala new file mode 100644 index 00000000..26f0169b --- /dev/null +++ b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiConverterUtils.scala @@ -0,0 +1,50 @@ +package dev.chopsticks.openapi.common + +import dev.chopsticks.openapi.OpenApiParsedAnnotations +import zio.schema.{Schema, TypeId} +import zio.schema.TypeId.Nominal + +object OpenApiConverterUtils { + def getEntityName(schema: Schema[_]): Option[String] = { + schema match { + case r: Schema.Record[_] => + val parsed = OpenApiParsedAnnotations.extractAnnotations(r.annotations) + getEntityName(Some(r.id), parsed) + case r: Schema.Enum[_] => + val parsed = OpenApiParsedAnnotations.extractAnnotations(r.annotations) + getEntityName(Some(r.id), parsed) + case r: Schema.Lazy[_] => + getEntityName(r.schema) + case other => + OpenApiParsedAnnotations.extractAnnotations(other.annotations).entityName + } + } + + private[chopsticks] def getCaseEntityName( + schemaCase: Schema.Case[_, _], + parsed: OpenApiParsedAnnotations[_] + ): Option[String] = { + getEntityName(schemaCase.schema, parsed) + } + + private def getEntityName(schema: Schema[_], parsed: OpenApiParsedAnnotations[_]): Option[String] = { + schema match { + case r: Schema.Record[_] => + getEntityName(Some(r.id), parsed) + case r: Schema.Lazy[_] => + getEntityName(r.schema, parsed) + case _ => + parsed.entityName + } + } + + private[chopsticks] def getEntityName(typeId: Option[TypeId], metadata: OpenApiParsedAnnotations[_]) = { + metadata.entityName.orElse { + typeId match { + case Some(Nominal(packageName, objectNames, typeName)) => + Some(OpenApiSettings.default.getTypeName(packageName, objectNames, typeName)) + case _ => None + } + } + } +} diff --git a/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiSettings.scala b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiSettings.scala new file mode 100644 index 00000000..7bf248b9 --- /dev/null +++ b/chopsticks-openapi/src/main/scala/dev/chopsticks/openapi/common/OpenApiSettings.scala @@ -0,0 +1,16 @@ +package dev.chopsticks.openapi.common + +import zio.Chunk + +trait OpenApiSettings { + def getTypeName(packageName: Chunk[String], objectNames: Chunk[String], typeName: String): String +} +object OpenApiSettings { + val default = new OpenApiSettings { + override def getTypeName(packageName: Chunk[String], objectNames: Chunk[String], typeName: String): String = { + val n1 = objectNames.mkString("_") + if (n1.isEmpty) typeName + else s"${n1}_$typeName" + } + } +} diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c01a434b..28e3a774 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -243,8 +243,8 @@ object Dependencies { } lazy val zioSchemaDeps = { - val zioSchemaOrganization = "dev.chopsticks" - val zioSchemaVersion = "0.1.12" + val zioSchemaOrganization = "dev.zio" + val zioSchemaVersion = "1.1.0" Seq( zioSchemaOrganization %% "zio-schema" % zioSchemaVersion, zioSchemaOrganization %% "zio-schema-json" % zioSchemaVersion,