Dynosaur DynamoDB Schema macro derivation library.
Before using this library, ensure to align with the Dynosaur documentation and the underlying motivation. Dynosaur is designed around explicit, hand-crafted schemas, and that approach should generally be preferred.
However, in cases where modeling the DynamoDB domain as case classes is unavoidable, this library can help reduce boilerplate.
// `<latest version>` refers to the version indicated by the badge above
libraryDependencies += "io.github.pomadchin" %% "dynosaur-derivation" % "<latest version>"Additional, more detailed examples are available in the tests:
import io.github.pomadchin.dynosaur.derivation.*
import nullable.discriminator.* // configures the derivation mode
import dynosaur.Schema
case class Document(id: String, text: Option[String], number: Long) derives Schema
sealed trait Documents derives Schema
case class Document1(id: String, text: Option[String], number: Long) extends Documents
case class Document2(id: String, text: Option[String], number: Long) extends Documentsnullable.discriminator.*- derivation with discriminator and leniency to nullability enabledoptional.discriminator.*- derivation with discriminator and leniency to nullability disablednullable.*- derivation without discriminator and leniency to nullability enabledoptional.*- derivation without discriminator and leniency to nullability disabled
import io.github.pomadchin.dynosaur.derivation.*
import dynosaur.Schema
// Dynosaur Schema derivation example
case class Document(id: String, text: Option[String], number: Long)
// leniency to nullability enabled
implicit val documentSchema: Schema[Document] = SchemaAuto.derive
// leniency to nullability disabled
implicit val documentSchema: Schema[Document] = SchemaAuto.derive(false)
// Dynosaur Schema derivation with a discriminator field; useful for the sealed families
sealed trait Documents
case class Document1(id: String, text: Option[String], number: Long) extends Documents
case class Document2(id: String, text: Option[String], number: Long) extends Documents
// leniency to nullability enabled
implicit val documentsSchema: Schema[Documents] = SchemaAuto.derive("discriminator")
// leniency to nullability disabled
implicit val documentsSchema: Schema[Documents] = SchemaAuto.derive("discriminator", false)Code is provided under the Apache 2.0 license available at http://opensource.org/licenses/Apache-2.0, as well as in the LICENSE file.