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

Installing

uv sync --extra dev

Running

uv run 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


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.3.tar.gz (27.7 kB view details)

Uploaded Source

File details

Details for the file flattools-0.6.3.tar.gz.

File metadata

  • Download URL: flattools-0.6.3.tar.gz
  • Upload date:
  • Size: 27.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for flattools-0.6.3.tar.gz
Algorithm Hash digest
SHA256 774edc5d684deac676736853ac97f318683c5901c8bc99dbdb4ebe465dc34b60
MD5 e1160256ed3d2c7f770fdf8015c21277
BLAKE2b-256 5dce8f8b36cafc918bc8a44e867c4890907b88c4fcf33912ffd067a668a83895

See more details on using hashes here.

Supported by

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