From ce7560e252b9efcac1f0dbb8c9e22270492304ff Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 10:02:48 -0400 Subject: [PATCH 1/7] Fixes #45: Capture annotations in record schemas --- project/project/metals.sbt | 2 +- project/project/project/metals.sbt | 2 +- .../src/main/scala/zio/schema/Schema.scala | 1241 ++++++++++------- .../scala/zio/schema/codec/JsonCodec.scala | 196 ++- .../zio/schema/codec/ProtobufCodec.scala | 170 ++- .../src/main/scala/zio/schema/macros.scala | 530 +++---- .../scala/zio/schema/DeriveSchemaSpec.scala | 21 +- .../test/scala/zio/schema/JavaTimeGen.scala | 4 +- .../scala/zio/schema/SchemaAssertions.scala | 47 +- .../src/test/scala/zio/schema/SchemaGen.scala | 89 +- .../test/scala/zio/schema/SchemaSpec.scala | 2 +- .../zio/schema/codec/JsonCodecSpec.scala | 29 +- .../zio/schema/codec/ProtobufCodecSpec.scala | 16 +- 13 files changed, 1381 insertions(+), 968 deletions(-) diff --git a/project/project/metals.sbt b/project/project/metals.sbt index 7dadd5e45..1d4c14ce8 100644 --- a/project/project/metals.sbt +++ b/project/project/metals.sbt @@ -1,4 +1,4 @@ // DO NOT EDIT! This file is auto-generated. // This file enables sbt-bloop to create bloop config files. -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.5-6-4768184c") +addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.8-19-4d9f966b") diff --git a/project/project/project/metals.sbt b/project/project/project/metals.sbt index 7dadd5e45..1d4c14ce8 100644 --- a/project/project/project/metals.sbt +++ b/project/project/project/metals.sbt @@ -1,4 +1,4 @@ // DO NOT EDIT! This file is auto-generated. // This file enables sbt-bloop to create bloop config files. -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.5-6-4768184c") +addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.8-19-4d9f966b") diff --git a/zio-schema/shared/src/main/scala/zio/schema/Schema.scala b/zio-schema/shared/src/main/scala/zio/schema/Schema.scala index 3d096d445..e72428465 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/Schema.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/Schema.scala @@ -144,8 +144,8 @@ object Schema { implicit def primitive[A](implicit standardType: StandardType[A]): Schema[A] = Primitive(standardType) - def record(structure: ListMap[String, Schema[_]]): Schema[ListMap[String, _]] = - GenericRecord(structure) + def record(field: Field[_]*): Schema[ListMap[String, _]] = + GenericRecord(field) implicit def list[A](implicit schemaA: Schema[A]): Schema[List[A]] = Schema.Sequence(schemaA, _.toList, Chunk.fromIterable(_)) @@ -816,11 +816,14 @@ object Schema { } ) - sealed trait Record[A] extends Schema[A] { - def structure: ListMap[String, Schema[_]] + final case class Field[A](label: String, schema: Schema[A], annotations: Seq[Any] = Nil) + + sealed trait Record[R] extends Schema[R] { + def structure: Seq[Field[_]] + def annotations: Seq[Any] = Nil } - final case class GenericRecord(override val structure: ListMap[String, Schema[_]]) extends Record[ListMap[String, _]] + final case class GenericRecord(override val structure: Seq[Field[_]]) extends Record[ListMap[String, _]] final case class Sequence[Col[_], A](schemaA: Schema[A], fromChunk: Chunk[A] => Col[A], toChunk: Col[A] => Chunk[A]) extends Schema[Col[A]] @@ -854,59 +857,63 @@ object Schema { extends Schema[Z] final case class EnumN[Z](cases: Seq[Case[_, Z]]) extends Schema[Z] - sealed trait CaseClass[Z] extends Schema[Z] { - def toRecord: Schema[Map[String, _]] - } - final case class CaseObject[Z](instance: Z) extends Schema[Z] - final case class CaseClass1[A, Z](field: (String, Schema[A]), construct: A => Z, extractField: Z => A) - extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field) + final case class CaseClass1[A, Z]( + override val annotations: Seq[Any] = Nil, + field: Field[A], + construct: A => Z, + extractField: Z => A + ) extends Record[Z] { + override def structure: Seq[Field[_]] = Seq(field) } final case class CaseClass2[A1, A2, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], construct: (A1, A2) => Z, extractField1: Z => A1, extractField2: Z => A2 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2) + override def structure: Seq[Field[_]] = Seq(field1, field2) } final case class CaseClass3[A1, A2, A3, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], construct: (A1, A2, A3) => Z, extractField1: Z => A1, extractField2: Z => A2, extractField3: Z => A3 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3) } final case class CaseClass4[A1, A2, A3, A4, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], construct: (A1, A2, A3, A4) => Z, extractField1: Z => A1, extractField2: Z => A2, extractField3: Z => A3, extractField4: Z => A4 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3, field4) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4) } final case class CaseClass5[A1, A2, A3, A4, A5, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], construct: (A1, A2, A3, A4, A5) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -914,16 +921,17 @@ object Schema { extractField4: Z => A4, extractField5: Z => A5 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3, field4, field5) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5) } final case class CaseClass6[A1, A2, A3, A4, A5, A6, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], construct: (A1, A2, A3, A4, A5, A6) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -932,18 +940,18 @@ object Schema { extractField5: Z => A5, extractField6: Z => A6 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq(field1, field2, field3, field4, field5, field6) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6) } final case class CaseClass7[A1, A2, A3, A4, A5, A6, A7, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], construct: (A1, A2, A3, A4, A5, A6, A7) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -953,19 +961,19 @@ object Schema { extractField6: Z => A6, extractField7: Z => A7 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq(field1, field2, field3, field4, field5, field6, field7) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6, field7) } final case class CaseClass8[A1, A2, A3, A4, A5, A6, A7, A8, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], construct: (A1, A2, A3, A4, A5, A6, A7, A8) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -976,20 +984,20 @@ object Schema { extractField7: Z => A7, extractField8: Z => A8 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq(field1, field2, field3, field4, field5, field6, field7, field8) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6, field7, field8) } final case class CaseClass9[A1, A2, A3, A4, A5, A6, A7, A8, A9, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -1001,21 +1009,21 @@ object Schema { extractField8: Z => A8, extractField9: Z => A9 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9) + override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9) } final case class CaseClass10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -1028,22 +1036,23 @@ object Schema { extractField9: Z => A9, extractField10: Z => A10 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10) + override def structure: Seq[Field[_]] = + Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10) } final case class CaseClass11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -1057,23 +1066,24 @@ object Schema { extractField10: Z => A10, extractField11: Z => A11 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11) + override def structure: Seq[Field[_]] = + Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11) } final case class CaseClass12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12) => Z, extractField1: Z => A1, extractField2: Z => A2, @@ -1088,8 +1098,78 @@ object Schema { extractField11: Z => A11, extractField12: Z => A12 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq( + override def structure: Seq[Field[_]] = + Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12) + } + + final case class CaseClass13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, Z]( + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13) + } + + final case class CaseClass14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, Z]( + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( field1, field2, field3, @@ -1101,25 +1181,30 @@ object Schema { field9, field10, field11, - field12 + field12, + field13, + field14 ) } - final case class CaseClass13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13) => Z, + final case class CaseClass15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, Z]( + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) => Z, extractField1: Z => A1, extractField2: Z => A2, extractField3: Z => A3, @@ -1132,10 +1217,12 @@ object Schema { extractField10: Z => A10, extractField11: Z => A11, extractField12: Z => A12, - extractField13: Z => A13 + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15 ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = - ListMap.empty ++ Seq( + override def structure: Seq[Field[_]] = + Seq( field1, field2, field3, @@ -1148,387 +1235,563 @@ object Schema { field10, field11, field12, - field13 + field13, + field14, + field15 ) } - // format: off - final case class CaseClass14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14) - } - - final case class CaseClass15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15) - } - final case class CaseClass16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16) + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16 + ) } final case class CaseClass17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - field17: (String, Schema[A17]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16, - extractField17: Z => A17 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17) + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + field17: Field[A17], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16, + extractField17: Z => A17 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16, + field17 + ) } final case class CaseClass18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - field17: (String, Schema[A17]), - field18: (String, Schema[A18]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16, - extractField17: Z => A17, - extractField18: Z => A18 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17,field18) + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + field17: Field[A17], + field18: Field[A18], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16, + extractField17: Z => A17, + extractField18: Z => A18 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16, + field17, + field18 + ) } final case class CaseClass19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - field17: (String, Schema[A17]), - field18: (String, Schema[A18]), - field19: (String, Schema[A19]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16, - extractField17: Z => A17, - extractField18: Z => A18, - extractField19: Z => A19 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17,field18,field19) + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + field17: Field[A17], + field18: Field[A18], + field19: Field[A19], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16, + extractField17: Z => A17, + extractField18: Z => A18, + extractField19: Z => A19 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16, + field17, + field18, + field19 + ) } - final case class CaseClass20[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - field17: (String, Schema[A17]), - field18: (String, Schema[A18]), - field19: (String, Schema[A19]), - field20: (String, Schema[A20]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16, - extractField17: Z => A17, - extractField18: Z => A18, - extractField19: Z => A19, - extractField20: Z => A20 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17,field18,field19,field20) + final case class CaseClass20[ + A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, + A11, + A12, + A13, + A14, + A15, + A16, + A17, + A18, + A19, + A20, + Z + ]( + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + field17: Field[A17], + field18: Field[A18], + field19: Field[A19], + field20: Field[A20], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16, + extractField17: Z => A17, + extractField18: Z => A18, + extractField19: Z => A19, + extractField20: Z => A20 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16, + field17, + field18, + field19, + field20 + ) } - final case class CaseClass21[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - field17: (String, Schema[A17]), - field18: (String, Schema[A18]), - field19: (String, Schema[A19]), - field20: (String, Schema[A20]), - field21: (String, Schema[A21]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16, - extractField17: Z => A17, - extractField18: Z => A18, - extractField19: Z => A19, - extractField20: Z => A20, - extractField21: Z => A21 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17,field18,field19,field20,field21) + final case class CaseClass21[ + A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, + A11, + A12, + A13, + A14, + A15, + A16, + A17, + A18, + A19, + A20, + A21, + Z + ]( + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + field17: Field[A17], + field18: Field[A18], + field19: Field[A19], + field20: Field[A20], + field21: Field[A21], + construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16, + extractField17: Z => A17, + extractField18: Z => A18, + extractField19: Z => A19, + extractField20: Z => A20, + extractField21: Z => A21 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16, + field17, + field18, + field19, + field20, + field21 + ) } - final case class CaseClass22[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22, Z]( - field1: (String, Schema[A1]), - field2: (String, Schema[A2]), - field3: (String, Schema[A3]), - field4: (String, Schema[A4]), - field5: (String, Schema[A5]), - field6: (String, Schema[A6]), - field7: (String, Schema[A7]), - field8: (String, Schema[A8]), - field9: (String, Schema[A9]), - field10: (String, Schema[A10]), - field11: (String, Schema[A11]), - field12: (String, Schema[A12]), - field13: (String, Schema[A13]), - field14: (String, Schema[A14]), - field15: (String, Schema[A15]), - field16: (String, Schema[A16]), - field17: (String, Schema[A17]), - field18: (String, Schema[A18]), - field19: (String, Schema[A19]), - field20: (String, Schema[A20]), - field21: (String, Schema[A21]), - field22: (String, Schema[A22]), - construct: (A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22) => Z, - extractField1: Z => A1, - extractField2: Z => A2, - extractField3: Z => A3, - extractField4: Z => A4, - extractField5: Z => A5, - extractField6: Z => A6, - extractField7: Z => A7, - extractField8: Z => A8, - extractField9: Z => A9, - extractField10: Z => A10, - extractField11: Z => A11, - extractField12: Z => A12, - extractField13: Z => A13, - extractField14: Z => A14, - extractField15: Z => A15, - extractField16: Z => A16, - extractField17: Z => A17, - extractField18: Z => A18, - extractField19: Z => A19, - extractField20: Z => A20, - extractField21: Z => A21, - extractField22: Z => A22 - ) extends Record[Z] { - override def structure: ListMap[String, Schema[_]] = ListMap.empty ++ Seq(field1, field2, field3,field4,field5,field6,field7,field8,field9,field10,field11,field12,field13,field14,field15,field16,field17,field18,field19,field20,field21,field22) + final case class CaseClass22[ + A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, + A11, + A12, + A13, + A14, + A15, + A16, + A17, + A18, + A19, + A20, + A21, + A22, + Z + ]( + override val annotations: Seq[Any] = Nil, + field1: Field[A1], + field2: Field[A2], + field3: Field[A3], + field4: Field[A4], + field5: Field[A5], + field6: Field[A6], + field7: Field[A7], + field8: Field[A8], + field9: Field[A9], + field10: Field[A10], + field11: Field[A11], + field12: Field[A12], + field13: Field[A13], + field14: Field[A14], + field15: Field[A15], + field16: Field[A16], + field17: Field[A17], + field18: Field[A18], + field19: Field[A19], + field20: Field[A20], + field21: Field[A21], + field22: Field[A22], + construct: ( + A1, + A2, + A3, + A4, + A5, + A6, + A7, + A8, + A9, + A10, + A11, + A12, + A13, + A14, + A15, + A16, + A17, + A18, + A19, + A20, + A21, + A22 + ) => Z, + extractField1: Z => A1, + extractField2: Z => A2, + extractField3: Z => A3, + extractField4: Z => A4, + extractField5: Z => A5, + extractField6: Z => A6, + extractField7: Z => A7, + extractField8: Z => A8, + extractField9: Z => A9, + extractField10: Z => A10, + extractField11: Z => A11, + extractField12: Z => A12, + extractField13: Z => A13, + extractField14: Z => A14, + extractField15: Z => A15, + extractField16: Z => A16, + extractField17: Z => A17, + extractField18: Z => A18, + extractField19: Z => A19, + extractField20: Z => A20, + extractField21: Z => A21, + extractField22: Z => A22 + ) extends Record[Z] { + override def structure: Seq[Field[_]] = + Seq( + field1, + field2, + field3, + field4, + field5, + field6, + field7, + field8, + field9, + field10, + field11, + field12, + field13, + field14, + field15, + field16, + field17, + field18, + field19, + field20, + field21, + field22 + ) } - // format: on } diff --git a/zio-schema/shared/src/main/scala/zio/schema/codec/JsonCodec.scala b/zio-schema/shared/src/main/scala/zio/schema/codec/JsonCodec.scala index 8c37933c6..4d737ad6c 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/codec/JsonCodec.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/codec/JsonCodec.scala @@ -103,31 +103,52 @@ object JsonCodec extends Codec { } private def schemaEncoder[A](schema: Schema[A]): JsonEncoder[A] = schema match { - case Schema.Primitive(standardType) => primitiveCodec(standardType) - case Schema.Sequence(schema, _, g) => JsonEncoder.chunk(schemaEncoder(schema)).contramap(g) - case Schema.Transform(c, _, g) => transformEncoder(c, g) - case Schema.Tuple(l, r) => schemaEncoder(l).both(schemaEncoder(r)) - case Schema.Optional(schema) => JsonEncoder.option(schemaEncoder(schema)) - case Schema.Fail(_) => unitEncoder.contramap(_ => ()) - case Schema.GenericRecord(structure) => recordEncoder(structure) - case Schema.Enumeration(structure) => enumerationEncoder(structure) - case EitherSchema(left, right) => JsonEncoder.either(schemaEncoder(left), schemaEncoder(right)) - case Schema.CaseObject(_) => objectEncoder[A] - case Schema.CaseClass1(f, _, ext) => caseClassEncoder(f -> ext) - case Schema.CaseClass2(f1, f2, _, ext1, ext2) => caseClassEncoder(f1 -> ext1, f2 -> ext2) - case Schema.CaseClass3(f1, f2, f3, _, ext1, ext2, ext3) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3) - case Schema.CaseClass4(f1, f2, f3, f4, _, ext1, ext2, ext3, ext4) => + case Schema.Primitive(standardType) => primitiveCodec(standardType) + case Schema.Sequence(schema, _, g) => JsonEncoder.chunk(schemaEncoder(schema)).contramap(g) + case Schema.Transform(c, _, g) => transformEncoder(c, g) + case Schema.Tuple(l, r) => schemaEncoder(l).both(schemaEncoder(r)) + case Schema.Optional(schema) => JsonEncoder.option(schemaEncoder(schema)) + case Schema.Fail(_) => unitEncoder.contramap(_ => ()) + case Schema.GenericRecord(structure) => recordEncoder(structure) + case Schema.Enumeration(structure) => enumerationEncoder(structure) + case EitherSchema(left, right) => JsonEncoder.either(schemaEncoder(left), schemaEncoder(right)) + case Schema.CaseObject(_) => objectEncoder[A] + case Schema.CaseClass1(_, f, _, ext) => caseClassEncoder(f -> ext) + case Schema.CaseClass2(_, f1, f2, _, ext1, ext2) => caseClassEncoder(f1 -> ext1, f2 -> ext2) + case Schema.CaseClass3(_, f1, f2, f3, _, ext1, ext2, ext3) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3) + case Schema.CaseClass4(_, f1, f2, f3, f4, _, ext1, ext2, ext3, ext4) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4) - case Schema.CaseClass5(f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5) => + case Schema.CaseClass5(_, f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5) - case Schema.CaseClass6(f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6) => + case Schema.CaseClass6(_, f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6) - case Schema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7) => + case Schema.CaseClass7(_, f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7) - case Schema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8) => + case Schema.CaseClass8(_, f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8) => caseClassEncoder(f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6, f7 -> ext7, f8 -> ext8) case Schema - .CaseClass9(f1, f2, f3, f4, f5, f6, f7, f8, f9, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8, ext9) => + .CaseClass9( + _, + f1, + f2, + f3, + f4, + f5, + f6, + f7, + f8, + f9, + _, + ext1, + ext2, + ext3, + ext4, + ext5, + ext6, + ext7, + ext8, + ext9 + ) => caseClassEncoder( f1 -> ext1, f2 -> ext2, @@ -140,6 +161,7 @@ object JsonCodec extends Codec { f9 -> ext9 ) case Schema.CaseClass10( + _, f1, f2, f3, @@ -175,6 +197,7 @@ object JsonCodec extends Codec { f10 -> ext10 ) case Schema.CaseClass11( + _, f1, f2, f3, @@ -213,6 +236,7 @@ object JsonCodec extends Codec { f11 -> ext11 ) case Schema.CaseClass12( + _, f1, f2, f3, @@ -254,6 +278,7 @@ object JsonCodec extends Codec { f12 -> ext12 ) case Schema.CaseClass13( + _, f1, f2, f3, @@ -298,6 +323,7 @@ object JsonCodec extends Codec { f13 -> ext13 ) case Schema.CaseClass14( + _, f1, f2, f3, @@ -345,6 +371,7 @@ object JsonCodec extends Codec { f14 -> ext14 ) case Schema.CaseClass15( + _, f1, f2, f3, @@ -395,6 +422,7 @@ object JsonCodec extends Codec { f15 -> ext15 ) case Schema.CaseClass16( + _, f1, f2, f3, @@ -448,6 +476,7 @@ object JsonCodec extends Codec { f16 -> ext16 ) case Schema.CaseClass17( + _, f1, f2, f3, @@ -504,6 +533,7 @@ object JsonCodec extends Codec { f17 -> ext17 ) case Schema.CaseClass18( + _, f1, f2, f3, @@ -563,6 +593,7 @@ object JsonCodec extends Codec { f18 -> ext18 ) case Schema.CaseClass19( + _, f1, f2, f3, @@ -625,6 +656,7 @@ object JsonCodec extends Codec { f19 -> ext19 ) case Schema.CaseClass20( + _, f1, f2, f3, @@ -690,6 +722,7 @@ object JsonCodec extends Codec { f20 -> ext20 ) case Schema.CaseClass21( + _, f1, f2, f3, @@ -758,6 +791,7 @@ object JsonCodec extends Codec { f21 -> ext21 ) case Schema.CaseClass22( + _, f1, f2, f3, @@ -842,14 +876,14 @@ object JsonCodec extends Codec { } } - private def caseClassEncoder[Z](fields: ((String, Schema[_]), Z => Any)*): JsonEncoder[Z] = + private def caseClassEncoder[Z](fields: (Schema.Field[_], Z => Any)*): JsonEncoder[Z] = (a: Z, indent: Option[Int], out: Write) => { out.write('{') val indent_ = bump(indent) pad(indent_, out) var first = true fields.foreach { - case ((key, schema), ext) => + case (Schema.Field(key, schema, _), ext) => val enc = schemaEncoder(schema.asInstanceOf[Schema[Any]]) if (first) first = false @@ -886,7 +920,7 @@ object JsonCodec extends Codec { } } - private def recordEncoder(structure: ListMap[String, Schema[_]]): JsonEncoder[ListMap[String, _]] = { + private def recordEncoder(structure: Seq[Schema.Field[_]]): JsonEncoder[ListMap[String, _]] = { (value: ListMap[String, _], indent: Option[Int], out: Write) => { if (structure.isEmpty) { @@ -897,7 +931,7 @@ object JsonCodec extends Codec { pad(indent_, out) var first = true structure.foreach { - case (k, a) => + case Schema.Field(k, a, _) => val enc = schemaEncoder(a.asInstanceOf[Schema[Any]]) if (first) first = false @@ -957,38 +991,71 @@ object JsonCodec extends Codec { schemaDecoder(schema).decodeJson(json) private def schemaDecoder[A](schema: Schema[A]): JsonDecoder[A] = schema match { - case Schema.Primitive(standardType) => primitiveCodec(standardType) - case Schema.Optional(codec) => JsonDecoder.option(schemaDecoder(codec)) - case Schema.Tuple(left, right) => JsonDecoder.tuple2(schemaDecoder(left), schemaDecoder(right)) - case Schema.Transform(codec, f, _) => schemaDecoder(codec).mapOrFail(f) - case Schema.Sequence(codec, f, _) => JsonDecoder.chunk(schemaDecoder(codec)).map(f) - case Schema.Fail(message) => failDecoder(message) - case Schema.GenericRecord(structure) => recordDecoder(structure) - case Schema.Enumeration(structure) => enumerationDecoder(structure) - case EitherSchema(left, right) => JsonDecoder.either(schemaDecoder(left), schemaDecoder(right)) - case Schema.CaseObject(instance) => caseObjectDecoder(instance) - case s @ Schema.CaseClass1(_, _, _) => caseClass1Decoder(s) - case s @ Schema.CaseClass2(_, _, _, _, _) => caseClass2Decoder(s) - case s @ Schema.CaseClass3(_, _, _, _, _, _, _) => caseClass3Decoder(s) - case s @ Schema.CaseClass4(_, _, _, _, _, _, _, _, _) => caseClass4Decoder(s) - case s @ Schema.CaseClass5(_, _, _, _, _, _, _, _, _, _, _) => caseClass5Decoder(s) - case s @ Schema.CaseClass6(_, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass6Decoder(s) - case s @ Schema.CaseClass7(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass7Decoder(s) - case s @ Schema.CaseClass8(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass8Decoder(s) - case s @ Schema.CaseClass9(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass9Decoder(s) - case s @ Schema.CaseClass10(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + case Schema.Primitive(standardType) => primitiveCodec(standardType) + case Schema.Optional(codec) => JsonDecoder.option(schemaDecoder(codec)) + case Schema.Tuple(left, right) => JsonDecoder.tuple2(schemaDecoder(left), schemaDecoder(right)) + case Schema.Transform(codec, f, _) => schemaDecoder(codec).mapOrFail(f) + case Schema.Sequence(codec, f, _) => JsonDecoder.chunk(schemaDecoder(codec)).map(f) + case Schema.Fail(message) => failDecoder(message) + case Schema.GenericRecord(structure) => recordDecoder(structure) + case Schema.Enumeration(structure) => enumerationDecoder(structure) + case EitherSchema(left, right) => JsonDecoder.either(schemaDecoder(left), schemaDecoder(right)) + case Schema.CaseObject(instance) => caseObjectDecoder(instance) + case s @ Schema.CaseClass1(_, _, _, _) => caseClass1Decoder(s) + case s @ Schema.CaseClass2(_, _, _, _, _, _) => caseClass2Decoder(s) + case s @ Schema.CaseClass3(_, _, _, _, _, _, _, _) => caseClass3Decoder(s) + case s @ Schema.CaseClass4(_, _, _, _, _, _, _, _, _, _) => caseClass4Decoder(s) + case s @ Schema.CaseClass5(_, _, _, _, _, _, _, _, _, _, _, _) => caseClass5Decoder(s) + case s @ Schema.CaseClass6(_, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass6Decoder(s) + case s @ Schema.CaseClass7(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass7Decoder(s) + case s @ Schema.CaseClass8(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass8Decoder(s) + case s @ Schema.CaseClass9(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass9Decoder(s) + case s @ Schema.CaseClass10(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass10Decoder(s) - case s @ Schema.CaseClass11(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + case s @ Schema.CaseClass11(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass11Decoder(s) - case s @ Schema.CaseClass12(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + case s @ Schema.CaseClass12(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass12Decoder(s) - case s @ Schema.CaseClass13(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + case s @ Schema.CaseClass13(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass13Decoder(s) case s @ Schema - .CaseClass14(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + .CaseClass14(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => caseClass14Decoder(s) case s @ Schema - .CaseClass15(_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _) => + .CaseClass15( + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _, + _ + ) => caseClass15Decoder(s) case s @ Schema.CaseClass16( _, @@ -1023,6 +1090,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass16Decoder(s) @@ -1061,6 +1129,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass17Decoder(s) @@ -1101,6 +1170,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass18Decoder(s) @@ -1143,6 +1213,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass19Decoder(s) @@ -1187,6 +1258,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass20Decoder(s) @@ -1233,6 +1305,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass21Decoder(s) @@ -1281,6 +1354,7 @@ object JsonCodec extends Codec { _, _, _, + _, _ ) => caseClass22Decoder(s) @@ -2254,13 +2328,13 @@ object JsonCodec extends Codec { private def unsafeDecodeFields( trace: List[JsonError], in: RetractReader, - fields: (String, Schema[_])* + fields: Schema.Field[_]* ): Array[Any] = { val len: Int = fields.length val buffer = Array.ofDim[Any](len) - val matrix = new StringMatrix(fields.map(_._1).toArray) - val spans: Array[JsonError] = fields.map(_._1).toArray.map(JsonError.ObjectAccess(_)) - val schemas: Array[Schema[_]] = fields.map(_._2).toArray + val matrix = new StringMatrix(fields.map(_.label).toArray) + val spans: Array[JsonError] = fields.map(_.label).toArray.map(JsonError.ObjectAccess(_)) + val schemas: Array[Schema[_]] = fields.map(_.schema).toArray Lexer.char(trace, in, '{') if (Lexer.firstField(trace, in)) { do { @@ -2285,18 +2359,24 @@ object JsonCodec extends Codec { buffer } - private def recordDecoder(structure: ListMap[String, Schema[_]]): JsonDecoder[ListMap[String, Any]] = { + private def recordDecoder(structure: Seq[Schema.Field[_]]): JsonDecoder[ListMap[String, Any]] = { (trace: List[JsonError], in: RetractReader) => { val builder: ChunkBuilder[(String, Any)] = zio.ChunkBuilder.make[(String, Any)](structure.size) Lexer.char(trace, in, '{') if (Lexer.firstField(trace, in)) { do { - val field = Lexer.string(trace, in).toString - val trace_ = JsonError.ObjectAccess(field) :: trace - Lexer.char(trace_, in, ':') - val value = schemaDecoder(structure(field)).unsafeDecode(trace_, in) - builder += ((JsonFieldDecoder.string.unsafeDecodeField(trace_, field), value)) + val field = Lexer.string(trace, in).toString + structure.find(_.label == field) match { + case Some(Schema.Field(label, schema, _)) => + val trace_ = JsonError.ObjectAccess(label) :: trace + Lexer.char(trace_, in, ':') + val value = schemaDecoder(schema).unsafeDecode(trace_, in) + builder += ((JsonFieldDecoder.string.unsafeDecodeField(trace_, label), value)) + case None => + Lexer.skipValue(trace, in) + + } } while (Lexer.nextField(trace, in)) } (ListMap.newBuilder[String, Any] ++= builder.result()).result() diff --git a/zio-schema/shared/src/main/scala/zio/schema/codec/ProtobufCodec.scala b/zio-schema/shared/src/main/scala/zio/schema/codec/ProtobufCodec.scala index 39d3af49c..72cbb9ded 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/codec/ProtobufCodec.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/codec/ProtobufCodec.scala @@ -47,52 +47,60 @@ object ProtobufCodec extends Codec { case object Bit32 extends WireType } - def flatFields( - structure: ListMap[String, Schema[_]], - nextFieldNumber: Int = 1 - ): ListMap[Int, (String, Schema[_])] = - structure.toSeq - .foldLeft((nextFieldNumber, ListMap[Int, (String, Schema[_])]())) { (numAndMap, fieldAndSchema) => - nestedFields(fieldAndSchema._1, fieldAndSchema._2, nextFieldNumber) match { - case Some(fields) => (numAndMap._1 + fields.size, numAndMap._2 ++ fields) - case None => (numAndMap._1 + 1, numAndMap._2 + (numAndMap._1 -> fieldAndSchema)) - } - } - ._2 - - private def nestedFields( - baseField: String, - schema: Schema[_], - nextFieldNumber: Int - ): Option[ListMap[Int, (String, Schema[_])]] = - schema match { - case Schema.Transform(codec, f, g) => - nestedFields(baseField, codec, nextFieldNumber).map(_.map { - case (fieldNumber, fieldAndSchema) => - (fieldNumber, (fieldAndSchema._1, Schema.Transform(fieldAndSchema._2.asInstanceOf[Schema[Any]], f, g))) - }) - case _ => None - } + // def flatFields( + // structure: Seq[Schema.Field[_]] + // ): Seq[Schema.Field[_]] = + // structure + // .foldLeft(Seq.empty[Schema.Field[_]]) { (struct, field) => + // nestedFields(field.label, field.schema, nextFieldNumber) match { + // case Some(fields) => (numAndMap._1 + fields.size, numAndMap._2 ++ fields) + // case None => (numAndMap._1 + 1, numAndMap._2 + (numAndMap._1 -> field)) + // } + // } + // ._2 + + // private def nestedFields( + // baseField: String, + // schema: Schema[_], + // nextFieldNumber: Int + // ): Seq[Schema.Field[_]] = + // schema match { + // case Schema.Transform(codec, f, g) => + // nestedFields(baseField, codec, nextFieldNumber).map(_.map { + // case (fieldNumber, field) => + // (fieldNumber, Schema.Field(field.label, Schema.Transform(field.schema.asInstanceOf[Schema[Any]], f, g))) + // }) + // case _ => None + // } def tupleSchema[A, B](first: Schema[A], second: Schema[B]): Schema[ListMap[String, _]] = - Schema.record(ListMap("first" -> first, "second" -> second)) + Schema.record(Schema.Field("first", first), Schema.Field("second", second)) - def singleSchema[A](codec: Schema[A]): Schema[ListMap[String, _]] = Schema.record(ListMap("value" -> codec)) + def singleSchema[A](codec: Schema[A]): Schema[ListMap[String, _]] = Schema.record(Schema.Field("value", codec)) - def monthDayStructure(): ListMap[String, Schema[Int]] = - ListMap("month" -> Schema.Primitive(StandardType.IntType), "day" -> Schema.Primitive(StandardType.IntType)) + def monthDayStructure(): Seq[Schema.Field[Int]] = + Seq( + Schema.Field("month", Schema.Primitive(StandardType.IntType)), + Schema.Field("day", Schema.Primitive(StandardType.IntType)) + ) - def periodStructure(): ListMap[String, Schema[Int]] = ListMap( - "years" -> Schema.Primitive(StandardType.IntType), - "months" -> Schema.Primitive(StandardType.IntType), - "days" -> Schema.Primitive(StandardType.IntType) + def periodStructure(): Seq[Schema.Field[Int]] = Seq( + Schema.Field("years", Schema.Primitive(StandardType.IntType)), + Schema.Field("months", Schema.Primitive(StandardType.IntType)), + Schema.Field("days", Schema.Primitive(StandardType.IntType)) ) - def yearMonthStructure(): ListMap[String, Schema[Int]] = - ListMap("year" -> Schema.Primitive(StandardType.IntType), "month" -> Schema.Primitive(StandardType.IntType)) + def yearMonthStructure(): Seq[Schema.Field[Int]] = + Seq( + Schema.Field("year", Schema.Primitive(StandardType.IntType)), + Schema.Field("month", Schema.Primitive(StandardType.IntType)) + ) - def durationStructure(): ListMap[String, Schema[_]] = - ListMap("seconds" -> Schema.Primitive(StandardType.LongType), "nanos" -> Schema.Primitive(StandardType.IntType)) + def durationStructure(): Seq[Schema.Field[_]] = + Seq( + Schema.Field("seconds", Schema.Primitive(StandardType.LongType)), + Schema.Field("nanos", Schema.Primitive(StandardType.IntType)) + ) /** * Used when encoding sequence of values to decide whether each value need its own key or values can be packed together without keys (for example numbers). @@ -107,7 +115,6 @@ object ProtobufCodec extends Codec { case _: Schema.Optional[_] => false case _: Schema.Fail[_] => false case _: Schema.EitherSchema[_, _] => false - case _: Schema.CaseClass[_] => false case _ => false } @@ -158,17 +165,17 @@ object ProtobufCodec extends Codec { case (Schema.Optional(codec), v: Option[_]) => encodeOptional(fieldNumber, codec, v) case (Schema.EitherSchema(left, right), v: Either[_, _]) => encodeEither(fieldNumber, left, right, v) case (Schema.CaseObject(_), _) => encodeCaseObject(fieldNumber) - case (Schema.CaseClass1(f, _, ext), v) => encodeCaseClass(fieldNumber, v, f -> ext) - case (Schema.CaseClass2(f1, f2, _, ext1, ext2), v) => encodeCaseClass(fieldNumber, v, f1 -> ext1, f2 -> ext2) - case (Schema.CaseClass3(f1, f2, f3, _, ext1, ext2, ext3), v) => + case (Schema.CaseClass1(_, f, _, ext), v) => encodeCaseClass(fieldNumber, v, f -> ext) + case (Schema.CaseClass2(_, f1, f2, _, ext1, ext2), v) => encodeCaseClass(fieldNumber, v, f1 -> ext1, f2 -> ext2) + case (Schema.CaseClass3(_, f1, f2, f3, _, ext1, ext2, ext3), v) => encodeCaseClass(fieldNumber, v, f1 -> ext1, f2 -> ext2, f3 -> ext3) - case (Schema.CaseClass4(f1, f2, f3, f4, _, ext1, ext2, ext3, ext4), v) => + case (Schema.CaseClass4(_, f1, f2, f3, f4, _, ext1, ext2, ext3, ext4), v) => encodeCaseClass(fieldNumber, v, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4) - case (Schema.CaseClass5(f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5), v) => + case (Schema.CaseClass5(_, f1, f2, f3, f4, f5, _, ext1, ext2, ext3, ext4, ext5), v) => encodeCaseClass(fieldNumber, v, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5) - case (Schema.CaseClass6(f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6), v) => + case (Schema.CaseClass6(_, f1, f2, f3, f4, f5, f6, _, ext1, ext2, ext3, ext4, ext5, ext6), v) => encodeCaseClass(fieldNumber, v, f1 -> ext1, f2 -> ext2, f3 -> ext3, f4 -> ext4, f5 -> ext5, f6 -> ext6) - case (Schema.CaseClass7(f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7), v) => + case (Schema.CaseClass7(_, f1, f2, f3, f4, f5, f6, f7, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7), v) => encodeCaseClass( fieldNumber, v, @@ -181,7 +188,7 @@ object ProtobufCodec extends Codec { f7 -> ext7 ) case ( - Schema.CaseClass8(f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8), + Schema.CaseClass8(_, f1, f2, f3, f4, f5, f6, f7, f8, _, ext1, ext2, ext3, ext4, ext5, ext6, ext7, ext8), v ) => encodeCaseClass( @@ -198,6 +205,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass9( + _, f1, f2, f3, @@ -235,6 +243,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass10( + _, f1, f2, f3, @@ -275,6 +284,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass11( + _, f1, f2, f3, @@ -318,6 +328,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass12( + _, f1, f2, f3, @@ -364,6 +375,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass13( + _, f1, f2, f3, @@ -413,6 +425,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass14( + _, f1, f2, f3, @@ -465,6 +478,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass15( + _, f1, f2, f3, @@ -520,6 +534,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass16( + _, f1, f2, f3, @@ -578,6 +593,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass17( + _, f1, f2, f3, @@ -639,6 +655,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass18( + _, f1, f2, f3, @@ -703,6 +720,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass19( + _, f1, f2, f3, @@ -770,6 +788,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass20( + _, f1, f2, f3, @@ -840,6 +859,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass21( + _, f1, f2, f3, @@ -913,6 +933,7 @@ object ProtobufCodec extends Codec { ) case ( Schema.CaseClass22( + _, f1, f2, f3, @@ -1017,12 +1038,12 @@ object ProtobufCodec extends Codec { private def encodeCaseClass[Z]( fieldNumber: Option[Int], value: Z, - fields: ((String, Schema[_]), Z => Any)* + fields: (Schema.Field[_], Z => Any)* ): Chunk[Byte] = { val encoded = Chunk .fromIterable( fields.zipWithIndex.map { - case (((_, schema), ext), fieldNumber) => + case ((Schema.Field(_, schema, _), ext), fieldNumber) => encode(Some(fieldNumber + 1), schema.asInstanceOf[Schema[Any]], ext(value)) } ) @@ -1032,15 +1053,15 @@ object ProtobufCodec extends Codec { private def encodeRecord( fieldNumber: Option[Int], - structure: ListMap[String, Schema[_]], + structure: Seq[Schema.Field[_]], data: ListMap[String, _] ): Chunk[Byte] = { val encodedRecord = Chunk - .fromIterable(flatFields(structure).toSeq.map { - case (fieldNumber, (field, schema)) => + .fromIterable(structure.zipWithIndex.map { + case (Schema.Field(label, schema, _), fieldNumber) => data - .get(field) - .map(value => encode(Some(fieldNumber), schema.asInstanceOf[Schema[Any]], value)) + .get(label) + .map(value => encode(Some(fieldNumber + 1), schema.asInstanceOf[Schema[Any]], value)) .getOrElse(Chunk.empty) }) .flatten @@ -1296,10 +1317,10 @@ object ProtobufCodec extends Codec { private def decoder[A](schema: Schema[A]): Decoder[A] = schema match { - case Schema.GenericRecord(structure) => recordDecoder(flatFields(structure)) + case Schema.GenericRecord(structure) => recordDecoder(structure) case Schema.Sequence(element, f, _) => if (canBePacked(element)) packedSequenceDecoder(element).map(f) else nonPackedSequenceDecoder(element).map(f) - case Schema.Enumeration(structure) => enumerationDecoder(flatFields(structure)) + case Schema.Enumeration(structure) => enumerationDecoder(structure) case Schema.Transform(codec, f, _) => transformDecoder(codec, f) case Schema.Primitive(standardType) => primitiveDecoder(standardType) case Schema.Tuple(left, right) => tupleDecoder(left, right) @@ -2262,16 +2283,16 @@ object ProtobufCodec extends Codec { else validateBuffer(index + 1, buffer) - private def unsafeDecodeFields(buffer: Array[Any], fields: (String, Schema[_])*): Decoder[Array[Any]] = + private def unsafeDecodeFields(buffer: Array[Any], fields: Schema.Field[_]*): Decoder[Array[Any]] = keyDecoder.flatMap { case (wt, fieldNumber) if fieldNumber == fields.length => wt match { case LengthDelimited(width) => - decoder(fields(fieldNumber - 1)._2) + decoder(fields(fieldNumber - 1).schema) .take(width) .map(fieldValue => buffer.updated(fieldNumber - 1, fieldValue)) case _ => - decoder(fields(fieldNumber - 1)._2) + decoder(fields(fieldNumber - 1).schema) .map(fieldValue => buffer.updated(fieldNumber - 1, fieldValue)) } case (wt, fieldNumber) => @@ -2279,12 +2300,12 @@ object ProtobufCodec extends Codec { wt match { case LengthDelimited(width) => for { - fieldValue <- decoder(fields(fieldNumber - 1)._2).take(width) + fieldValue <- decoder(fields(fieldNumber - 1).schema).take(width) remainder <- unsafeDecodeFields(buffer, fields: _*) } yield remainder.updated(fieldNumber - 1, fieldValue) case _ => for { - fieldValue <- decoder(fields(fieldNumber - 1)._2) + fieldValue <- decoder(fields(fieldNumber - 1).schema) remainder <- unsafeDecodeFields(buffer, fields: _*) } yield remainder.updated(fieldNumber - 1, fieldValue) } @@ -2293,38 +2314,37 @@ object ProtobufCodec extends Codec { } } - private def enumerationDecoder(fields: ListMap[Int, (String, Schema[_])]): Decoder[ListMap[String, _]] = + private def enumerationDecoder(fields: ListMap[String, Schema[_]]): Decoder[ListMap[String, _]] = keyDecoder.flatMap { case (_, fieldNumber) => - if (fields.contains(fieldNumber)) { - val (fieldName, schema) = fields(fieldNumber) - + if (fieldNumber <= fields.size) { + val (fieldName, schema) = fields.toSeq(fieldNumber - 1) decoder(schema).map(fieldValue => ListMap(fieldName -> fieldValue)) } else { fail(s"Schema doesn't contain field number $fieldNumber.") } } - private def recordDecoder(fields: ListMap[Int, (String, Schema[_])]): Decoder[ListMap[String, _]] = - if (fields.isEmpty) + private def recordDecoder(fields: Seq[Schema.Field[_]], decoded: Int = 0): Decoder[ListMap[String, _]] = + if (fields.isEmpty || (fields.size == decoded)) Decoder.succeed(ListMap.empty) else keyDecoder.flatMap { case (wt, fieldNumber) => - if (fields.contains(fieldNumber)) { - val (fieldName, schema) = fields(fieldNumber) + if (fields.isDefinedAt(fieldNumber - 1)) { + val Schema.Field(fieldName, schema, _) = fields(fieldNumber - 1) wt match { case LengthDelimited(width) => for { fieldValue <- decoder(schema).take(width) - remainder <- recordDecoder(fields - fieldNumber) + remainder <- recordDecoder(fields, decoded + 1) } yield (remainder.updated(fieldName, fieldValue)) case _ => for { fieldValue <- decoder(schema) - remainder <- recordDecoder(fields - fieldNumber) + remainder <- recordDecoder(fields, decoded + 1) } yield (remainder.updated(fieldName, fieldValue)) } } else { @@ -2408,13 +2428,13 @@ object ProtobufCodec extends Codec { case StandardType.Month => varIntDecoder.map(_.intValue).map(Month.of) case StandardType.MonthDay => - recordDecoder(flatFields(monthDayStructure())) + recordDecoder(monthDayStructure()) .map( data => MonthDay.of(data.getOrElse("month", 0).asInstanceOf[Int], data.getOrElse("day", 0).asInstanceOf[Int]) ) case StandardType.Period => - recordDecoder(flatFields(periodStructure())) + recordDecoder(periodStructure()) .map( data => Period.of( @@ -2426,7 +2446,7 @@ object ProtobufCodec extends Codec { case StandardType.Year => varIntDecoder.map(_.intValue).map(Year.of) case StandardType.YearMonth => - recordDecoder(flatFields(yearMonthStructure())) + recordDecoder(yearMonthStructure()) .map( data => YearMonth.of(data.getOrElse("year", 0).asInstanceOf[Int], data.getOrElse("month", 0).asInstanceOf[Int]) @@ -2437,7 +2457,7 @@ object ProtobufCodec extends Codec { .map(_.intValue) .map(ZoneOffset.ofTotalSeconds) case StandardType.Duration(_) => - recordDecoder(flatFields(durationStructure())) + recordDecoder(durationStructure()) .map( data => Duration.ofSeconds( diff --git a/zio-schema/shared/src/main/scala/zio/schema/macros.scala b/zio-schema/shared/src/main/scala/zio/schema/macros.scala index 77310bb57..531ccf622 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/macros.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/macros.scala @@ -37,7 +37,7 @@ object DeriveSchema { case _ => Schema .GenericRecord( - ListMap.empty[String, Schema[_]] ++ ctx.parameters.map(p => p.label -> p.typeclass) + ctx.parameters.map(p => Schema.Field(p.label, p.typeclass, p.annotations)) ) .transformOrFail( { map => @@ -60,7 +60,8 @@ object DeriveSchema { private def caseClass1[Z](ctx: CaseClass[Typeclass, Z]): Typeclass[Z] = { val param = ctx.parameters.head new Schema.CaseClass1[param.PType, Z]( - field = (param.label, param.typeclass), + annotations = ctx.annotations, + field = Schema.Field(param.label, param.typeclass, param.annotations), construct = (p: param.PType) => ctx.construct(_ => p), extractField = (z: Z) => param.dereference(z) ) @@ -70,8 +71,9 @@ object DeriveSchema { val param1 = ctx.parameters.head val param2 = ctx.parameters(1) new Schema.CaseClass2[param1.PType, param2.PType, Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), construct = (p1: param1.PType, p2: param2.PType) => ctx.rawConstruct(Seq(p1, p2)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z) @@ -83,9 +85,10 @@ object DeriveSchema { val param2 = ctx.parameters(1) val param3 = ctx.parameters(2) new Schema.CaseClass3[param1.PType, param2.PType, param3.PType, Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType) => ctx.rawConstruct(Seq(p1, p2, p3)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -99,10 +102,11 @@ object DeriveSchema { val param3 = ctx.parameters(2) val param4 = ctx.parameters(3) new Schema.CaseClass4[param1.PType, param2.PType, param3.PType, param4.PType, Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType) => ctx.rawConstruct(Seq(p1, p2, p3, p4)), extractField1 = (z: Z) => param1.dereference(z), @@ -119,11 +123,12 @@ object DeriveSchema { val param4 = ctx.parameters(3) val param5 = ctx.parameters(4) new Schema.CaseClass5[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType) => ctx.rawConstruct(Seq(p1, p2, p3, p4, p5)), extractField1 = (z: Z) => param1.dereference(z), @@ -142,12 +147,13 @@ object DeriveSchema { val param5 = ctx.parameters(4) val param6 = ctx.parameters(5) new Schema.CaseClass6[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType, Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType, p6: param6.PType) => ctx.rawConstruct(Seq(p1, p2, p3, p4, p5, p6)), @@ -178,13 +184,14 @@ object DeriveSchema { param7.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -224,14 +231,15 @@ object DeriveSchema { param8.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -275,15 +283,16 @@ object DeriveSchema { param9.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -331,16 +340,17 @@ object DeriveSchema { param10.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -392,17 +402,18 @@ object DeriveSchema { param11.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -458,18 +469,19 @@ object DeriveSchema { param12.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -529,19 +541,20 @@ object DeriveSchema { param13.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -605,20 +618,21 @@ object DeriveSchema { param14.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), + field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -686,21 +700,22 @@ object DeriveSchema { param15.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), + field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), + field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -772,22 +787,23 @@ object DeriveSchema { param16.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), + field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), + field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), + field16 = Schema.Field(param16.label, param16.typeclass, param16.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -863,23 +879,24 @@ object DeriveSchema { param17.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, - field17 = param17.label -> param17.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), + field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), + field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), + field16 = Schema.Field(param16.label, param16.typeclass, param16.annotations), + field17 = Schema.Field(param17.label, param17.typeclass, param17.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -959,24 +976,25 @@ object DeriveSchema { param18.PType, Z ]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, - field17 = param17.label -> param17.typeclass, - field18 = param18.label -> param18.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), + field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), + field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), + field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), + field16 = Schema.Field(param16.label, param16.typeclass, param16.annotations), + field17 = Schema.Field(param17.label, param17.typeclass, param17.annotations), + field18 = Schema.Field(param18.label, param18.typeclass, param18.annotations), construct = ( p1: param1.PType, p2: param2.PType, @@ -1040,25 +1058,26 @@ object DeriveSchema { val param18 = ctx.parameters(17) val param19 = ctx.parameters(18) new Schema.CaseClass19[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, - field17 = param17.label -> param17.typeclass, - field18 = param18.label -> param18.typeclass, - field19 = param19.label -> param19.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), + field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), + field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), + field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), + field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), + field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), + field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), + field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), + field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), + field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), + field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), + field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), + field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), + field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), + field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), + field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), + field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), + field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), + field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -1104,26 +1123,27 @@ object DeriveSchema { val param19 = ctx.parameters(18) val param20 = ctx.parameters(19) new Schema.CaseClass20[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,param20.PType,Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, - field17 = param17.label -> param17.typeclass, - field18 = param18.label -> param18.typeclass, - field19 = param19.label -> param19.typeclass, - field20 = param20.label -> param20.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), + field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), + field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), + field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), + field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), + field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), + field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), + field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), + field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), + field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), + field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), + field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), + field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), + field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), + field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), + field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), + field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), + field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), + field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), + field20 = Schema.Field(param20.label,param20.typeclass,param20.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType,p20: param20.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -1171,27 +1191,28 @@ object DeriveSchema { val param20 = ctx.parameters(19) val param21 = ctx.parameters(20) new Schema.CaseClass21[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,param20.PType,param21.PType,Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, - field17 = param17.label -> param17.typeclass, - field18 = param18.label -> param18.typeclass, - field19 = param19.label -> param19.typeclass, - field20 = param20.label -> param20.typeclass, - field21 = param21.label -> param21.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), + field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), + field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), + field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), + field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), + field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), + field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), + field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), + field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), + field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), + field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), + field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), + field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), + field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), + field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), + field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), + field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), + field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), + field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), + field20 = Schema.Field(param20.label,param20.typeclass,param20.annotations), + field21 = Schema.Field(param21.label,param21.typeclass,param21.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType,p20: param20.PType,p21: param21.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -1241,28 +1262,29 @@ object DeriveSchema { val param21 = ctx.parameters(20) val param22 = ctx.parameters(21) new Schema.CaseClass22[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,param20.PType,param21.PType,param22.PType,Z]( - field1 = param1.label -> param1.typeclass, - field2 = param2.label -> param2.typeclass, - field3 = param3.label -> param3.typeclass, - field4 = param4.label -> param4.typeclass, - field5 = param5.label -> param5.typeclass, - field6 = param6.label -> param6.typeclass, - field7 = param7.label -> param7.typeclass, - field8 = param8.label -> param8.typeclass, - field9 = param9.label -> param9.typeclass, - field10 = param10.label -> param10.typeclass, - field11 = param11.label -> param11.typeclass, - field12 = param12.label -> param12.typeclass, - field13 = param13.label -> param13.typeclass, - field14 = param14.label -> param14.typeclass, - field15 = param15.label -> param15.typeclass, - field16 = param16.label -> param16.typeclass, - field17 = param17.label -> param17.typeclass, - field18 = param18.label -> param18.typeclass, - field19 = param19.label -> param19.typeclass, - field20 = param20.label -> param20.typeclass, - field21 = param21.label -> param21.typeclass, - field22 = param22.label -> param22.typeclass, + annotations = ctx.annotations, + field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), + field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), + field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), + field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), + field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), + field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), + field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), + field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), + field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), + field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), + field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), + field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), + field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), + field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), + field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), + field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), + field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), + field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), + field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), + field20 = Schema.Field(param20.label,param20.typeclass,param20.annotations), + field21 = Schema.Field(param21.label,param21.typeclass,param21.annotations), + field22 = Schema.Field(param22.label,param22.typeclass,param22.annotations), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType,p20: param20.PType,p21: param21.PType,p22: param22.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), diff --git a/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala b/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala index 1147b8f22..30045a40c 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala @@ -1,13 +1,18 @@ package zio.schema +import scala.annotation.Annotation + import zio.schema.SchemaAssertions.hasSameSchema import zio.test._ object DeriveSchemaSpec extends DefaultRunnableSpec { + final case class annotation1(value: String) extends Annotation + final case class annotation2(value: String) extends Annotation + sealed case class UserId(id: String) - sealed case class User(name: String, id: UserId) + sealed case class User(name: String, @annotation1("foo") @annotation2("bar") id: UserId) sealed trait Status case class Ok(response: List[String]) extends Status @@ -27,7 +32,8 @@ object DeriveSchemaSpec extends DefaultRunnableSpec { val derived: Schema[UserId] = DeriveSchema.gen val expected: Schema[UserId] = Schema.CaseClass1( - field = "id" -> Schema.Primitive(StandardType.StringType), + annotations = Nil, + field = Schema.Field("id", Schema.Primitive(StandardType.StringType)), UserId.apply, (uid: UserId) => uid.id ) @@ -44,14 +50,17 @@ object DeriveSchemaSpec extends DefaultRunnableSpec { val derived: Schema[User] = DeriveSchema.gen val expected: Schema[User] = Schema.CaseClass2( - field1 = ("name", Schema.Primitive(StandardType.StringType)), - field2 = ( + annotations = Nil, + field1 = Schema.Field("name", Schema.Primitive(StandardType.StringType)), + field2 = Schema.Field( "id", Schema.CaseClass1( - field = "id" -> Schema.Primitive(StandardType.StringType), + annotations = Nil, + field = Schema.Field("id", Schema.Primitive(StandardType.StringType)), UserId.apply, (uid: UserId) => uid.id - ) + ), + Seq(annotation1("foo"), annotation2("bar")) ), User.apply, (u: User) => u.name, diff --git a/zio-schema/shared/src/test/scala/zio/schema/JavaTimeGen.scala b/zio-schema/shared/src/test/scala/zio/schema/JavaTimeGen.scala index 31ec537ce..526384fb5 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/JavaTimeGen.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/JavaTimeGen.scala @@ -62,11 +62,11 @@ object JavaTimeGen { //FIXME There is a bug in JDK Duration parsing that caused issues in zio-json (https://github.com/zio/zio-json/issues/214). // Do not generate Durations with - seconds.Once that is addressed can remove filter condition - val anyDuration: Gen[Random, Duration] = Gen.anyLong + val anyDuration: Gen[Random, Duration] = Gen + .long(0, 999999999L) .zipWith(Gen.long(0, 999999999L)) { (seconds, nanos) => Duration.ofSeconds(seconds, nanos) } - .filter(_.getSeconds > 0) val anyPeriod: Gen[Random, Period] = for { diff --git a/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala b/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala index c9fd5f8ec..2746a2212 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala @@ -13,11 +13,12 @@ object SchemaAssertions { case (Schema.Transform(codec1, _, _), Schema.Transform(codec2, _, _)) => equalsSchema(codec1, codec2) case (Schema.GenericRecord(structure1), Schema.GenericRecord(structure2)) => - hasSameKeys(structure1, structure2) && - structure1.forall { keyAndSchema => - val left: Schema[Any] = keyAndSchema._2.asInstanceOf[Schema[Any]] - val right: Schema[Any] = structure2(keyAndSchema._1).asInstanceOf[Schema[Any]] - equalsSchema(left, right) + hasSameFields(structure1, structure2) && + structure1.forall { + case Schema.Field(label, schema, _) => + val left: Schema[Any] = schema.asInstanceOf[Schema[Any]] + val right: Schema[Any] = structure2.find(_.label == label).asInstanceOf[Schema[Any]] + equalsSchema(left, right) } case (Schema.Sequence(element1, _, _), Schema.Sequence(element2, _, _)) => equalsSchema(element1, element2) case (Schema.Enumeration(structure1), Schema.Enumeration(structure2)) => @@ -31,14 +32,21 @@ object SchemaAssertions { standardType1 == standardType2 case (Schema.Tuple(left1, right1), Schema.Tuple(left2, right2)) => equalsSchema(left1, left2) && equalsSchema(right1, right2) - case (Schema.Optional(codec1), Schema.Optional(codec2)) => equalsSchema(codec1, codec2) - case (Schema.CaseClass1(l, _, _), Schema.CaseClass1(r, _, _)) => equalsField(l, r) - case (Schema.CaseClass2(l1, l2, _, _, _), Schema.CaseClass2(r1, r2, _, _, _)) => - equalsField(l1, r1) && equalsField(l2, r2) - case (Schema.CaseClass3(l1, l2, l3, _, _, _, _), Schema.CaseClass3(r1, r2, r3, _, _, _, _)) => - equalsField(l1, r1) && equalsField(l2, r2) && equalsField(l3, r3) - case (Schema.CaseClass4(l1, l2, l3, l4, _, _, _, _, _), Schema.CaseClass4(r1, r2, r3, r4, _, _, _, _, _)) => - equalsField(l1, r1) && equalsField(l2, r2) && equalsField(l3, r3) && equalsField(l4, r4) + case (Schema.Optional(codec1), Schema.Optional(codec2)) => equalsSchema(codec1, codec2) + case (Schema.CaseClass1(al, l, _, _), Schema.CaseClass1(ar, r, _, _)) => + equalsField(l, r) && hasSameAnnotations(al, ar) + case (Schema.CaseClass2(al, l1, l2, _, _, _), Schema.CaseClass2(ar, r1, r2, _, _, _)) => + equalsField(l1, r1) && equalsField(l2, r2) && hasSameAnnotations(al, ar) + case (Schema.CaseClass3(al, l1, l2, l3, _, _, _, _), Schema.CaseClass3(ar, r1, r2, r3, _, _, _, _)) => + equalsField(l1, r1) && equalsField(l2, r2) && equalsField(l3, r3) && hasSameAnnotations(al, ar) + case ( + Schema.CaseClass4(al, l1, l2, l3, l4, _, _, _, _, _), + Schema.CaseClass4(ar, r1, r2, r3, r4, _, _, _, _, _) + ) => + equalsField(l1, r1) && equalsField(l2, r2) && equalsField(l3, r3) && equalsField(l4, r4) && hasSameAnnotations( + al, + ar + ) case (Schema.Enum1(l), Schema.Enum1(r)) => equalsCase(l, r) case (Schema.Enum2(l1, l2), Schema.Enum2(r1, r2)) => hasSameCases(Seq(l1, l2), Seq(r1, r2)) case (Schema.Enum3(l1, l2, l3), Schema.Enum3(r1, r2, r3)) => hasSameCases(Seq(l1, l2, l3), Seq(r1, r2, r3)) @@ -55,8 +63,17 @@ object SchemaAssertions { .map(r => ls.exists(l => equalsCase(l, r))) .reduce(_ && _) - private def equalsField[A](left: (String, Schema[A]), right: (String, Schema[A])): Boolean = - left._1 == right._1 && equalsSchema(left._2, right._2) + private def equalsField[A](left: Schema.Field[A], right: Schema.Field[A]): Boolean = + left.label == right.label && equalsSchema(left.schema, right.schema) && hasSameAnnotations( + left.annotations, + right.annotations + ) + + private def hasSameAnnotations(left: Seq[Any], right: Seq[Any]): Boolean = + left.map(right.contains(_)).foldRight(true)(_ && _) + + private def hasSameFields(left: Seq[Schema.Field[_]], right: Seq[Schema.Field[_]]): Boolean = + left.map(_.label) == right.map(_.label) private def hasSameKeys[K, V](map1: Map[K, V], map2: Map[K, V]): Boolean = map1.keySet.diff(map2.keySet).isEmpty diff --git a/zio-schema/shared/src/test/scala/zio/schema/SchemaGen.scala b/zio-schema/shared/src/test/scala/zio/schema/SchemaGen.scala index 65c4748df..af3bac0da 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/SchemaGen.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/SchemaGen.scala @@ -8,8 +8,27 @@ import zio.test.{ Gen, Sized } object SchemaGen { - def anyStructure[A](valueGen: Gen[Random with Sized, A]): Gen[Random with Sized, ListMap[String, A]] = - Gen.listOf(Gen.anyString.zip(valueGen)).map(seq => ListMap(seq: _*)) + def anyStructure(schemaGen: Gen[Random with Sized, Schema[_]]): Gen[Random with Sized, Seq[Schema.Field[_]]] = + Gen.listOf( + Gen.anyString.zip(schemaGen).map { + case ((label, schema)) => Schema.Field(label, schema) + } + ) + + def anyStructure[A](schema: Schema[A]): Gen[Random with Sized, Seq[Schema.Field[A]]] = + Gen.listOf( + Gen.anyString.map(Schema.Field(_, schema)) + ) + + def anyEnumeration(schemaGen: Gen[Random with Sized, Schema[_]]): Gen[Random with Sized, ListMap[String, Schema[_]]] = + Gen + .listOf( + Gen.anyString.zip(schemaGen) + ) + .map(ListMap.empty ++ _) + + def anyEnumeration[A](schema: Schema[A]): Gen[Random with Sized, ListMap[String, Schema[A]]] = + Gen.listOf(Gen.anyString.map(_ -> schema)).map(ListMap.empty ++ _) val anyPrimitive: Gen[Random, Schema.Primitive[_]] = StandardTypeGen.anyStandardType.map(Schema.Primitive(_)) @@ -110,23 +129,17 @@ object SchemaGen { } yield schema -> value val anyEnumeration: Gen[Random with Sized, Schema[ListMap[String, _]]] = - anyStructure(anySchema).map(Schema.enumeration) + anyEnumeration(anySchema).map(Schema.enumeration) type EnumerationAndGen = (Schema[ListMap[String, _]], Gen[Random with Sized, ListMap[String, _]]) val anyEnumerationAndGen: Gen[Random with Sized, EnumerationAndGen] = for { - keyToSchemaAndGen <- anyStructure(anyPrimitiveAndGen) + primitiveAndGen <- anyPrimitiveAndGen + structure <- anyEnumeration(primitiveAndGen._1) + primitiveValue <- primitiveAndGen._2 } yield { - val structure = ListMap( - keyToSchemaAndGen.toSeq.map { - case (k, (schema, _)) => k -> schema - }: _* - ) - val keyValueGenerators = keyToSchemaAndGen.map { - case (key, (_, gen)) => Gen.const(key).zip(gen) - }.toSeq - val gen = Gen.oneOf(keyValueGenerators: _*).map(ListMap(_)) + val gen = Gen.oneOf(structure.keys.map(Gen.const(_)).toSeq: _*).map(l => ListMap(l -> primitiveValue)) Schema.enumeration(structure) -> gen } @@ -141,47 +154,43 @@ object SchemaGen { val anyRecord: Gen[Random with Sized, Schema[ListMap[String, _]]] = anyStructure(anySchema).map(Schema.record) - type RecordAndGen = (Schema[ListMap[String, _]], Gen[Random with Sized, ListMap[String, _]]) + type GenericRecordAndGen = (Schema[ListMap[String, _]], Gen[Random with Sized, ListMap[String, _]]) - val anyRecordAndGen: Gen[Random with Sized, RecordAndGen] = + val anyGenericRecordAndGen: Gen[Random with Sized, GenericRecordAndGen] = for { - keyToSchemaAndGen <- anyStructure(anyPrimitiveAndGen) + (schema, gen) <- anyPrimitiveAndGen + structure <- anyStructure(schema) } yield { - val structure = ListMap( - keyToSchemaAndGen.toSeq.map { - case (s, (schema, _)) => s -> schema - }: _* - ) - val keyValueGenerators = keyToSchemaAndGen.map { - case (key, (_, gen)) => Gen.const(key).zip(gen) - }.toSeq - val gen = keyValueGenerators.foldLeft[Gen[Random with Sized, ListMap[String, _]]](Gen.const(ListMap.empty)) { - (acc, gen) => - for { - map <- acc - keyValue <- gen - } yield map + keyValue - } - Schema.record(structure) -> gen + val valueGen = Gen + .const(structure.map(_.label)) + .zip(Gen.listOfN(structure.size)(gen)) + .map { + case (labels, values) => + labels.zip(values) + } + .map(ListMap.empty ++ _) + + Schema.record(structure: _*) -> valueGen } type RecordAndValue = (Schema[ListMap[String, _]], ListMap[String, _]) val anyRecordAndValue: Gen[Random with Sized, RecordAndValue] = for { - (schema, gen) <- anyRecordAndGen + (schema, gen) <- anyGenericRecordAndGen value <- gen } yield schema -> value val anyRecordOfRecordsAndValue: Gen[Random with Sized, RecordAndValue] = for { - (schema1, gen1) <- anyRecordAndGen - (schema2, gen2) <- anyRecordAndGen - (schema3, gen3) <- anyRecordAndGen - (key1, value1) <- Gen.anyString.zip(gen1) - (key2, value2) <- Gen.anyString.zip(gen2) - (key3, value3) <- Gen.anyString.zip(gen3) - } yield Schema.record(ListMap(key1 -> schema1, key2 -> schema2, key3 -> schema3)) -> ListMap( + (schema1, gen1) <- anyGenericRecordAndGen + (schema2, gen2) <- anyGenericRecordAndGen + (schema3, gen3) <- anyGenericRecordAndGen + keys <- Gen.listOfN(3)(Gen.anyString.filter(_.length() > 0)) + (key1, value1) <- Gen.const(keys(0)).zip(gen1) + (key2, value2) <- Gen.const(keys(1)).zip(gen2) + (key3, value3) <- Gen.const(keys(2)).zip(gen3) + } yield Schema.record(Schema.Field(key1, schema1), Schema.Field(key2, schema2), Schema.Field(key3, schema3)) -> ListMap( (key1, value1), (key2, value2), (key3, value3) diff --git a/zio-schema/shared/src/test/scala/zio/schema/SchemaSpec.scala b/zio-schema/shared/src/test/scala/zio/schema/SchemaSpec.scala index 4543b0537..6b19adcb1 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/SchemaSpec.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/SchemaSpec.scala @@ -41,7 +41,7 @@ object SchemaSpec extends DefaultRunnableSpec { def schemaUnit: Schema.Primitive[Unit] = Schema.Primitive(StandardType.UnitType) def schemaInt: Schema.Primitive[Int] = Schema.Primitive(StandardType.IntType) - def schemaRecord(key: String): Schema[ListMap[String, _]] = Schema.record(ListMap(key -> schemaUnit)) + def schemaRecord(key: String): Schema[ListMap[String, _]] = Schema.record(Schema.Field(key, schemaUnit)) def schemaEnum(key: String): Schema[ListMap[String, _]] = Schema.enumeration(ListMap(key -> schemaUnit)) val f: Unit => Either[String, Int] = _ => Right(0) diff --git a/zio-schema/shared/src/test/scala/zio/schema/codec/JsonCodecSpec.scala b/zio-schema/shared/src/test/scala/zio/schema/codec/JsonCodecSpec.scala index 82951a313..39f42f15c 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/codec/JsonCodecSpec.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/codec/JsonCodecSpec.scala @@ -227,7 +227,8 @@ object JsonCodecSpec extends DefaultRunnableSpec { (left, _) <- SchemaGen.anyRecordOfRecordsAndValue (right, b) <- SchemaGen.anyRecordOfRecordsAndValue } yield (Schema.EitherSchema(left, right), Right(b))) { - case (schema, value) => assertEncodesThenDecodes(schema, value) + case (schema, value) => + assertEncodesThenDecodes(schema, value) } }, testM("mixed") { @@ -313,26 +314,26 @@ object JsonCodecSpec extends DefaultRunnableSpec { SchemaGen.anyRecordAndValue.runHead.flatMap { case Some((schema, value)) => val key = new String(Array('\u0007', '\n')) - val embedded = Schema.record(ListMap(key -> schema)) + val embedded = Schema.record(Schema.Field(key, schema)) assertEncodesThenDecodes(embedded, ListMap(key -> value)) case None => ZIO.fail("Should never happen!") } }, testM("record of records") { checkM(SchemaGen.anyRecordOfRecordsAndValue) { - case (schema, value) => assertEncodesThenDecodes(schema, value) + case (schema, value) => + assertEncodesThenDecodes(schema, value) } }, testM("of primitives") { - assertEncodesThenDecodes( - recordSchema, - ListMap[String, Any]("foo" -> "s", "bar" -> 1) - ) + checkM(SchemaGen.anyRecordAndValue) { + case (schema, value) => assertEncodesThenDecodes(schema, value) + } }, testM("of ZoneOffsets") { checkM(JavaTimeGen.anyZoneOffset) { zoneOffset => assertEncodesThenDecodes( - Schema.record(ListMap("zoneOffset" -> Schema.Primitive(StandardType.ZoneOffset))), + Schema.record(Schema.Field("zoneOffset", Schema.Primitive(StandardType.ZoneOffset))), ListMap[String, Any]("zoneOffset" -> zoneOffset) ) } @@ -459,17 +460,13 @@ object JsonCodecSpec extends DefaultRunnableSpec { val searchRequestSchema: Schema[SearchRequest] = DeriveSchema.gen[SearchRequest] val recordSchema: Schema[ListMap[String, _]] = Schema.record( - ListMap( - "foo" -> Schema.Primitive(StandardType.StringType), - "bar" -> Schema.Primitive(StandardType.IntType) - ) + Schema.Field("foo", Schema.Primitive(StandardType.StringType)), + Schema.Field("bar", Schema.Primitive(StandardType.IntType)) ) val nestedRecordSchema: Schema[ListMap[String, _]] = Schema.record( - ListMap( - "l1" -> Schema.Primitive(StandardType.StringType), - "l2" -> recordSchema - ) + Schema.Field("l1", Schema.Primitive(StandardType.StringType)), + Schema.Field("l2", recordSchema) ) val enumSchema: Schema[ListMap[String, _]] = Schema.enumeration( diff --git a/zio-schema/shared/src/test/scala/zio/schema/codec/ProtobufCodecSpec.scala b/zio-schema/shared/src/test/scala/zio/schema/codec/ProtobufCodecSpec.scala index 832c9c25b..88a6401bf 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/codec/ProtobufCodecSpec.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/codec/ProtobufCodecSpec.scala @@ -577,19 +577,15 @@ object ProtobufCodecSpec extends DefaultRunnableSpec { implicit val schemaRecord: Schema[Record] = DeriveSchema.gen[Record] val genericRecord: Schema[ListMap[String, _]] = Schema.record( - ListMap( - "c" -> Schema.Primitive(StandardType.IntType), - "b" -> Schema.Primitive(StandardType.IntType), - "a" -> Schema.Primitive(StandardType.IntType) - ) + Schema.Field("c", Schema.Primitive(StandardType.IntType)), + Schema.Field("b", Schema.Primitive(StandardType.IntType)), + Schema.Field("a", Schema.Primitive(StandardType.IntType)) ) val genericRecordSorted: Schema[ListMap[String, _]] = Schema.record( - ListMap( - "a" -> Schema.Primitive(StandardType.IntType), - "b" -> Schema.Primitive(StandardType.IntType), - "c" -> Schema.Primitive(StandardType.IntType) - ) + Schema.Field("a", Schema.Primitive(StandardType.IntType)), + Schema.Field("b", Schema.Primitive(StandardType.IntType)), + Schema.Field("c", Schema.Primitive(StandardType.IntType)) ) } From 26033ab89ecb74cdcba8d8f911e64be883cf688e Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 11:12:17 -0400 Subject: [PATCH 2/7] vscode settings --- .vscode/settings.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..32cfc61d2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.watcherExclude": { + "**/target": true + } +} \ No newline at end of file From df8020205e438cc81a59bdee098b5fc3658667d9 Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 13:18:10 -0400 Subject: [PATCH 3/7] Use zio.Chunk instead of Seq --- .../src/main/scala/zio/schema/Schema.scala | 125 ++-- .../src/main/scala/zio/schema/macros.scala | 556 +++++++++--------- .../scala/zio/schema/DeriveSchemaSpec.scala | 9 +- .../scala/zio/schema/SchemaAssertions.scala | 3 +- 4 files changed, 350 insertions(+), 343 deletions(-) diff --git a/zio-schema/shared/src/main/scala/zio/schema/Schema.scala b/zio-schema/shared/src/main/scala/zio/schema/Schema.scala index e72428465..2e6148cb1 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/Schema.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/Schema.scala @@ -145,7 +145,7 @@ object Schema { Primitive(standardType) def record(field: Field[_]*): Schema[ListMap[String, _]] = - GenericRecord(field) + GenericRecord(Chunk.fromIterable(field)) implicit def list[A](implicit schemaA: Schema[A]): Schema[List[A]] = Schema.Sequence(schemaA, _.toList, Chunk.fromIterable(_)) @@ -816,14 +816,14 @@ object Schema { } ) - final case class Field[A](label: String, schema: Schema[A], annotations: Seq[Any] = Nil) + final case class Field[A](label: String, schema: Schema[A], annotations: Chunk[Any] = Chunk.empty) sealed trait Record[R] extends Schema[R] { - def structure: Seq[Field[_]] - def annotations: Seq[Any] = Nil + def structure: Chunk[Field[_]] + def annotations: Chunk[Any] = Chunk.empty } - final case class GenericRecord(override val structure: Seq[Field[_]]) extends Record[ListMap[String, _]] + final case class GenericRecord(override val structure: Chunk[Field[_]]) extends Record[ListMap[String, _]] final case class Sequence[Col[_], A](schemaA: Schema[A], fromChunk: Chunk[A] => Col[A], toChunk: Col[A] => Chunk[A]) extends Schema[Col[A]] @@ -860,27 +860,27 @@ object Schema { final case class CaseObject[Z](instance: Z) extends Schema[Z] final case class CaseClass1[A, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field: Field[A], construct: A => Z, extractField: Z => A ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field) + override def structure: Chunk[Field[_]] = Chunk(field) } final case class CaseClass2[A1, A2, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], construct: (A1, A2) => Z, extractField1: Z => A1, extractField2: Z => A2 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2) + override def structure: Chunk[Field[_]] = Chunk(field1, field2) } final case class CaseClass3[A1, A2, A3, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -889,11 +889,11 @@ object Schema { extractField2: Z => A2, extractField3: Z => A3 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3) + override def structure: Chunk[Field[_]] = Chunk(field1, field2, field3) } final case class CaseClass4[A1, A2, A3, A4, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -904,11 +904,11 @@ object Schema { extractField3: Z => A3, extractField4: Z => A4 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4) + override def structure: Chunk[Field[_]] = Chunk(field1, field2, field3, field4) } final case class CaseClass5[A1, A2, A3, A4, A5, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -921,11 +921,11 @@ object Schema { extractField4: Z => A4, extractField5: Z => A5 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5) + override def structure: Chunk[Field[_]] = Chunk(field1, field2, field3, field4, field5) } final case class CaseClass6[A1, A2, A3, A4, A5, A6, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -940,11 +940,11 @@ object Schema { extractField5: Z => A5, extractField6: Z => A6 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6) + override def structure: Chunk[Field[_]] = Chunk(field1, field2, field3, field4, field5, field6) } final case class CaseClass7[A1, A2, A3, A4, A5, A6, A7, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -961,11 +961,11 @@ object Schema { extractField6: Z => A6, extractField7: Z => A7 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6, field7) + override def structure: Chunk[Field[_]] = Chunk(field1, field2, field3, field4, field5, field6, field7) } final case class CaseClass8[A1, A2, A3, A4, A5, A6, A7, A8, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -984,11 +984,11 @@ object Schema { extractField7: Z => A7, extractField8: Z => A8 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6, field7, field8) + override def structure: Chunk[Field[_]] = Chunk(field1, field2, field3, field4, field5, field6, field7, field8) } final case class CaseClass9[A1, A2, A3, A4, A5, A6, A7, A8, A9, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1009,11 +1009,12 @@ object Schema { extractField8: Z => A8, extractField9: Z => A9 ) extends Record[Z] { - override def structure: Seq[Field[_]] = Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9) + override def structure: Chunk[Field[_]] = + Chunk(field1, field2, field3, field4, field5, field6, field7, field8, field9) } final case class CaseClass10[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1036,12 +1037,12 @@ object Schema { extractField9: Z => A9, extractField10: Z => A10 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10) + override def structure: Chunk[Field[_]] = + Chunk(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10) } final case class CaseClass11[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1066,12 +1067,12 @@ object Schema { extractField10: Z => A10, extractField11: Z => A11 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11) + override def structure: Chunk[Field[_]] = + Chunk(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11) } final case class CaseClass12[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1098,12 +1099,12 @@ object Schema { extractField11: Z => A11, extractField12: Z => A12 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12) + override def structure: Chunk[Field[_]] = + Chunk(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12) } final case class CaseClass13[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1132,12 +1133,12 @@ object Schema { extractField12: Z => A12, extractField13: Z => A13 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13) + override def structure: Chunk[Field[_]] = + Chunk(field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13) } final case class CaseClass14[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1168,8 +1169,8 @@ object Schema { extractField13: Z => A13, extractField14: Z => A14 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1188,7 +1189,7 @@ object Schema { } final case class CaseClass15[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1221,8 +1222,8 @@ object Schema { extractField14: Z => A14, extractField15: Z => A15 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1242,7 +1243,7 @@ object Schema { } final case class CaseClass16[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1277,8 +1278,8 @@ object Schema { extractField15: Z => A15, extractField16: Z => A16 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1299,7 +1300,7 @@ object Schema { } final case class CaseClass17[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1336,8 +1337,8 @@ object Schema { extractField16: Z => A16, extractField17: Z => A17 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1359,7 +1360,7 @@ object Schema { } final case class CaseClass18[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1398,8 +1399,8 @@ object Schema { extractField17: Z => A17, extractField18: Z => A18 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1422,7 +1423,7 @@ object Schema { } final case class CaseClass19[A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, Z]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1463,8 +1464,8 @@ object Schema { extractField18: Z => A18, extractField19: Z => A19 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1510,7 +1511,7 @@ object Schema { A20, Z ]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1553,8 +1554,8 @@ object Schema { extractField19: Z => A19, extractField20: Z => A20 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1602,7 +1603,7 @@ object Schema { A21, Z ]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1647,8 +1648,8 @@ object Schema { extractField20: Z => A20, extractField21: Z => A21 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, @@ -1698,7 +1699,7 @@ object Schema { A22, Z ]( - override val annotations: Seq[Any] = Nil, + override val annotations: Chunk[Any] = Chunk.empty, field1: Field[A1], field2: Field[A2], field3: Field[A3], @@ -1768,8 +1769,8 @@ object Schema { extractField21: Z => A21, extractField22: Z => A22 ) extends Record[Z] { - override def structure: Seq[Field[_]] = - Seq( + override def structure: Chunk[Field[_]] = + Chunk( field1, field2, field3, diff --git a/zio-schema/shared/src/main/scala/zio/schema/macros.scala b/zio-schema/shared/src/main/scala/zio/schema/macros.scala index 531ccf622..dc96640f1 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/macros.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/macros.scala @@ -5,6 +5,8 @@ import scala.language.experimental.macros import magnolia._ +import zio.Chunk + object DeriveSchema { type Typeclass[A] = Schema[A] @@ -37,7 +39,9 @@ object DeriveSchema { case _ => Schema .GenericRecord( - ctx.parameters.map(p => Schema.Field(p.label, p.typeclass, p.annotations)) + Chunk.fromIterable( + ctx.parameters.map(p => Schema.Field(p.label, p.typeclass, Chunk.fromIterable(p.annotations))) + ) ) .transformOrFail( { map => @@ -60,8 +64,8 @@ object DeriveSchema { private def caseClass1[Z](ctx: CaseClass[Typeclass, Z]): Typeclass[Z] = { val param = ctx.parameters.head new Schema.CaseClass1[param.PType, Z]( - annotations = ctx.annotations, - field = Schema.Field(param.label, param.typeclass, param.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field = Schema.Field(param.label, param.typeclass, Chunk.fromIterable(param.annotations)), construct = (p: param.PType) => ctx.construct(_ => p), extractField = (z: Z) => param.dereference(z) ) @@ -71,9 +75,9 @@ object DeriveSchema { val param1 = ctx.parameters.head val param2 = ctx.parameters(1) new Schema.CaseClass2[param1.PType, param2.PType, Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), construct = (p1: param1.PType, p2: param2.PType) => ctx.rawConstruct(Seq(p1, p2)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z) @@ -85,10 +89,10 @@ object DeriveSchema { val param2 = ctx.parameters(1) val param3 = ctx.parameters(2) new Schema.CaseClass3[param1.PType, param2.PType, param3.PType, Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType) => ctx.rawConstruct(Seq(p1, p2, p3)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -102,11 +106,11 @@ object DeriveSchema { val param3 = ctx.parameters(2) val param4 = ctx.parameters(3) new Schema.CaseClass4[param1.PType, param2.PType, param3.PType, param4.PType, Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType) => ctx.rawConstruct(Seq(p1, p2, p3, p4)), extractField1 = (z: Z) => param1.dereference(z), @@ -123,12 +127,12 @@ object DeriveSchema { val param4 = ctx.parameters(3) val param5 = ctx.parameters(4) new Schema.CaseClass5[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType) => ctx.rawConstruct(Seq(p1, p2, p3, p4, p5)), extractField1 = (z: Z) => param1.dereference(z), @@ -147,13 +151,13 @@ object DeriveSchema { val param5 = ctx.parameters(4) val param6 = ctx.parameters(5) new Schema.CaseClass6[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType, Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType, p6: param6.PType) => ctx.rawConstruct(Seq(p1, p2, p3, p4, p5, p6)), @@ -184,14 +188,14 @@ object DeriveSchema { param7.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -231,15 +235,15 @@ object DeriveSchema { param8.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -283,16 +287,16 @@ object DeriveSchema { param9.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -340,17 +344,17 @@ object DeriveSchema { param10.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -402,18 +406,18 @@ object DeriveSchema { param11.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -469,19 +473,19 @@ object DeriveSchema { param12.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -541,20 +545,20 @@ object DeriveSchema { param13.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), - field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label, param13.typeclass, Chunk.fromIterable(param13.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -618,21 +622,21 @@ object DeriveSchema { param14.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), - field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), - field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label, param13.typeclass, Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label, param14.typeclass, Chunk.fromIterable(param14.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -700,22 +704,22 @@ object DeriveSchema { param15.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), - field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), - field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), - field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label, param13.typeclass, Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label, param14.typeclass, Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label, param15.typeclass, Chunk.fromIterable(param15.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -787,23 +791,23 @@ object DeriveSchema { param16.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), - field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), - field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), - field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), - field16 = Schema.Field(param16.label, param16.typeclass, param16.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label, param13.typeclass, Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label, param14.typeclass, Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label, param15.typeclass, Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label, param16.typeclass, Chunk.fromIterable(param16.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -879,24 +883,24 @@ object DeriveSchema { param17.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), - field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), - field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), - field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), - field16 = Schema.Field(param16.label, param16.typeclass, param16.annotations), - field17 = Schema.Field(param17.label, param17.typeclass, param17.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label, param13.typeclass, Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label, param14.typeclass, Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label, param15.typeclass, Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label, param16.typeclass, Chunk.fromIterable(param16.annotations)), + field17 = Schema.Field(param17.label, param17.typeclass, Chunk.fromIterable(param17.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -976,25 +980,25 @@ object DeriveSchema { param18.PType, Z ]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label, param1.typeclass, param1.annotations), - field2 = Schema.Field(param2.label, param2.typeclass, param2.annotations), - field3 = Schema.Field(param3.label, param3.typeclass, param3.annotations), - field4 = Schema.Field(param4.label, param4.typeclass, param4.annotations), - field5 = Schema.Field(param5.label, param5.typeclass, param5.annotations), - field6 = Schema.Field(param6.label, param6.typeclass, param6.annotations), - field7 = Schema.Field(param7.label, param7.typeclass, param7.annotations), - field8 = Schema.Field(param8.label, param8.typeclass, param8.annotations), - field9 = Schema.Field(param9.label, param9.typeclass, param9.annotations), - field10 = Schema.Field(param10.label, param10.typeclass, param10.annotations), - field11 = Schema.Field(param11.label, param11.typeclass, param11.annotations), - field12 = Schema.Field(param12.label, param12.typeclass, param12.annotations), - field13 = Schema.Field(param13.label, param13.typeclass, param13.annotations), - field14 = Schema.Field(param14.label, param14.typeclass, param14.annotations), - field15 = Schema.Field(param15.label, param15.typeclass, param15.annotations), - field16 = Schema.Field(param16.label, param16.typeclass, param16.annotations), - field17 = Schema.Field(param17.label, param17.typeclass, param17.annotations), - field18 = Schema.Field(param18.label, param18.typeclass, param18.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label, param1.typeclass, Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label, param2.typeclass, Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label, param3.typeclass, Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label, param4.typeclass, Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label, param5.typeclass, Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label, param6.typeclass, Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label, param7.typeclass, Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label, param8.typeclass, Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label, param9.typeclass, Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label, param10.typeclass, Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label, param11.typeclass, Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label, param12.typeclass, Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label, param13.typeclass, Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label, param14.typeclass, Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label, param15.typeclass, Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label, param16.typeclass, Chunk.fromIterable(param16.annotations)), + field17 = Schema.Field(param17.label, param17.typeclass, Chunk.fromIterable(param17.annotations)), + field18 = Schema.Field(param18.label, param18.typeclass, Chunk.fromIterable(param18.annotations)), construct = ( p1: param1.PType, p2: param2.PType, @@ -1058,26 +1062,26 @@ object DeriveSchema { val param18 = ctx.parameters(17) val param19 = ctx.parameters(18) new Schema.CaseClass19[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), - field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), - field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), - field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), - field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), - field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), - field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), - field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), - field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), - field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), - field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), - field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), - field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), - field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), - field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), - field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), - field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), - field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), - field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label,param1.typeclass,Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label,param2.typeclass,Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label,param3.typeclass,Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label,param4.typeclass,Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label,param5.typeclass,Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label,param6.typeclass,Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label,param7.typeclass,Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label,param8.typeclass,Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label,param9.typeclass,Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label,param10.typeclass,Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label,param11.typeclass,Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label,param12.typeclass,Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label,param13.typeclass,Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label,param14.typeclass,Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label,param15.typeclass,Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label,param16.typeclass,Chunk.fromIterable(param16.annotations)), + field17 = Schema.Field(param17.label,param17.typeclass,Chunk.fromIterable(param17.annotations)), + field18 = Schema.Field(param18.label,param18.typeclass,Chunk.fromIterable(param18.annotations)), + field19 = Schema.Field(param19.label,param19.typeclass,Chunk.fromIterable(param19.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -1123,27 +1127,27 @@ object DeriveSchema { val param19 = ctx.parameters(18) val param20 = ctx.parameters(19) new Schema.CaseClass20[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,param20.PType,Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), - field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), - field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), - field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), - field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), - field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), - field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), - field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), - field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), - field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), - field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), - field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), - field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), - field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), - field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), - field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), - field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), - field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), - field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), - field20 = Schema.Field(param20.label,param20.typeclass,param20.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label,param1.typeclass,Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label,param2.typeclass,Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label,param3.typeclass,Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label,param4.typeclass,Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label,param5.typeclass,Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label,param6.typeclass,Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label,param7.typeclass,Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label,param8.typeclass,Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label,param9.typeclass,Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label,param10.typeclass,Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label,param11.typeclass,Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label,param12.typeclass,Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label,param13.typeclass,Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label,param14.typeclass,Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label,param15.typeclass,Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label,param16.typeclass,Chunk.fromIterable(param16.annotations)), + field17 = Schema.Field(param17.label,param17.typeclass,Chunk.fromIterable(param17.annotations)), + field18 = Schema.Field(param18.label,param18.typeclass,Chunk.fromIterable(param18.annotations)), + field19 = Schema.Field(param19.label,param19.typeclass,Chunk.fromIterable(param19.annotations)), + field20 = Schema.Field(param20.label,param20.typeclass,Chunk.fromIterable(param20.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType,p20: param20.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -1191,28 +1195,28 @@ object DeriveSchema { val param20 = ctx.parameters(19) val param21 = ctx.parameters(20) new Schema.CaseClass21[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,param20.PType,param21.PType,Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), - field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), - field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), - field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), - field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), - field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), - field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), - field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), - field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), - field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), - field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), - field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), - field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), - field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), - field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), - field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), - field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), - field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), - field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), - field20 = Schema.Field(param20.label,param20.typeclass,param20.annotations), - field21 = Schema.Field(param21.label,param21.typeclass,param21.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label,param1.typeclass,Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label,param2.typeclass,Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label,param3.typeclass,Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label,param4.typeclass,Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label,param5.typeclass,Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label,param6.typeclass,Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label,param7.typeclass,Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label,param8.typeclass,Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label,param9.typeclass,Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label,param10.typeclass,Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label,param11.typeclass,Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label,param12.typeclass,Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label,param13.typeclass,Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label,param14.typeclass,Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label,param15.typeclass,Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label,param16.typeclass,Chunk.fromIterable(param16.annotations)), + field17 = Schema.Field(param17.label,param17.typeclass,Chunk.fromIterable(param17.annotations)), + field18 = Schema.Field(param18.label,param18.typeclass,Chunk.fromIterable(param18.annotations)), + field19 = Schema.Field(param19.label,param19.typeclass,Chunk.fromIterable(param19.annotations)), + field20 = Schema.Field(param20.label,param20.typeclass,Chunk.fromIterable(param20.annotations)), + field21 = Schema.Field(param21.label,param21.typeclass,Chunk.fromIterable(param21.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType,p20: param20.PType,p21: param21.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), @@ -1262,29 +1266,29 @@ object DeriveSchema { val param21 = ctx.parameters(20) val param22 = ctx.parameters(21) new Schema.CaseClass22[param1.PType, param2.PType, param3.PType, param4.PType, param5.PType, param6.PType,param7.PType,param8.PType,param9.PType,param10.PType,param11.PType,param12.PType,param13.PType,param14.PType,param15.PType,param16.PType,param17.PType,param18.PType,param19.PType,param20.PType,param21.PType,param22.PType,Z]( - annotations = ctx.annotations, - field1 = Schema.Field(param1.label,param1.typeclass,param1.annotations), - field2 = Schema.Field(param2.label,param2.typeclass,param2.annotations), - field3 = Schema.Field(param3.label,param3.typeclass,param3.annotations), - field4 = Schema.Field(param4.label,param4.typeclass,param4.annotations), - field5 = Schema.Field(param5.label,param5.typeclass,param5.annotations), - field6 = Schema.Field(param6.label,param6.typeclass,param6.annotations), - field7 = Schema.Field(param7.label,param7.typeclass,param7.annotations), - field8 = Schema.Field(param8.label,param8.typeclass,param8.annotations), - field9 = Schema.Field(param9.label,param9.typeclass,param9.annotations), - field10 = Schema.Field(param10.label,param10.typeclass,param10.annotations), - field11 = Schema.Field(param11.label,param11.typeclass,param11.annotations), - field12 = Schema.Field(param12.label,param12.typeclass,param12.annotations), - field13 = Schema.Field(param13.label,param13.typeclass,param13.annotations), - field14 = Schema.Field(param14.label,param14.typeclass,param14.annotations), - field15 = Schema.Field(param15.label,param15.typeclass,param15.annotations), - field16 = Schema.Field(param16.label,param16.typeclass,param16.annotations), - field17 = Schema.Field(param17.label,param17.typeclass,param17.annotations), - field18 = Schema.Field(param18.label,param18.typeclass,param18.annotations), - field19 = Schema.Field(param19.label,param19.typeclass,param19.annotations), - field20 = Schema.Field(param20.label,param20.typeclass,param20.annotations), - field21 = Schema.Field(param21.label,param21.typeclass,param21.annotations), - field22 = Schema.Field(param22.label,param22.typeclass,param22.annotations), + annotations = Chunk.fromIterable(ctx.annotations), + field1 = Schema.Field(param1.label,param1.typeclass,Chunk.fromIterable(param1.annotations)), + field2 = Schema.Field(param2.label,param2.typeclass,Chunk.fromIterable(param2.annotations)), + field3 = Schema.Field(param3.label,param3.typeclass,Chunk.fromIterable(param3.annotations)), + field4 = Schema.Field(param4.label,param4.typeclass,Chunk.fromIterable(param4.annotations)), + field5 = Schema.Field(param5.label,param5.typeclass,Chunk.fromIterable(param5.annotations)), + field6 = Schema.Field(param6.label,param6.typeclass,Chunk.fromIterable(param6.annotations)), + field7 = Schema.Field(param7.label,param7.typeclass,Chunk.fromIterable(param7.annotations)), + field8 = Schema.Field(param8.label,param8.typeclass,Chunk.fromIterable(param8.annotations)), + field9 = Schema.Field(param9.label,param9.typeclass,Chunk.fromIterable(param9.annotations)), + field10 = Schema.Field(param10.label,param10.typeclass,Chunk.fromIterable(param10.annotations)), + field11 = Schema.Field(param11.label,param11.typeclass,Chunk.fromIterable(param11.annotations)), + field12 = Schema.Field(param12.label,param12.typeclass,Chunk.fromIterable(param12.annotations)), + field13 = Schema.Field(param13.label,param13.typeclass,Chunk.fromIterable(param13.annotations)), + field14 = Schema.Field(param14.label,param14.typeclass,Chunk.fromIterable(param14.annotations)), + field15 = Schema.Field(param15.label,param15.typeclass,Chunk.fromIterable(param15.annotations)), + field16 = Schema.Field(param16.label,param16.typeclass,Chunk.fromIterable(param16.annotations)), + field17 = Schema.Field(param17.label,param17.typeclass,Chunk.fromIterable(param17.annotations)), + field18 = Schema.Field(param18.label,param18.typeclass,Chunk.fromIterable(param18.annotations)), + field19 = Schema.Field(param19.label,param19.typeclass,Chunk.fromIterable(param19.annotations)), + field20 = Schema.Field(param20.label,param20.typeclass,Chunk.fromIterable(param20.annotations)), + field21 = Schema.Field(param21.label,param21.typeclass,Chunk.fromIterable(param21.annotations)), + field22 = Schema.Field(param22.label,param22.typeclass,Chunk.fromIterable(param22.annotations)), construct = (p1: param1.PType, p2: param2.PType, p3: param3.PType, p4: param4.PType, p5: param5.PType,p6: param6.PType,p7: param7.PType,p8: param8.PType,p9: param9.PType,p10: param10.PType,p11: param11.PType,p12: param12.PType,p13: param13.PType,p14: param14.PType,p15: param15.PType,p16: param16.PType,p17: param17.PType,p18: param18.PType,p19: param19.PType,p20: param20.PType,p21: param21.PType,p22: param22.PType) => ctx.rawConstruct(Seq(p1, p2, p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22)), extractField1 = (z: Z) => param1.dereference(z), extractField2 = (z: Z) => param2.dereference(z), diff --git a/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala b/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala index 30045a40c..c6758bfe5 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/DeriveSchemaSpec.scala @@ -2,6 +2,7 @@ package zio.schema import scala.annotation.Annotation +import zio.Chunk import zio.schema.SchemaAssertions.hasSameSchema import zio.test._ @@ -32,7 +33,7 @@ object DeriveSchemaSpec extends DefaultRunnableSpec { val derived: Schema[UserId] = DeriveSchema.gen val expected: Schema[UserId] = Schema.CaseClass1( - annotations = Nil, + annotations = Chunk.empty, field = Schema.Field("id", Schema.Primitive(StandardType.StringType)), UserId.apply, (uid: UserId) => uid.id @@ -50,17 +51,17 @@ object DeriveSchemaSpec extends DefaultRunnableSpec { val derived: Schema[User] = DeriveSchema.gen val expected: Schema[User] = Schema.CaseClass2( - annotations = Nil, + annotations = Chunk.empty, field1 = Schema.Field("name", Schema.Primitive(StandardType.StringType)), field2 = Schema.Field( "id", Schema.CaseClass1( - annotations = Nil, + annotations = Chunk.empty, field = Schema.Field("id", Schema.Primitive(StandardType.StringType)), UserId.apply, (uid: UserId) => uid.id ), - Seq(annotation1("foo"), annotation2("bar")) + Chunk(annotation1("foo"), annotation2("bar")) ), User.apply, (u: User) => u.name, diff --git a/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala b/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala index 2746a2212..27f82d2c7 100644 --- a/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala +++ b/zio-schema/shared/src/test/scala/zio/schema/SchemaAssertions.scala @@ -1,5 +1,6 @@ package zio.schema +import zio.Chunk import zio.test.Assertion import zio.test.AssertionM.Render.param @@ -69,7 +70,7 @@ object SchemaAssertions { right.annotations ) - private def hasSameAnnotations(left: Seq[Any], right: Seq[Any]): Boolean = + private def hasSameAnnotations(left: Chunk[Any], right: Chunk[Any]): Boolean = left.map(right.contains(_)).foldRight(true)(_ && _) private def hasSameFields(left: Seq[Schema.Field[_]], right: Seq[Schema.Field[_]]): Boolean = From f4e6d5b856c4dfc7c8c3eb1430304ae2e0831d78 Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 13:33:29 -0400 Subject: [PATCH 4/7] Add embeded metals.sbt to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index e99ab015f..390d7887a 100644 --- a/.gitignore +++ b/.gitignore @@ -407,6 +407,7 @@ project/plugins/project/ .metals/ project/metals.sbt +**/metals.sbt .bloop/ .bsp/ project/secret From 55d3419a4e6bce98d25109f8d781646ec04df468 Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 13:34:18 -0400 Subject: [PATCH 5/7] Remove embedded metals.sbt --- project/project/metals.sbt | 4 ---- project/project/project/metals.sbt | 4 ---- 2 files changed, 8 deletions(-) delete mode 100644 project/project/metals.sbt delete mode 100644 project/project/project/metals.sbt diff --git a/project/project/metals.sbt b/project/project/metals.sbt deleted file mode 100644 index 1d4c14ce8..000000000 --- a/project/project/metals.sbt +++ /dev/null @@ -1,4 +0,0 @@ -// DO NOT EDIT! This file is auto-generated. -// This file enables sbt-bloop to create bloop config files. - -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.8-19-4d9f966b") diff --git a/project/project/project/metals.sbt b/project/project/project/metals.sbt deleted file mode 100644 index 1d4c14ce8..000000000 --- a/project/project/project/metals.sbt +++ /dev/null @@ -1,4 +0,0 @@ -// DO NOT EDIT! This file is auto-generated. -// This file enables sbt-bloop to create bloop config files. - -addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.4.8-19-4d9f966b") From a7cd2efb513d8fac5a13e524755b40cb57866762 Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 14:25:52 -0400 Subject: [PATCH 6/7] formatting --- zio-schema/shared/src/main/scala/zio/schema/macros.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zio-schema/shared/src/main/scala/zio/schema/macros.scala b/zio-schema/shared/src/main/scala/zio/schema/macros.scala index dc96640f1..604c0f8fa 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/macros.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/macros.scala @@ -63,7 +63,7 @@ object DeriveSchema { private def caseClass1[Z](ctx: CaseClass[Typeclass, Z]): Typeclass[Z] = { val param = ctx.parameters.head - new Schema.CaseClass1[param.PType, Z]( + new Schema.CaseClass1[param.PType, Z]( annotations = Chunk.fromIterable(ctx.annotations), field = Schema.Field(param.label, param.typeclass, Chunk.fromIterable(param.annotations)), construct = (p: param.PType) => ctx.construct(_ => p), From 2397cda70c444cdabcf878884213881d69b9c89f Mon Sep 17 00:00:00 2001 From: Dan Harris Date: Mon, 17 May 2021 14:29:22 -0400 Subject: [PATCH 7/7] reformatting --- zio-schema/shared/src/main/scala/zio/schema/macros.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zio-schema/shared/src/main/scala/zio/schema/macros.scala b/zio-schema/shared/src/main/scala/zio/schema/macros.scala index 604c0f8fa..dc96640f1 100644 --- a/zio-schema/shared/src/main/scala/zio/schema/macros.scala +++ b/zio-schema/shared/src/main/scala/zio/schema/macros.scala @@ -63,7 +63,7 @@ object DeriveSchema { private def caseClass1[Z](ctx: CaseClass[Typeclass, Z]): Typeclass[Z] = { val param = ctx.parameters.head - new Schema.CaseClass1[param.PType, Z]( + new Schema.CaseClass1[param.PType, Z]( annotations = Chunk.fromIterable(ctx.annotations), field = Schema.Field(param.label, param.typeclass, Chunk.fromIterable(param.annotations)), construct = (p: param.PType) => ctx.construct(_ => p),