Compare commits

...

8 Commits

Author SHA1 Message Date
d4309602c2 remove i686
Some checks failed
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.10) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.11) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.12) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.13) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.14) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.14t) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:windows-latest python-architecture:x64 target:x86_64 target-triple:x86_64-pc-windows-msvc], 3.9) (push) Has been cancelled
CI / Build sdists (push) Has been cancelled
CI / Publish artifacts to GH (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.10) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.11) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.12) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.13) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.14) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.14t) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-15-intel target:x86_64 target-triple:x86_64-apple-darwin], 3.9) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.10) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.11) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.12) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.13) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.14) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.14t) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:aarch64 target-triple:aarch64-apple-darwin], 3.9) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.10) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.11) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.12) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.13) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.14) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.14t) (push) Has been cancelled
CI / ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }} (map[os:macos-latest target:universal2 target-triple:x86_64-apple-darwin], 3.9) (push) Has been cancelled
2026-01-08 17:33:09 +08:00
e07fc2b389 sync 2026-01-08 17:21:59 +08:00
c8973c9249 sync 2026-01-08 17:12:34 +08:00
cd1492e257 sync 2026-01-08 17:07:22 +08:00
602b0b3964 sync rbufrp 2026-01-08 17:05:03 +08:00
32b0e9b8ed sync actions 2026-01-08 15:38:53 +08:00
498b9a62d4 sync
Some checks failed
Build Wheels (cibuildwheel) / Build wheels on Linux (aarch64) (push) Has been cancelled
Build Wheels (cibuildwheel) / Build wheels on Linux (x86_64) (push) Has been cancelled
Build Wheels (cibuildwheel) / Build wheels on macOS (arm64) (push) Has been cancelled
Build Wheels (cibuildwheel) / Build wheels on macOS (x86_64) (push) Has been cancelled
Build Wheels (cibuildwheel) / Build wheels on Windows (push) Has been cancelled
Build Wheels (cibuildwheel) / Build source distribution (push) Has been cancelled
Build Wheels (cibuildwheel) / Publish to GitHub Release (push) Has been cancelled
2026-01-08 01:43:46 +08:00
7f44e21156 sync 2026-01-08 01:29:57 +08:00
7 changed files with 169 additions and 237 deletions

View File

