bstruct
Simple and efficient binary (de)serialization using type annotations.
Supports easy fallback to Python's built-in struct library for maximum performance.
Getting Started
pip install bstruct
from typing import Annotated
from dataclasses import dataclass
import bstruct
@dataclass
class Measurement:
timestamp: bstruct.u32 # shorthand for: Annotated[int, bstruct.Encodings.u32]
values: Annotated[list[bstruct.u8], bstruct.Array(3)]
MeasurementEncoding = bstruct.derive(Measurement)
measurement = Measurement(
timestamp=1672764049,
values=[1, 2, 3],
)
encoded = MeasurementEncoding.encode(measurement)
decoded = MeasurementEncoding.decode(encoded)
assert decoded == measurement
See the documentation for more information.
Benchmarks
Please see the source of the benchmarks in the benchmarks directory.
Feel free to create an issue or PR should there be a problem with the methodology.
The benchmarks where executed with
pyperf
using Python 3.11.1 and
construct 2.10.68
on a MacBook Pro 2018 with a 2.3GHz i5 processor.
benchmarks/builtins.py
| Name | decode | encode |
|---|---|---|
| struct | 0.54 us | 0.23 us |
| bstruct | 2.51 us | 1.64 us |
| construct (compiled) | 9.49 us | 10.00 us |
benchmarks/native_list.py
| Name | decode | encode |
|---|---|---|
| struct | 0.17 us | 0.33 us |
| bstruct | 1.70 us | 0.59 us |
| construct (compiled) | 4.04 us | 6.61 us |
benchmarks/class_list.py
| Name | decode | encode |
|---|---|---|
| bstruct | 7.37 us | 4.81 us |
| construct (compiled) | 34.5 us | 36.6 us |
benchmarks/nested.py
| Name | decode | encode |
|---|---|---|
| bstruct | 6.05 us | 4.42 us |
| construct (compiled) | 27.6 us | 29.5 us |
Issues and Contributing
I am very happy to receive any kind of feedback or contribution. Just open an issue and let me know.
Metadata
Release files for bstruct 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bstruct-0.6.1.tar.gz | 6.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bstruct-0.6.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.9 kB
Release files / bstruct-0.6.1.tar.gz
| Download URL | bstruct-0.6.1.tar.gz |
|---|---|
| Size | 6.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
390e8d3c8bade6409bbed4b6552ba24b4484e4f10d6f0498c2e9c9a0628d4093
|
|
BLAKE2b-256 checksum How to use checksums |
ab930d5b39755b6970e5e6fcfe084ceac70e2647e636ffdb9b402d9691d2fe3e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.7.0 CPython/3.11.6 Linux/6.2.0-1015-azure
|
Release files / bstruct-0.6.1-py3-none-any.whl
| Download URL | bstruct-0.6.1-py3-none-any.whl |
|---|---|
| Size | 6.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
68357387131ee45e39a3c691ce600b64ec78f0312a43cb37af24aa13797ba9d0
|
|
BLAKE2b-256 checksum How to use checksums |
f9d744d4e326bdc6e62bbc31c83fb7c9cf48d9c8cdfd25f81784003d821f9550
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.7.0 CPython/3.11.6 Linux/6.2.0-1015-azure
|