[package]
edition = "2024"
rust-version = "1.88"
name = "wingfoil"
version = "6.0.2"
authors = ["wingfoil@wingfoil.io"]
build = false
publish = [
"wingfoil",
"crates-io",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "graph based stream processing framework"
homepage = "https://github.com/wingfoil-io/wingfoil/"
documentation = "https://docs.rs/wingfoil"
readme = "README.md"
keywords = [
"graph",
"stream",
"dag",
"hft",
"trading",
]
license = "Apache-2.0"
[package.metadata.docs.rs]
scrape-examples = true
[features]
aeron = ["dep:rusteron-client"]
aeron-driver = [
"aeron",
"dep:rusteron-media-driver",
]
aeron-integration-test = [
"aeron",
"aeron-rs-beta",
"dep:testcontainers",
"dep:libc",
]
aeron-rs-beta = ["dep:aeron-rs"]
async = [
"dep:tokio",
"dep:futures",
"dep:async-stream",
"dep:futures-util",
"tokio/time",
]
bench = ["dep:criterion"]
csv = ["dep:csv"]
default = ["async"]
dhat-heap = []
dynamic-graph-beta = []
etcd = [
"dep:etcd-client",
"async",
]
etcd-integration-test = [
"etcd",
"dep:testcontainers",
]
fix = [
"dep:fefix",
"dep:rustls",
"dep:webpki-roots",
]
fix-integration-test = ["fix"]
fluvio = [
"dep:fluvio",
"async",
]
fluvio-integration-test = [
"fluvio",
"dep:testcontainers",
"dep:fluvio-controlplane-metadata",
]
full = [
"async",
"csv",
"kdb",
"zmq",
"etcd",
"fluvio",
"dynamic-graph-beta",
"instrument-default",
"iceoryx2",
"prometheus",
"otlp",
"fix",
"web",
"web-tls",
"kafka",
"aeron",
]
iceoryx2 = ["dep:iceoryx2"]
iceoryx2-integration-test = [
"iceoryx2",
"dep:testcontainers",
]
instrument-all = [
"instrument-default",
"instrument-cycle-node",
]
instrument-apply-nodes = ["tracing"]
instrument-cycle = ["tracing"]
instrument-cycle-node = ["tracing"]
instrument-default = [
"instrument-run",
"instrument-cycle",
"instrument-apply-nodes",
"instrument-initialise",
]
instrument-initialise = ["tracing"]
instrument-run = ["tracing"]
kafka = [
"dep:rdkafka",
"async",
]
kafka-integration-test = [
"kafka",
"dep:testcontainers",
]
kdb = [
"dep:kdb-plus-fixed",
"dep:sha2",
"dep:bincode",
"async",
"tokio/fs",
]
kdb-integration-test = ["kdb"]
otlp = [
"dep:opentelemetry",
"dep:opentelemetry_sdk",
"dep:opentelemetry-otlp",
"async",
]
otlp-integration-test = [
"otlp",
"dep:testcontainers",
]
prometheus = ["dep:arc-swap"]
prometheus-integration-test = [
"prometheus",
"dep:reqwest",
]
tracing = []
web = [
"async",
"dep:axum",
"dep:tower-http",
"dep:tokio-tungstenite",
"dep:wingfoil-wire-types",
"dep:bincode",
"tokio/net",
"tokio/sync",
]
web-tls = [
"web",
"dep:axum-server",
"dep:rustls",
"dep:rustls-pemfile",
]
web-tls-integration-test = [
"web-tls",
"tokio-tungstenite/rustls-tls-webpki-roots",
]
zmq = [
"dep:zmq",
"dep:bincode",
]
zmq-cross-lang-etcd-test = [
"zmq-cross-lang-test",
"zmq-etcd-integration-test",
]
zmq-cross-lang-test = ["zmq-integration-test"]
zmq-etcd-integration-test = [
"zmq",
"etcd",
"dep:testcontainers",
]
zmq-integration-test = ["zmq"]
[lib]
name = "wingfoil"
path = "src/lib.rs"
[[example]]
name = "aeron"
path = "examples/aeron/main.rs"
required-features = ["aeron"]
[[example]]
name = "aeron_status_circuit_breaker"
path = "examples/aeron/status_circuit_breaker.rs"
required-features = ["aeron"]
[[example]]
name = "async"
path = "examples/async/main.rs"
required-features = ["async"]
[[example]]
name = "breadth_first"
path = "examples/breadth_first/main.rs"
[[example]]
name = "demux"
path = "examples/dynamic/demux/main.rs"
[[example]]
name = "dynamic-group"
path = "examples/dynamic/dynamic-group/main.rs"
required-features = ["dynamic-graph-beta"]
[[example]]
name = "dynamic-manual"
path = "examples/dynamic/dynamic-manual/main.rs"
required-features = ["dynamic-graph-beta"]
[[example]]
name = "etcd"
path = "examples/etcd/main.rs"
required-features = ["etcd"]
[[example]]
name = "fix_client"
path = "examples/fix/fix_client.rs"
required-features = ["fix"]
[[example]]
name = "fix_echo_server"
path = "examples/fix/fix_echo_server.rs"
required-features = ["fix"]
[[example]]
name = "fix_loopback"
path = "examples/fix/fix_loopback.rs"
required-features = ["fix"]
[[example]]
name = "fluvio"
path = "examples/fluvio/main.rs"
required-features = ["fluvio"]
[[example]]
name = "iceoryx2_pub"
path = "examples/iceoryx2/pub.rs"
required-features = ["iceoryx2"]
[[example]]
name = "iceoryx2_sub"
path = "examples/iceoryx2/sub.rs"
required-features = ["iceoryx2"]
[[example]]
name = "kafka"
path = "examples/kafka/main.rs"
required-features = ["kafka"]
[[example]]
name = "kdb_read"
path = "examples/kdb/read/main.rs"
required-features = ["kdb"]
[[example]]
name = "kdb_read_cached"
path = "examples/kdb/read_cached/main.rs"
required-features = ["kdb"]
[[example]]
name = "kdb_round_trip"
path = "examples/kdb/round_trip/main.rs"
required-features = ["kdb"]
[[example]]
name = "latency_e2e_fix_gw"
path = "examples/latency_e2e/fix_gw.rs"
required-features = [
"fix",
"iceoryx2",
]
[[example]]
name = "latency_e2e_ws_server"
path = "examples/latency_e2e/ws_server.rs"
required-features = [
"web-tls",
"iceoryx2",
"prometheus",
"otlp",
]
[[example]]
name = "latency_pub"
path = "examples/latency/pub.rs"
required-features = ["iceoryx2"]
[[example]]
name = "latency_sub"
path = "examples/latency/sub.rs"
required-features = ["iceoryx2"]
[[example]]
name = "lmax_demo"
path = "examples/fix/lmax_demo.rs"
required-features = ["fix"]
[[example]]
name = "lmax_instruments"
path = "examples/fix/lmax_instruments.rs"
required-features = ["fix"]
[[example]]
name = "order_book"
path = "examples/order_book/main.rs"
required-features = ["csv"]
[[example]]
name = "otlp"
path = "examples/telemetry/otlp/main.rs"
required-features = [
"otlp",
"prometheus",
]
[[example]]
name = "prometheus"
path = "examples/telemetry/prometheus/main.rs"
required-features = ["prometheus"]
[[example]]
name = "run_mode"
path = "examples/run_mode/main.rs"
[[example]]
name = "threading"
path = "examples/threading/main.rs"
[[example]]
name = "tracing"
path = "examples/tracing/main.rs"
[[example]]
name = "web"
path = "examples/web/main.rs"
required-features = ["web"]
[[example]]
name = "zmq_direct_pub"
path = "examples/zmq/direct/zmq_pub.rs"
required-features = ["zmq"]
[[example]]
name = "zmq_direct_sub"
path = "examples/zmq/direct/zmq_sub.rs"
required-features = ["zmq"]
[[example]]
name = "zmq_etcd_pub"
path = "examples/zmq/etcd/zmq_pub.rs"
required-features = [
"zmq",
"etcd",
]
[[example]]
name = "zmq_etcd_sub"
path = "examples/zmq/etcd/zmq_sub.rs"
required-features = [
"zmq",
"etcd",
]
[[bench]]
name = "aeron_allocation_tracking"
path = "benches/aeron/allocation_tracking.rs"
harness = false
required-features = ["aeron"]
[[bench]]
name = "aeron_publication_latency"
path = "benches/aeron/publication_latency.rs"
harness = false
required-features = ["aeron"]
[[bench]]
name = "aeron_subscription_throughput"
path = "benches/aeron/subscription_throughput.rs"
harness = false
required-features = ["aeron"]
[[bench]]
name = "aeron_transceiver"
path = "benches/aeron/transceiver.rs"
harness = false
required-features = ["aeron"]
[[bench]]
name = "bfs_vs_dfs_async_streams"
path = "benches/bfs_vs_dfs/async_streams.rs"
harness = false
required-features = ["async"]
[[bench]]
name = "bfs_vs_dfs_reactive"
path = "benches/bfs_vs_dfs/reactive.rs"
harness = false
[[bench]]
name = "bfs_vs_dfs_wingfoil"
path = "benches/bfs_vs_dfs/wingfoil.rs"
harness = false
required-features = ["bench"]
[[bench]]
name = "graph"
path = "benches/graph.rs"
harness = false
required-features = ["bench"]
[[bench]]
name = "iceoryx2"
path = "benches/iceoryx2.rs"
harness = false
required-features = ["iceoryx2"]
[[bench]]
name = "iceoryx2_modes"
path = "benches/iceoryx2_modes.rs"
harness = false
required-features = ["iceoryx2"]
[[bench]]
name = "nanotime"
path = "benches/nanotime.rs"
harness = false
[dependencies.aeron-rs]
version = "0.1"
optional = true
[dependencies.anyhow]
version = "1.0.100"
[dependencies.arc-swap]
version = "1.7"
optional = true
[dependencies.async-stream]
version = "0.3.6"
optional = true
[dependencies.axum]
version = "0.8"
features = ["ws"]
optional = true
[dependencies.axum-server]
version = "0.7"
features = ["tls-rustls-no-provider"]
optional = true
default-features = false
[dependencies.bincode]
version = "1.3.3"
optional = true
[dependencies.chrono]
version = "0.4"
[dependencies.criterion]
version = "0.8.1"
optional = true
[dependencies.crossbeam]
version = "0.8.4"
[dependencies.csv]
version = "1.4"
optional = true
[dependencies.derive-new]
version = "0.7"
[dependencies.derive_more]
version = "2.1"
features = ["full"]
[dependencies.env_logger]
version = "0.11"
[dependencies.etcd-client]
version = "0.18"
optional = true
[dependencies.fefix]
version = "0.7"
optional = true
[dependencies.fluvio]
version = "0.50.1"
optional = true
[dependencies.fluvio-controlplane-metadata]
version = "0.50.1"
optional = true
[dependencies.formato]
version = "0.3.0"
[dependencies.futures]
version = "0.3"
optional = true
[dependencies.futures-util]
version = "0.3.31"
optional = true
[dependencies.iceoryx2]
version = "0.8"
optional = true
[dependencies.itertools]
version = "0.14.0"
[dependencies.kanal]
version = "0.1.1"
[dependencies.kdb-plus-fixed]
version = "0.5.0"
features = ["ipc"]
optional = true
[dependencies.libc]
version = "0.2"
optional = true
[dependencies.log]
version = "0.4"
[dependencies.num-traits]
version = "0.2"
[dependencies.opentelemetry]
version = "0.28"
optional = true
[dependencies.opentelemetry-otlp]
version = "0.28"
features = [
"http-proto",
"reqwest-blocking-client",
"metrics",
"trace",
]
optional = true
[dependencies.opentelemetry_sdk]
version = "0.28"
features = [
"metrics",
"trace",
"rt-tokio",
]
optional = true
[dependencies.ordered-float]
version = "4.5.0"
[dependencies.priority-queue]
version = "2.7.0"
[dependencies.quanta]
version = "0.9.3"
[dependencies.rdkafka]
version = "0.37"
optional = true
[dependencies.reqwest]
version = "0.12"
features = [
"json",
"blocking",
]
optional = true
[dependencies.rusteron-client]
version = "0.1"
optional = true
[dependencies.rusteron-media-driver]
version = "0.1"
optional = true
[dependencies.rustls]
version = "0.23"
features = ["ring"]
optional = true
[dependencies.rustls-pemfile]
version = "2"
optional = true
[dependencies.serde]
version = "1.0"
features = ["derive"]
[dependencies.serde-aux]
version = "4.7.0"
[dependencies.serde_json]
version = "1.0"
[dependencies.sha2]
version = "0.10"
optional = true
[dependencies.strum]
version = "0.27.2"
features = ["derive"]
[dependencies.strum_macros]
version = "0.27.2"
[dependencies.testcontainers]
version = "0.27"
features = ["blocking"]
optional = true
[dependencies.thiserror]
version = "2.0.11"
[dependencies.tinyvec]
version = "1.10.0"
features = ["alloc"]
[dependencies.tokio]
version = "1"
features = ["rt-multi-thread"]
optional = true
[dependencies.tokio-tungstenite]
version = "0.24"
optional = true
[dependencies.tower-http]
version = "0.6"
features = ["fs"]
optional = true
[dependencies.tracing]
version = "0.1"
features = [
"log",
"attributes",
]
[dependencies.tynm]
version = "0.2.0"
[dependencies.webpki-roots]
version = "0.26"
optional = true
[dependencies.wingfoil-derive]
version = "6.0.2"
[dependencies.wingfoil-wire-types]
version = "6.0.2"
optional = true
[dependencies.zmq]
version = "0.10.0"
optional = true
[dev-dependencies.cargo-husky]
version = "1"
features = ["user-hooks"]
default-features = false
[dev-dependencies.criterion]
version = "0.8.1"
[dev-dependencies.dhat]
version = "0.3"
[dev-dependencies.libc]
version = "0.2"
[dev-dependencies.lobster]
version = "0.7.0"
[dev-dependencies.rcgen]
version = "0.13"
[dev-dependencies.rxrust]
version = "1.0.0-rc.3"
[dev-dependencies.scopeguard]
version = "1.2.0"
[dev-dependencies.tokio]
version = "1"
features = [
"rt-multi-thread",
"sync",
"macros",
]
[dev-dependencies.tracing-subscriber]
version = "0.3"
features = ["env-filter"]
[lints.clippy]
needless_doctest_main = "allow"
type_complexity = "allow"
[lints.clippy.perf]
level = "warn"
priority = -1
[lints.rust]
unsafe_op_in_unsafe_fn = "warn"