flattools
flattools copied to clipboard
Python tools to deal with flatbuffers: flatc.py and thrift2fbs.py. Forked from eleme/thriftpy.
Flattools - collection of tools to deal with Flatbuffers
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.
Usage
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
Supporting new languages
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