v0.2.0 — first PyPI release
First publish of rubar to crates.io (as `rubar-core`) and PyPI (as `rubar`).
Highlights
- Workspace split: `rubar-core` (pure-Rust encoding + geometry, no PyO3) and `rubar-py` (thin PyO3 wrapper). Rust consumers can depend on `rubar-core` without pulling Python into the build.
- GS1-128 support via the new `gs1` module. Parse `(01)12345678901234(10)BATCH` directly and emit a valid Code 128 symbol stream with FNC1 designator + separators in the right places.
- Data Matrix (ECC 200) via the `DataMatrix` class. Plain encoding and GS1 Data Matrix both supported.
- GS1 shape control: `DataMatrix.gs1(value, shape='square' | 'rectangular' | 'any')`. Both are valid per GS1 General Specifications; the default encoder picks smallest-area, which can surprise callers expecting the square convention.
- Non-square matrix geometry: `MatrixGeometry` exposes `width` and `height` separately (QR stays square; Data Matrix can be rectangular).
- PyO3 0.28.3 across the workspace.
Wheels
Binary wheels for macOS arm64 and Linux x86_64 on Python 3.11 + 3.13. Other platforms build from sdist.
Supported symbologies
Code 128, GS1-128, Code 39, UPC-A, EAN-8, ITF, QR Code, Data Matrix, GS1 Data Matrix.