[package]
name = "wireframe"
version = "0.2.0"
edition = "2024"
description = "Simplify building servers and clients for custom binary protocols."
license = "ISC"
repository = "https://github.com/leynos/wireframe"
readme = "README.md"
keywords = ["async", "networking", "binary-protocol", "protocol", "tokio"]
categories = ["network-programming", "asynchronous"]
documentation = "https://docs.rs/wireframe"
[lib]
name = "wireframe"
path = "src/lib.rs"
doctest = false
[package.metadata.docs.rs]
features = ["metrics"]
[dependencies]
serde = { version = "1.0.219", features = ["derive"] }
bincode = "2.0.1"
tokio = { version = "1.47.1", default-features = false, features = [
"net",
"signal",
"rt-multi-thread",
"macros",
"sync",
"time",
"io-util",
] }
tokio-util = { version = "0.7.16", features = ["rt", "codec"] }
tokio-stream = "0.1.17"
futures = "0.3.31"
async-trait = "0.1.89"
bytes = "1.10.1"
log = "0.4.28"
dashmap = "6.1.0"
leaky-bucket = "1.1.2"
tracing = { version = "0.1.41", features = ["log", "log-always"] }
tracing-subscriber = "0.3.18"
metrics = { version = "0.24.2", optional = true }
thiserror = "2.0.16"
itoa = "1.0"
static_assertions = "1.1.0"
derive_more = { version = "2.0.1", features = ["display", "from"] }
socket2 = "0.6.0"
[dev-dependencies]
rstest = "0.26.1"
wireframe_testing = { path = "./wireframe_testing" }
logtest = "2.0.0"
proptest = "1.7.0"
loom = "0.7.2"
async-stream = "0.3.6"
serial_test = "3.2.0"
cucumber = "0.21.1"
metrics-util = "0.20.0"
tracing-test = "0.2.5"
mockall = "0.13.1"
tokio = { version = "1.47.1", default-features = false, features = [
"macros",
"rt-multi-thread",
"sync",
"time",
"io-util",
"net",
"test-util",
] }
[target.'cfg(loom)'.dependencies]
loom = "0.7.2"
[target.'cfg(not(loom))'.dependencies]
metrics-exporter-prometheus = { version = "0.17.2", optional = true, features = ["http-listener"] }
[features]
default = ["metrics", "serializer-bincode"]
metrics = ["dep:metrics", "dep:metrics-exporter-prometheus"]
serializer-bincode = []
advanced-tests = []
examples = []
cucumber-tests = []
test-support = []
[lints.clippy]
pedantic = { level = "warn", priority = -1 }
allow_attributes = "deny"
allow_attributes_without_reason = "deny"
blanket_clippy_restriction_lints = "deny"
cognitive_complexity = "deny"
needless_pass_by_value = "deny"
implicit_hasher = "deny"
dbg_macro = "deny"
print_stdout = "deny"
print_stderr = "deny"
unwrap_used = "deny"
expect_used = "deny"
indexing_slicing = "deny"
string_slice = "deny"
integer_division = "deny"
integer_division_remainder_used = "deny"
panic_in_result_fn = "deny"
unreachable = "deny"
host_endian_bytes = "deny"
little_endian_bytes = "deny"
big_endian_bytes = "deny"
[lints.rust]
unknown_lints = "deny"
renamed_and_removed_lints = "deny"
missing_docs = "deny"
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] }
[lints.rustdoc]
missing_crate_level_docs = "deny"
broken_intra_doc_links = "deny"
private_intra_doc_links = "deny"
bare_urls = "deny"
invalid_html_tags = "deny"
invalid_codeblock_attributes = "deny"
unescaped_backticks = "deny"
[[example]]
name = "echo"
path = "examples/echo.rs"
required-features = ["examples"]
[[example]]
name = "async_stream"
path = "examples/async_stream.rs"
required-features = ["examples"]
[[example]]
name = "metadata_routing"
path = "examples/metadata_routing.rs"
required-features = ["examples"]
[[example]]
name = "multi_packet"
path = "examples/multi_packet.rs"
required-features = ["examples"]
[[example]]
name = "packet_enum"
path = "examples/packet_enum.rs"
required-features = ["examples"]
[[example]]
name = "ping_pong"
path = "examples/ping_pong.rs"
required-features = ["examples"]
[[example]]
name = "hotline_codec"
path = "examples/hotline_codec.rs"
required-features = ["examples"]
[[example]]
name = "mysql_codec"
path = "examples/mysql_codec.rs"
required-features = ["examples"]
[[example]]
name = "resp_codec"
path = "examples/resp_codec.rs"
required-features = ["examples"]
[[test]]
name = "cucumber"
harness = false
required-features = ["advanced-tests", "cucumber-tests"]
[[test]]
name = "concurrency_loom"
path = "tests/advanced/concurrency_loom.rs"
required-features = ["advanced-tests"]