gsm_map 1.0.0

GSM MAP (Mobile Application Part) operations per 3GPP TS 29.002 — SMS (MO/MT-ForwardSM, SRI-for-SM), mobility, authentication, USSD, supplementary services — as BER-codable ASN.1 types, with optional Rust-backed Python bindings
Documentation
[package]
name = "gsm_map"
version = "1.0.0"
edition = "2021"
rust-version = "1.80"
description = "GSM MAP (Mobile Application Part) operations per 3GPP TS 29.002 — SMS (MO/MT-ForwardSM, SRI-for-SM), mobility, authentication, USSD, supplementary services — as BER-codable ASN.1 types, with optional Rust-backed Python bindings"
authors = ["Real Time Telecom B.V."]
license = "MIT"
readme = "README.md"
repository = "https://github.com/Real-Time-Telecom-B-V/gsm_map"
homepage = "https://github.com/Real-Time-Telecom-B-V/gsm_map"
keywords = ["gsm", "map", "ss7", "3gpp", "sms"]
categories = ["network-programming"]
# Keep CI/build scaffolding out of the crates.io package. `python/` (the wheel's
# pure-Python shim) and `pyproject.toml` ship harmlessly, but the dev-only test
# suite under `python/tests/`, the docs, and the perf rig do not.
exclude = [".github/", "docs/", "scripts/", "python/tests/"]

# cdylib  → maturin/PyO3 build the loadable extension module (the wheel).
# rlib    → crates.io consumers link this; the cdylib is inert for them.
# Building both is the standard PyO3 mixed-layout setup (pydantic-core, orjson).
[lib]
crate-type = ["cdylib", "rlib"]

[dependencies]
rasn = "0.28"
hex = "0.4"
thiserror = "2"
tcap = "1"

# Optional Python bindings (feature = "python"). Kept out of the default build so
# `cargo add gsm_map` and crates.io consumers pull ZERO pyo3. pyo3 >= 0.28 defaults
# modules to `gil_used = false`, so the extension loads on free-threaded ("no-GIL")
# CPython without re-enabling the GIL. abi3-py39 → one forward-compatible wheel for
# regular CPython 3.9+ (free-threaded wheels are built version-specific instead).
pyo3 = { version = "0.29", optional = true, features = ["abi3-py39"] }

[features]
default = []
# Links libpython; enables the bindings. Used by `cargo {test,clippy} --features python`.
python = ["dep:pyo3"]
# Wheel-only: maturin sets this. `pyo3/extension-module` tells pyo3 NOT to link
# libpython, which breaks a Rust test binary — so this is NEVER enabled by
# `cargo test`/`cargo clippy` (and CI must not use `--all-features`).
extension-module = ["python", "pyo3/extension-module"]

[dev-dependencies]
# criterion drives the codec + full-stack integration benchmarks.
criterion = "0.8"
# The integration benchmark assembles a realistic SS7 stack: it wraps the MAP
# operation in a TCAP Invoke/Begin and then an SCCP UDT. `tcap` is already a
# runtime dep; `sccp` is a sibling crate consumed here only for the bench.
sccp = "1"

[[bench]]
name = "codec"
harness = false

[[bench]]
name = "integration"
harness = false

[lints.clippy]
correctness = { level = "deny", priority = -1 }