Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/malcolmgreaves/avro-codegen
Scala code generator for Avro schemas.
https://github.com/malcolmgreaves/avro-codegen
avro avro-schema codegen data scala serialization
Last synced: 24 days ago
JSON representation
Scala code generator for Avro schemas.
- Host: GitHub
- URL: https://github.com/malcolmgreaves/avro-codegen
- Owner: malcolmgreaves
- Created: 2017-07-28T04:15:28.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-05-29T21:59:56.000Z (over 4 years ago)
- Last Synced: 2024-04-22T13:32:37.875Z (8 months ago)
- Topics: avro, avro-schema, codegen, data, scala, serialization
- Language: Scala
- Homepage:
- Size: 82 KB
- Stars: 9
- Watchers: 4
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-scala - avro-codegen - codegen) ![GitHub commit activity](https://img.shields.io/github/commit-activity/y/malcolmgreaves/avro-codegen) (Table of Contents / Serialization)
README
avro-codegen
============
[![Build Status](https://travis-ci.org/malcolmgreaves/avro-codegen.svg?branch=master)](https://travis-ci.org/malcolmgreaves/avro-codegen) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/fe5fab0140fc4a05ad5bcef6972b0409)](https://www.codacy.com/app/greavesmalcolm/avro-codegen?utm_source=github.com&utm_medium=referral&utm_content=malcolmgreaves/avro-codegen&utm_campaign=Badge_Grade) [![Gitter](https://badges.gitter.im/malcolmgreaves/avro-codegen.svg)](https://gitter.im/malcolmgreaves/avro-codegen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Stories in Ready](https://badge.waffle.io/malcolmgreaves/avro-codegen.png?label=ready&title=Ready)](https://waffle.io/malcolmgreaves/avro-codegen) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.malcolmgreaves/avro-codegen-runtime_2.12/badge.svg?style=plastic)](https://maven-badges.herokuapp.com/maven-central/io.malcolmgreaves/avro-codegen-runtime_2.12)Scala code generation from Avro schemas. Generates code similar to [ScalaPB](https://github.com/trueaccord/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 arraysfeatures:
* generated `org.scalacheck.Gen[_]` instances for generated enums, recordsnot 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 instancesTo 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")
```