[workspace]
resolver = "2"
members = [
    "crates/shared",
    "crates/autopilot",
    "crates/mavlink_layer",
    "crates/mission_client",
    "crates/frame_ingest",
    "crates/detection_client",
    "crates/movement_detector",
    "crates/semantic_analyzer",
    "crates/vlm_client",
    "crates/scan_controller",
    "crates/mapobjects_store",
    "crates/gimbal_controller",
    "crates/operator_bridge",
    "crates/mission_executor",
    "crates/telemetry_stream",
]

[workspace.package]
edition = "2021"
rust-version = "1.82"
license = "Proprietary"
publish = false
authors = ["AZAION autopilot team"]

[workspace.dependencies]
# Async runtime
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "io-util", "net", "signal"] }

# Foundational
bytes = "1"
anyhow = "1"
thiserror = "1"
async-trait = "0.1"
once_cell = "1"

# Serialisation
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "0.8"

# IDs and time
uuid = { version = "1", features = ["v4", "serde"] }
chrono = { version = "0.4", default-features = false, features = ["clock", "serde"] }

# Observability
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json", "fmt"] }

# CLI
clap = { version = "4", features = ["derive", "env"] }

# Health server
axum = { version = "0.7", default-features = false, features = ["http1", "json", "tokio"] }
tower = "0.5"
hyper = { version = "1", features = ["server", "http1"] }

# Workspace-internal
shared = { path = "crates/shared" }
mavlink_layer = { path = "crates/mavlink_layer" }
mission_client = { path = "crates/mission_client" }
frame_ingest = { path = "crates/frame_ingest" }
detection_client = { path = "crates/detection_client" }
movement_detector = { path = "crates/movement_detector" }
semantic_analyzer = { path = "crates/semantic_analyzer" }
vlm_client = { path = "crates/vlm_client" }
scan_controller = { path = "crates/scan_controller" }
mapobjects_store = { path = "crates/mapobjects_store" }
gimbal_controller = { path = "crates/gimbal_controller" }
operator_bridge = { path = "crates/operator_bridge" }
mission_executor = { path = "crates/mission_executor" }
telemetry_stream = { path = "crates/telemetry_stream" }

[profile.release]
lto = "thin"
codegen-units = 1
strip = "symbols"
opt-level = 3

[profile.dev]
opt-level = 0
debug = true
