Flatbuffers is a cross platform serialization library with a focus on zero copy deserialization. They're similar in functionality to protocol buffers and thrift, but with a focus on gaming related use cases where the CPU cost of decoding large buffers can be significant.
Flattools implements an alternative flatbuffers compiler implemented in python, referred to as
flatc.py
. The idea is that we could use flatbuffers as a
serialization agnostic IDL.
Why is this important? Building software around a well defined type system that expresses various concepts in a given domain such as banking or gaming (also knows as domain driven design) is a useful technique, but somewhat controversial.
Installing
pip3 install flattools
Running
$ ~/.local/bin/flatc tests/parser-cases/color.fbs --kotlin=1
Generates something like
// automatically generated by the FlatBuffers compiler, do not modify
enum class Color(val x: Byte) {
Red(1),
Green(2),
Blue(3),
}
data class Person(
val name: String,
val address: String,
val age: Short,
val length: ULong,
val favorite_color: Color,
)
data class Product(
val label: String,
val price: Int,
)
sealed class Item {
class Product : Item()
class Person : Item()
}
This uses templated code generation using jinja2.
Supported languages: python, rust, kotlin, swift
Pull requests are welcome for other languages. The idea is to start from one of the existing languages here and creating a new template for your language of choice.
There are existing tests, so all you need to do is generate golden/expected data for your language of choice