-
Notifications
You must be signed in to change notification settings - Fork 161
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for annotations on all types #147
Support for annotations on all types #147
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks good in general. I don't think there is any specific use case from the library side for these annotations, we just want to allow users to capture arbitrary annotations for their own purposes.
Two small changes I would make though:
- Wherever we accept an annotations chunk in the constructor/method we should default it to
Chunk.empty
since in the modal case I think users will not use this and we shouldn't add the additional boilerplate. - Add an
def annotate(annotation: Any): Schema[A]
method to theSchema[A]
trait to make it easier to add ad-hoc annotations to derived Schemas.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your work on this! A couple of small suggestions but I think once we get the build green this should be good to go.
…dy) and add annotations field to Schema.GenericRecord
5b2b68c
to
95c6d10
Compare
@dmitrykozinets @DamianReeves I'm happy with this implementation. Do you guys want to review it before merging? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your work on this!
Looks good to me! Thank you @alexvanolst ! |
* added basic documentation with example * added more dependencies to docs * incorporated feedback by @thinkharderdev * fixed wording 'ZIO-Schema' -> 'ZIO Schema' * fixed naming of other zio libraries * fix sbt publish setting * added examples subproject * docs: fixed mdoc link and added version placeholder in overview/index.md * docs: incorporated suggestions by @TobiasPfeifer * scalafmt for build.sbt * incorporated suggestions by @thinkharderdev * Support for annotations on all types (#147) * Add addonation to Schema[A] interface and add as field in Schema.Sequence * Add annotation field to Schema.Transform * Add annotation field to Schema.Primitive * Add annotations field to Schema.Optional * Add annotations field to Schema.Fail * Add annotations field to Schema.Tuple * Add annotations field to EitherSchema * Add annotations field to Schema.Lazy * Add annotations field to Schema.Meta * Add remaining assertion equality checks to equalsSchema * Remove annotations from Record[A] (since it exists in Schema[A] already) and add annotations field to Schema.GenericRecord * Fix test case for schema generation on annotated ADT * Fix handling of annotations for Lazy (and thus failing tests) * Wherever we accept an annotations chunk in the constructor/method we default it to Chunk.empty * Add `def annotate(annotation: Any): Schema[A]` to Schema * Replace usage of Chunk.appended with :+ to fix 2.12.12 compilation * Provide direct support for Map (#142) * Provide direct support for Map Unit tests for json serdes Unit tests for protobuf serdes * run scalafmt * Rebased/reformatted * Rebased/reformatted, and added a minimum contribution guide * Run sbt `prepare test` instead of `fmt test` * Add defaultValue to Schema (#80) * feat(schema): add first draft defaultValue implementation for Schema * feat(schema): add missing test cases * feat(schema): change default value for BoolType to false * feat(schema): fold default values in Record type appropriately * fix(zio-schema): fix failing test * feat(zio-schema): add defaultValue implementation for MapSchema * patch(zio-schema): remove orElse for Scala 2.12 compat * first commit * [zio-schema-examples] sbt setup * [zio-schema-examples] readme init * [zio-schema-examples] example 1 * [zio-schema-examples] example 2 * [zio-schema-examples] example 3 (WIP) * [zio-schema-examples] example 3 * [zio-schema-examples] Example3: Don't share domain with other samples * [zio-schema-examples] Example4 transforming DTOs * [zio-schema-examples] Example5 diffing * [zio-schema-examples] example 4: fixed map/flatmap in example * [zio-schema-examples] example 4: another try to converting DTOs * [zio-schema-examples] example 6 reified optics stub * [zio-schema-examples] example 6 reified optics examples * [zio-schema-examples] example 1 + 2: schema fixes for newest zio-schema * [zio-schema-examples] Problem 7: Initial code * [zio-schema-examples] Example 6: adding employee now works * [zio-schema-examples] Example 7: added notes on performance requirements * [zio-schema-examples] Example 7: added parameter list to methods, fixed names * [zio-schema-examples] Example 7: added Person and Profile schema as implicits * [zio-schema-examples] Example 7: renamed method for viewing, added Runner * [zio-schema-examples] Example 7: sketched toDynamicValue method * [zio-schema-examples] Example 7: implemented toDynamicValue method * [zio-schema-examples] Example 7: primitive impl of decode using toDV * [zio-schema-examples] Example 7: produce multiple solutions, pick working one * [zio-schema-examples] Example 7: introduce QueryParam type alias and compile-function * [zio-schema-examples] Example 7: return static function on error case * [zio-schema-examples] Example 7: initial impl of Primitive(standardtype) * [zio-schema-examples] Example 7: implemented fail * [zio-schema-examples] Example 7: simple impl of lazy * [zio-schema-examples] Example 7: better lazy impl with `lazy val` * [zio-schema-examples] Example 7: impl of Meta * [zio-schema-examples] Example 7: impl of CaseClass1 * [zio-schema-examples] Example 7: impl of CaseClass2 * [zio-schema-examples] Example 7: impl of CaseClass3 * [zio-schema-examples] Example 7: extracted compiler to builder * [zio-schema-examples] Example 7: implemented Transform * [zio-schema-examples] * Example for an Encoder and Decoder using the DynamicValue API * Add scalafmt * Update zio-schema 0.1.2 * Update examples to account for annotations * revert local changes * moved sources to appropriate place * fixed example * [zio-schema-examples] reverted changes to build.sbt * [zio-schema-examples] removed additional build.sbt, fixed problems in example7, added explicit import in build.sbt * [zio-schema-examples] scalaFmt applied * Fix build for scala 2.12 and apply linter * Fix compilation errors for scala 2.12 * Unused imports Co-authored-by: Dominik Dorn <dominik@dominikdorn.com> Co-authored-by: Alexander van Olst <alexvanolst@gmail.com> Co-authored-by: Pierangelo Cecchetto <pierangeloc@gmail.com> Co-authored-by: Maxwell Brown <maxwellbrown1990@gmail.com> Co-authored-by: calvinlfer <calvin.l.fer@gmail.com>
* Add addonation to Schema[A] interface and add as field in Schema.Sequence * Add annotation field to Schema.Transform * Add annotation field to Schema.Primitive * Add annotations field to Schema.Optional * Add annotations field to Schema.Fail * Add annotations field to Schema.Tuple * Add annotations field to EitherSchema * Add annotations field to Schema.Lazy * Add annotations field to Schema.Meta * Add remaining assertion equality checks to equalsSchema * Remove annotations from Record[A] (since it exists in Schema[A] already) and add annotations field to Schema.GenericRecord * Fix test case for schema generation on annotated ADT * Fix handling of annotations for Lazy (and thus failing tests) * Wherever we accept an annotations chunk in the constructor/method we default it to Chunk.empty * Add `def annotate(annotation: Any): Schema[A]` to Schema * Replace usage of Chunk.appended with :+ to fix 2.12.12 compilation
* added basic documentation with example * added more dependencies to docs * incorporated feedback by @thinkharderdev * fixed wording 'ZIO-Schema' -> 'ZIO Schema' * fixed naming of other zio libraries * fix sbt publish setting * added examples subproject * docs: fixed mdoc link and added version placeholder in overview/index.md * docs: incorporated suggestions by @TobiasPfeifer * scalafmt for build.sbt * incorporated suggestions by @thinkharderdev * Support for annotations on all types (zio#147) * Add addonation to Schema[A] interface and add as field in Schema.Sequence * Add annotation field to Schema.Transform * Add annotation field to Schema.Primitive * Add annotations field to Schema.Optional * Add annotations field to Schema.Fail * Add annotations field to Schema.Tuple * Add annotations field to EitherSchema * Add annotations field to Schema.Lazy * Add annotations field to Schema.Meta * Add remaining assertion equality checks to equalsSchema * Remove annotations from Record[A] (since it exists in Schema[A] already) and add annotations field to Schema.GenericRecord * Fix test case for schema generation on annotated ADT * Fix handling of annotations for Lazy (and thus failing tests) * Wherever we accept an annotations chunk in the constructor/method we default it to Chunk.empty * Add `def annotate(annotation: Any): Schema[A]` to Schema * Replace usage of Chunk.appended with :+ to fix 2.12.12 compilation * Provide direct support for Map (zio#142) * Provide direct support for Map Unit tests for json serdes Unit tests for protobuf serdes * run scalafmt * Rebased/reformatted * Rebased/reformatted, and added a minimum contribution guide * Run sbt `prepare test` instead of `fmt test` * Add defaultValue to Schema (zio#80) * feat(schema): add first draft defaultValue implementation for Schema * feat(schema): add missing test cases * feat(schema): change default value for BoolType to false * feat(schema): fold default values in Record type appropriately * fix(zio-schema): fix failing test * feat(zio-schema): add defaultValue implementation for MapSchema * patch(zio-schema): remove orElse for Scala 2.12 compat * first commit * [zio-schema-examples] sbt setup * [zio-schema-examples] readme init * [zio-schema-examples] example 1 * [zio-schema-examples] example 2 * [zio-schema-examples] example 3 (WIP) * [zio-schema-examples] example 3 * [zio-schema-examples] Example3: Don't share domain with other samples * [zio-schema-examples] Example4 transforming DTOs * [zio-schema-examples] Example5 diffing * [zio-schema-examples] example 4: fixed map/flatmap in example * [zio-schema-examples] example 4: another try to converting DTOs * [zio-schema-examples] example 6 reified optics stub * [zio-schema-examples] example 6 reified optics examples * [zio-schema-examples] example 1 + 2: schema fixes for newest zio-schema * [zio-schema-examples] Problem 7: Initial code * [zio-schema-examples] Example 6: adding employee now works * [zio-schema-examples] Example 7: added notes on performance requirements * [zio-schema-examples] Example 7: added parameter list to methods, fixed names * [zio-schema-examples] Example 7: added Person and Profile schema as implicits * [zio-schema-examples] Example 7: renamed method for viewing, added Runner * [zio-schema-examples] Example 7: sketched toDynamicValue method * [zio-schema-examples] Example 7: implemented toDynamicValue method * [zio-schema-examples] Example 7: primitive impl of decode using toDV * [zio-schema-examples] Example 7: produce multiple solutions, pick working one * [zio-schema-examples] Example 7: introduce QueryParam type alias and compile-function * [zio-schema-examples] Example 7: return static function on error case * [zio-schema-examples] Example 7: initial impl of Primitive(standardtype) * [zio-schema-examples] Example 7: implemented fail * [zio-schema-examples] Example 7: simple impl of lazy * [zio-schema-examples] Example 7: better lazy impl with `lazy val` * [zio-schema-examples] Example 7: impl of Meta * [zio-schema-examples] Example 7: impl of CaseClass1 * [zio-schema-examples] Example 7: impl of CaseClass2 * [zio-schema-examples] Example 7: impl of CaseClass3 * [zio-schema-examples] Example 7: extracted compiler to builder * [zio-schema-examples] Example 7: implemented Transform * [zio-schema-examples] * Example for an Encoder and Decoder using the DynamicValue API * Add scalafmt * Update zio-schema 0.1.2 * Update examples to account for annotations * revert local changes * moved sources to appropriate place * fixed example * [zio-schema-examples] reverted changes to build.sbt * [zio-schema-examples] removed additional build.sbt, fixed problems in example7, added explicit import in build.sbt * [zio-schema-examples] scalaFmt applied * Fix build for scala 2.12 and apply linter * Fix compilation errors for scala 2.12 * Unused imports Co-authored-by: Dominik Dorn <dominik@dominikdorn.com> Co-authored-by: Alexander van Olst <alexvanolst@gmail.com> Co-authored-by: Pierangelo Cecchetto <pierangeloc@gmail.com> Co-authored-by: Maxwell Brown <maxwellbrown1990@gmail.com> Co-authored-by: calvinlfer <calvin.l.fer@gmail.com>
#125
Adds
def annotations: Chunk[Any]
toSchema[A]
implemented as a field on concrete Schema