Skip to content
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

Merged
merged 16 commits into from
Nov 8, 2021

Conversation

alexvanolst
Copy link
Contributor

#125

Adds def annotations: Chunk[Any] to Schema[A] implemented as a field on concrete Schema

Copy link
Contributor

@thinkharderdev thinkharderdev left a 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:

  1. 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.
  2. Add an def annotate(annotation: Any): Schema[A] method to the Schema[A] trait to make it easier to add ad-hoc annotations to derived Schemas.

Copy link
Contributor

@thinkharderdev thinkharderdev left a 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.

zio-schema/shared/src/main/scala/zio/schema/Schema.scala Outdated Show resolved Hide resolved
zio-schema/shared/src/main/scala/zio/schema/Schema.scala Outdated Show resolved Hide resolved
@alexvanolst alexvanolst marked this pull request as ready for review November 6, 2021 15:18
@alexvanolst alexvanolst requested a review from a team as a code owner November 6, 2021 15:18
@thinkharderdev
Copy link
Contributor

@dmitrykozinets @DamianReeves I'm happy with this implementation. Do you guys want to review it before merging?

Copy link
Contributor

@thinkharderdev thinkharderdev left a 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!

@dmitrykozinets
Copy link
Contributor

Looks good to me! Thank you @alexvanolst !

@thinkharderdev thinkharderdev merged commit 151b319 into zio:main Nov 8, 2021
jdegoes pushed a commit that referenced this pull request Dec 14, 2021
* 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>
landlockedsurfer pushed a commit to landlockedsurfer/zio-schema that referenced this pull request May 28, 2022
* 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
landlockedsurfer pushed a commit to landlockedsurfer/zio-schema that referenced this pull request May 28, 2022
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants