/flattools

Python tools to deal with flatbuffers: flatc.py and thrift2fbs.py. Forked from eleme/thriftpy.

Primary LanguagePythonMIT LicenseMIT

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