1 unstable release
0.1.0 | Oct 19, 2024 |
---|
#279 in Encoding
235KB
5.5K
SLoC
sbe-codegen
sbe-codegen is a tool to generate language-specific codecs for data structures encoded using Simple Binary Encoding.
Supported languages
- ✅ Rust
- ✅ Python
- ❌ Java/Kotlin
Installation
sbe-codegen can be installed either by building from sources directly or by downloading from the JFrog crates repository.
MSRV (Minimum Supported Rust Version)
The MSRV for sbe-codegen is 1.73.0
.
This means that sbe-codegen will compile with any version of Rust greater than or equal to 1.73.0
.
The code generation is currently broken on the stable channel due to certain features being unstable.
Downloading from crates
You can install the latest version of sbe-codegen by running:
$ cargo install sbe-codegen
Building from sources
Assuming you have this repository checked-out locally, you can build sbe-codegen by running:
$ cargo build --release
Usage
$ sbe-codegen --help
SBE multi-language codec generator
Usage: sbe-codegen [OPTIONS] --schema <SCHEMA_PATH> --language <LANGUAGE> --project-name <PROJECT_NAME> --project-path <PROJECT_PATH>
Options:
--schema <SCHEMA_PATH> Path to XML SBE schema
--language <LANGUAGE> Codec language [possible values: rust, python]
--project-name <PROJECT_NAME> Project name
--project-path <PROJECT_PATH> Project path
--project-version <VERSION> Project version (optional, taken from schema if not specified)
--with-test-deps Include test dependencies
--format Format project
-h, --help Print help
Codec generation
The following command generates Rust codecs for the example schema in the examples
directory:
$ sbe-codegen --schema ./examples/example-schema.xml --language rust --project-name example --project-path ./examples/rust --with-test-deps --format
The Python codecs similarly can be generated by running:
$ sbe-codegen --schema ./examples/example-schema.xml --language python --project-name example --project-path ./examples/python --format
Codec compilation
The Rust codecs then can be compiled by running:
$ cd ./examples/rust
$ cargo build --release
Similarly, the Python codecs can be compiled by running (maturin is required):
$ cd ./examples/python
$ maturin build --release
Example usage of generated codecs
Usage examples of the generated codecs can be found in the tests provided in the examples/rust/tests
(Rust) or examples/python/tests
(Python) directories.
If you want to test the generated codecs, generate them with the --with-test-deps
flag and run the tests with:
$ cd ./examples/rust
$ cargo test
$ cd ./examples/python
$ poetry install
$ maturin dev #--release (for benchmarks)
$ pytest
Dependencies
~2.6–3.5MB
~63K SLoC