@ -1,154 +0,0 @@
name: Build Wheels (cibuildwheel)
on:
push:
branches:
- main
- master
tags:
- 'v*'
pull_request:
branches:
- main
- master
workflow_dispatch:
env:
CIBW_BUILD: cp38-* cp39-* cp310-* cp311-* cp312-* cp313-*
CIBW_SKIP: "*-musllinux_* *-win32 *-manylinux_i686"
CIBW_ARCHS_MACOS: "x86_64 arm64"
CIBW_ARCHS_LINUX: "x86_64 aarch64"
CIBW_ARCHS_WINDOWS: "AMD64"
# Build with maturin
CIBW_BEFORE_BUILD: pip install maturin
CIBW_BUILD_FRONTEND: build
jobs:
build-wheels-linux:
name: Build wheels on Linux
runs-on: ubuntu-latest
strategy:
matrix:
target: [x86_64, aarch64]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up QEMU
if: matrix.target == 'aarch64'
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- name: Build wheels
uses: pypa/cibuildwheel@v2.16
with:
package-dir: rbufrp
output-dir: wheelhouse
env:
CIBW_ARCHS_LINUX: ${{ matrix.target }}
- uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
path: ./wheelhouse/*.whl
if-no-files-found: error
build-wheels-macos:
name: Build wheels on macOS
runs-on: macos-latest
strategy:
matrix:
target: [x86_64, arm64]
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Build wheels
uses: pypa/cibuildwheel@v2.16
with:
package-dir: rbufrp
output-dir: wheelhouse
env:
CIBW_ARCHS_MACOS: ${{ matrix.target }}
- uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.target }}
path: ./wheelhouse/*.whl
if-no-files-found: error
build-wheels-windows:
name: Build wheels on Windows
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Build wheels
uses: pypa/cibuildwheel@v2.16
with:
package-dir: rbufrp
output-dir: wheelhouse
- uses: actions/upload-artifact@v4
with:
name: wheels-windows-amd64
path: ./wheelhouse/*.whl
if-no-files-found: error
build-sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: pip install maturin build
- name: Build sdist
working-directory: rbufrp
run: maturin sdist --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: sdist
path: rbufrp/dist/*.tar.gz
if-no-files-found: error
publish-to-github-release:
name: Publish to GitHub Release
needs: [build-wheels-linux, build-wheels-macos, build-wheels-windows, build-sdist]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: write
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
files: dist/*
generate_release_notes: true
draft: false
prerelease: false

View File

@ -3,101 +3,176 @@ name: CI
on: on:
push: push:
branches: branches:
- main
- master - master
- 'releases/**'
pull_request: pull_request:
release:
types:
- released
- prereleased
concurrency:
group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
jobs: jobs:
rust-test: build-test:
name: Rust Tests runs-on: ${{ matrix.conf.os }}
runs-on: ubuntu-latest name: ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-git-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- name: Run cargo check
run: cargo check --all --verbose
- name: Run cargo test
run: cargo test --all --verbose
- name: Run cargo clippy
run: cargo clippy --all -- -D warnings
- name: Run cargo fmt check
run: cargo fmt --all -- --check
python-test:
name: Python Tests
runs-on: ${{ matrix.os }}
strategy: strategy:
fail-fast: ${{ !( startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') ) }}
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] python-version:
python-version: ['3.8', '3.11', '3.13'] - '3.9'
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
- '3.14t'
conf:
- { os: ubuntu-latest, target: x86_64, target-triple: x86_64-unknown-linux-gnu, manylinux: auto }
- { os: ubuntu-latest, target: x86_64, target-triple: x86_64-unknown-linux-musl, manylinux: musllinux_1_1 }
- { os: ubuntu-latest, target: aarch64, target-triple: aarch64-unknown-linux-gnu, manylinux: auto }
- { os: ubuntu-latest, target: aarch64, target-triple: aarch64-unknown-linux-musl, manylinux: musllinux_1_1 }
- { os: macos-15-intel, target: x86_64, target-triple: x86_64-apple-darwin }
- { os: macos-latest, target: aarch64, target-triple: aarch64-apple-darwin }
- { os: macos-latest, target: universal2, target-triple: x86_64-apple-darwin }
- { os: windows-latest, target: x86_64, target-triple: x86_64-pc-windows-msvc, python-architecture: x64 }
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: - uses: actions/setup-python@v5
submodules: recursive
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with: with:
python-version: ${{ matrix.python-version }} python-version: ${{ matrix.python-version }}
architecture: ${{ matrix.conf.python-architecture }}
allow-prereleases: true
- name: Set up Rust - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.conf.target-triple }}
- name: Install maturin - name: Set MSVC developer prompt
run: pip install maturin pytest if: runner.os == 'Windows'
uses: ilammy/msvc-dev-cmd@v1
- name: Build Python package - name: Rust Tests
working-directory: rbufrp if: matrix.conf.target == 'x86_64' && !startsWith(matrix.python-version, 'pypy') && matrix.python-version == '3.12'
run: maturin develop --release working-directory: rbufr
run: cargo test
- name: Test Python package - name: Build wheel (OSX - Linux)
if: runner.os != 'Windows'
uses: PyO3/maturin-action@v1
with:
working-directory: rbufrp
target: ${{ matrix.conf.target }}
manylinux: ${{ matrix.conf.manylinux }}
args: -i ${{ matrix.python-version }} --release --out dist
- name: Build wheel (Windows)
if: runner.os == 'Windows'
working-directory: rbufrp working-directory: rbufrp
run: | run: |
python -m pip install maturin delvewheel
maturin build -i python --release --out wheels --target ${{ matrix.conf.target-triple }}
$file = Get-ChildItem -Path "wheels" | Select-Object -First 1
delvewheel repair -v "wheels\$($file.Name)" -w "dist"
- name: Install built wheel and Test (Native)
# TODO: I'm not sure but the actual collection of tests on windows using pypy3.10 takes forever and/or fails
if: |
!startsWith(matrix.conf.manylinux, 'musl') &&
!( matrix.python-version == 'pypy3.10' && runner.os == 'Windows' ) &&
( matrix.conf.target == 'x86_64' || matrix.conf.target == 'universal2' )
run: |
python -m pip install rbufrp --pre --find-links rbufrp/dist --force-reinstall
python -c "import rbufrp; print(rbufrp.__version__)" python -c "import rbufrp; print(rbufrp.__version__)"
python -c "import rbufrp; print(rbufrp.get_tables_path())"
check-formatting: # Could use 'distro: alpine_latest' in 'run-on-arch-action' but seems difficult to install a specific version of python
name: Check Formatting # so we'll just use existing python alpine images to test import and cli use w/o testing archs other than x86_64
- name: Install built wheel and Test (musllinux)
# TODO: python:3.13-alpine doesn't exist yet
if: startsWith(matrix.conf.manylinux, 'musl') && matrix.conf.target == 'x86_64' && !startsWith(matrix.python-version, '3.14')
run: |
docker run \
-v $(pwd)/rbufrp/dist:/wheels \
--rm python:${{ matrix.python-version }}-alpine sh \
-c "pip install rbufrp --no-index --find-links /wheels && python -c 'import rbufrp'"
# xref: https://github.com/milesgranger/cramjam/issues/194
# - name: Install built wheel and Test (Cross)
# if: |
# !startsWith(matrix.conf.manylinux, 'musl') &&
# runner.os == 'Linux' &&
# contains(fromJson('["3.9", "3.11", "3.13"]'), matrix.python-version ) &&
# !startsWith(matrix.python-version, 'pypy') &&
# contains(fromJson('["armv6", "armv7", "aarch64", "riscv64", "s390x", "ppc64le"]'), matrix.conf.target)
# uses: uraimo/run-on-arch-action@v2
# with:
# arch: ${{ matrix.conf.target }}
# distro: ubuntu22.04
# githubToken: ${{ github.token }}
# # Mount the dist directory as /artifacts in the container
# dockerRunArgs: |
# --volume "${PWD}/dist:/artifacts"
# install: |
# apt-get update
# apt-get install -y --no-install-recommends python3 python3-venv software-properties-common
# add-apt-repository ppa:deadsnakes/ppa
# apt-get update
# apt-get install -y curl python${{ matrix.python-version }}-venv
# run: |
# ls -lrth /artifacts
# PYTHON=python${{ matrix.python-version }}
# $PYTHON -m venv venv
# venv/bin/pip install -U pip
# venv/bin/pip install rbufrp --pre --no-index --find-links /artifacts --force-reinstall
# venv/bin/python -c 'import rbufrp'
- name: Upload wheels
uses: actions/upload-artifact@v4
if: ${{ ( startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/tags/') ) }}
with:
name: ${{ matrix.conf.os }}-${{ matrix.python-version }}-${{ matrix.conf.target-triple }}-${{ matrix.conf.target }}
path: rbufrp/dist
build-sdist:
name: Build sdists
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-python@v5
- name: Set up Python
uses: actions/setup-python@v5
with: with:
python-version: '3.11' python-version: 3.12
- name: Build sdist rbufrp
- name: Install ruff working-directory: rbufrp
run: pip install ruff
- name: Check Python formatting with ruff
run: | run: |
ruff check rbufrp/src/rbufrp/ python -m pip install maturin
ruff format --check rbufrp/src/rbufrp/ maturin sdist --out dist
- name: Upload sdists
uses: actions/upload-artifact@v4
with:
name: sdist
path: rbufrp/dist
gh-publish:
name: Publish artifacts to GH
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
needs: [build-test, build-sdist]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
path: .
merge-multiple: true
- name: List artifacts
run: ls -lhs
- name: Upload to GitHub
uses: softprops/action-gh-release@v2
with:
files: ./*

1
BUFR4

@ -1 +0,0 @@
Subproject commit a6b7ab078d4c70c69565655f7cf7c7d3913d6d78

View File

@ -11,6 +11,6 @@ crate-type = ["cdylib"]
[dependencies] [dependencies]
# "extension-module" tells pyo3 we want to build an extension module (skips linking against libpython.so) # "extension-module" tells pyo3 we want to build an extension module (skips linking against libpython.so)
# "abi3-py39" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.9 # "abi3-py39" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.9
pyo3 = { version = "0.27.1", features = ["extension-module", "abi3-py38"] } pyo3 = { version = "0.27.1", features = ["extension-module"] }
rbufr = { path = "../rbufr", features = ["python_bindings"] } rbufr = { path = "../rbufr", features = ["python_bindings"] }

View File

@ -1,11 +1,26 @@
[project] [project]
name = "rbufrp" name = "rbufrp"
version = "0.1.0" version = "0.1.0"
description = "Add your description here" description = "Fast BUFR (Binary Universal Form for the Representation of meteorological data) decoder written in Rust"
readme = "README.md" readme = "README.md"
authors = [{ name = "Tsuki", email = "qwin7989@gmail.com" }] authors = [{ name = "Tsuki", email = "qwin7989@gmail.com" }]
requires-python = ">=3.11" requires-python = ">=3.8"
dependencies = [] dependencies = []
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
"Topic :: Scientific/Engineering :: Atmospheric Science",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Rust",
]
keywords = ["bufr", "meteorology", "weather", "decoder"]
[project.scripts] [project.scripts]
rbufrp = "rbufrp:main" rbufrp = "rbufrp:main"

View File

@ -3,9 +3,8 @@ rbufrp - BUFR (Binary Universal Form for the Representation of meteorological da
""" """
import os import os
import sys
from pathlib import Path from pathlib import Path
from typing import Optional from typing import Optional, Union
# Import the Rust extension module # Import the Rust extension module
from ._core import ( from ._core import (
@ -52,7 +51,7 @@ def _find_tables_directory() -> Optional[Path]:
return None return None
def initialize_tables_path(custom_path: Optional[str | Path] = None) -> None: def initialize_tables_path(custom_path: Optional[Union[str, Path]] = None) -> None:
if custom_path: if custom_path:
custom_path = Path(custom_path) custom_path = Path(custom_path)
if not custom_path.exists(): if not custom_path.exists():

View File

@ -4,8 +4,6 @@ Type stubs for rbufrp._core
This file provides type hints for the Rust extension module. This file provides type hints for the Rust extension module.
""" """
from typing import Optional
class BUFRDecoder: class BUFRDecoder:
"""BUFR decoder for parsing BUFR files.""" """BUFR decoder for parsing BUFR files."""