[package]
name = "zbus"
version = "3.14.1"
authors = ["Zeeshan Ali Khan <zeeshanak@gnome.org>"]
edition = "2018"
rust-version = "1.64"

description = "API for D-Bus communication"
repository = "https://github.com/dbus2/zbus/"
keywords = ["D-Bus", "DBus", "IPC"]
license = "MIT"
categories = ["os::unix-apis"]
readme = "README.md"

[features]
default = ["async-io"]
xml = ["serde-xml-rs"]
gvariant = ["zvariant/gvariant"]
uuid = ["zvariant/uuid"]
url = ["zvariant/url"]
time = ["zvariant/time"]
chrono = ["zvariant/chrono"]
windows-gdbus = []
async-io = ["dep:async-io", "async-executor", "async-task", "async-lock", "async-fs", "blocking", "futures-util/io"]
tokio = ["dep:tokio"]
vsock = ["dep:vsock", "dep:async-io"]
tokio-vsock = ["dep:tokio-vsock", "tokio"]

[dependencies]
byteorder = "1.4.3"
serde = { version = "1.0", features = ["derive"] }
serde_repr = "0.1.9"
zvariant = { path = "../zvariant", version = "3.15.0", default-features = false, features = ["enumflags2"] }
zbus_names = { path = "../zbus_names", version = "2.6" }
zbus_macros = { path = "../zbus_macros", version = "=3.14.1" }
enumflags2 = { version = "0.7.7", features = ["serde"] }
serde-xml-rs = { version = "0.4.1", optional = true }
derivative = "2.2"
once_cell = "1.4.0"
async-io = { version = "1.12.0", optional = true }
futures-core = "0.3.25"
futures-sink = "0.3.25"
futures-util = { version = "0.3.25", default-features = false, features = ["sink", "std"] }
async-lock = { version = "2.6.0", optional = true }
async-broadcast = "0.5.0"
async-executor = { version = "1.5.0", optional = true }
blocking = { version = "1.0.2", optional = true }
async-task = { version = "4.3.0", optional = true }
hex = "0.4.3"
ordered-stream = "0.2"
rand = "0.8.5"
sha1 = { version = "0.10.5", features = ["std"] }
event-listener = "2.5.3"
static_assertions = "1.1.0"
async-recursion = "1.0.0"
async-trait = "0.1.58"
async-fs = { version = "1.6.0", optional = true }
# FIXME: We should only enable process feature for Mac OS. See comment on async-process below for why we can't.
tokio = { version = "1.21.2", optional = true, features = ["rt", "net", "time", "fs", "io-util", "process", "sync", "tracing"] }
tracing = "0.1.37"
vsock = { version = "0.3.0", optional = true }
tokio-vsock = { version = "0.3.3", optional = true }
quick-xml = { version = "0.27.1", features = ["serialize", "overlapped-lists"], optional = true }
xdg-home = "1.0.0"

[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3", features = [
  "handleapi",
  "iphlpapi",
  "memoryapi",
  "processthreadsapi",
  "sddl",
  "securitybaseapi",
  "synchapi",
  "tcpmib",
  "winbase",
  "winerror",
  "winsock2",
] }
uds_windows = "1.0.2"

[target.'cfg(unix)'.dependencies]
nix = { version = "0.26.0", default-features = false, features = ["socket", "uio"] }

[target.'cfg(target_os = "macos")'.dependencies]
# FIXME: This should only be enabled if async-io feature is enabled but currently
# Cargo doesn't provide a way to do that for only specific target OS: https://github.com/rust-lang/cargo/issues/1197.
async-process = "1.7.0"

[dev-dependencies]
doc-comment = "0.3.3"
futures-util = "0.3.25" # activate default features
ntest = "0.9.0"
test-log = { version = "0.2.11", features = ["trace"], default-features = false }
tokio = { version = "1", features = ["macros", "rt-multi-thread", "fs", "io-util", "net", "sync"] }
async-std = { version = "1.12.0", features = ["attributes" ] }
tracing-subscriber = { version = "0.3.16", features = ["env-filter" , "fmt", "ansi"], default-features = false }
tempfile = "3.3.0"

[package.metadata.docs.rs]
all-features = true
targets = ["x86_64-unknown-linux-gnu"]
