ProductPromotion
Logo

Scala

made by https://0x3d.site

GitHub - malcolmgreaves/avro-codegen: Scala code generator for Avro schemas.
Scala code generator for Avro schemas. Contribute to malcolmgreaves/avro-codegen development by creating an account on GitHub.
Visit Site

GitHub - malcolmgreaves/avro-codegen: Scala code generator for Avro schemas.

GitHub - malcolmgreaves/avro-codegen: Scala code generator for Avro schemas.

avro-codegen

Build Status Codacy Badge Gitter Stories in Ready Maven Central

Scala code generation from Avro schemas. Generates code similar to ScalaPB.

Notably, the generated code for data encapsulation is in the form of case classes. The data representation is completely immutable.

All generated code adheres to the GeneratedMessageCompanion type class. This ensures that there exists decode and encode functionality.

working code generation for types:

  • enums
  • records
  • scalar fields (for all types except for byte arrays)
  • union fields via shapeless coproducts (for unions not containing NULL)
  • optional union fields via shapeless coproducts (for unions containing more than 2 types, one of which is NULL)
  • optional fields (for unions containing 2 types, one of which is NULL)
  • arrays
  • maps
  • byte arrays

features:

  • generated org.scalacheck.Gen[_] instances for generated enums, records

not implemented:

  • fixed-length fields
  • Generating code from inter-dependent schemas defined in multiple files (currently only handles this case when everything is in the same file).

Subprojects

  • runtime: runtime dependencies
  • codegen: generates .scala files from avro schemas. Currently hardcoded to generate Out.scala in sandbox from the avro schemas in the example directory.
  • proptest: generates random schemas, generates scala code for the schemas, tests the generated scala code by serializing and deserializing random message instances

To Use

There are two ways to use this project. The first is in creating case class instances from Avro schemas. The second is in interacting with the generated code. In practice, it's common for a project to do a little bit of both.

For the first use case:

add this to project/plugins.sbt

addSbtPlugin("io.malcolmgreaves" % "avro-codegen-compiler" % "X.Y.Z")

where X.Y.Z is the most recent version.

Add your avro schemas to src/main/avro with the .avsc extension. Generated scala classes will be created in target/scala-2.12/src_managed/main/generated_avro_classes/.

For the second use case:

When using code generated by this plugin, it is necessary to include the runtime dependency (which includes lots of goodies -- notably the serialization type class GeneratedMessage). Therefore, include the following in your build.sbt

libraryDependencies ++= Seq("io.malcolmgreaves" %% "avro-codegen-runtime" % "X.Y.Z")

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory