Skip to main content

Pure Python Flatbuffer Schema Compiler

Project description

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

Running

$ flatc.py 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

Project details


Release history Release notifications | RSS feed

This version

0.6

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flattools-0.6.tar.gz (30.3 kB view hashes)

Uploaded Source

Built Distribution

flattools-0.6-py2.py3-none-any.whl (38.1 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page