[package]
name = "mobench"
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
authors = ["Dominik Clemente - dcbuilder.eth <dc@world.org>"]
description = "Rust mobile benchmark CLI with CI contract outputs and BrowserStack automation"
repository = "https://github.com/worldcoin/mobile-bench-rs"
documentation = "https://docs.rs/mobench"
readme = "README.md"
keywords = ["benchmark", "mobile", "android", "ios", "performance"]
categories = ["development-tools", "command-line-utilities"]
exclude = ["artifacts/**"]

[badges]
maintenance = { status = "actively-developed" }

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]
# Build on default target for docs.rs
targets = ["x86_64-unknown-linux-gnu"]

default-run = "mobench"

[features]
bench-support = []

# Dual binary targets allow the tool to work as both:
# - `mobench run ...` (direct invocation)
# - `cargo mobench run ...` (cargo subcommand)
# This is a standard Rust pattern for cargo extensions.
[[bin]]
name = "mobench"
path = "src/main.rs"

[[bin]]
name = "cargo-mobench"
path = "src/bin/cargo-mobench.rs"

[dependencies]
anyhow.workspace = true
mobench-sdk = { workspace = true, features = ["full"] }
clap.workspace = true
serde.workspace = true
serde_json.workspace = true
serde_yaml.workspace = true
toml.workspace = true
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "blocking", "json", "multipart"] }
dotenvy = "0.15"
time.workspace = true
sha2 = "0.10"
comfy-table = "7"
tempfile = "3"
inferno = { version = "0.12", default-features = false }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }

[dev-dependencies]
criterion = "0.5"
inventory = "0.3"
sample-fns = { path = "../sample-fns" }
jsonschema = "0.18"
proptest = "1"

[[bench]]
name = "host_contracts"
harness = false
required-features = ["bench-support"]
