
[workspace]
resolver = "2"
members = [
    "botapp",
    "botdevice",
    "botlib",
    "botserver",
    "bottest",
    "botui",
]

[workspace.lints.rust]

[workspace.lints.clippy]

# ═══════════════════════════════════════════════════════════════════════════════
# WORKSPACE DEPENDENCIES - Single source of truth for all member crates
# Member crates reference these with: dependency = { workspace = true }
# ═══════════════════════════════════════════════════════════════════════════════

[workspace.dependencies]
# ─── INTERNAL CRATES ───
botlib = { path = "botlib" }

# ─── CORE / ERROR HANDLING ───
anyhow = "1.0"
thiserror = "2.0"
log = "0.4"
env_logger = "0.11"
color-eyre = "0.6.5"

# ─── ASYNC RUNTIME ───
tokio = { version = "1.41", default-features = false }
tokio-stream = "0.1"
tokio-util = { version = "0.7", default-features = false }
tokio-rustls = "0.26"
tokio-test = "0.4"
tokio-tungstenite = { version = "0.24", default-features = false }
async-trait = "0.1"
async-lock = "2.8.0"
async-stream = "0.3"
futures = "0.3"
futures-util = { version = "0.3", default-features = false }
scopeguard = "1.2.0"

# ─── SERIALIZATION ───
serde = { version = "1.0", default-features = false }
serde_json = "1.0"
toml = "0.8"
ciborium = "0.2"

# ─── DATE / TIME ───
chrono = { version = "0.4", default-features = false }
time = { version = "0.3", default-features = false }
cron = "0.15.0"

# ─── UUID ───
uuid = { version = "1.11", default-features = false }

# ─── WEB FRAMEWORK ───
axum = { version = "0.7.5", features = ["ws", "multipart", "macros"] }
axum-server = { version = "0.8", features = ["tls-rustls"] }
tower = "0.4"
tower-http = { version = "0.6", default-features = false }
tower-cookies = "0.10"
hyper = { version = "1.4", default-features = false }
hyper-rustls = { version = "0.27", default-features = false }
hyper-util = { version = "0.1.19", default-features = false }
http-body-util = "0.1.3"

# ─── HTTP CLIENT ───
reqwest = { version = "0.12", default-features = false }

# ─── DATABASE ───
diesel = { version = "2.2" }
diesel_migrations = "2.2"

# ─── CACHING ───
redis = { version = "0.27", default-features = false }

# ─── SECURITY / CRYPTO ───
jsonwebtoken = "9.3"
base64 = "0.22"
aes-gcm = "0.10"
argon2 = "0.5"
hmac = "0.12.1"
sha2 = "0.10.9"
sha1 = "0.10.6"
hex = "0.4"
rand = "0.9.2"
ring = "0.17"

# ─── TLS / CERTIFICATES ───
rustls = { version = "0.23", default-features = false }
rcgen = { version = "0.14", default-features = false }
x509-parser = "0.15"
rustls-native-certs = "0.8"
webpki-roots = "0.25"
native-tls = "0.2"

# ─── REGEX / TEXT ───
regex = "1.11"
smartstring = "1.0.1"
urlencoding = "2.1"
url = "2.5"

# ─── FILESYSTEM ───
dirs = "5.0"
tempfile = "3"
walkdir = "2.5.0"
notify = "8.0"

# ─── COMPRESSION / ARCHIVES ───
flate2 = "1.0"
zip = "2.2"
tar = "0.4"

# ─── DOCUMENT PROCESSING ───
docx-rs = "0.4"
ooxmlsdk = { version = "0.3", default-features = false }
calamine = "0.26"
spreadsheet-ods = "1.0"
pdf-extract = "0.10.0"
quick-xml = { version = "0.37", features = ["serialize"] }
rust_xlsxwriter = "0.77"
umya-spreadsheet = "2.1"

# ─── IMAGE / MEDIA ───
png = "0.18"
qrcode = { version = "0.14", default-features = false }

# ─── EMAIL ───
imap = "3.0.0-alpha.15"
lettre = { version = "0.11", features = ["smtp-transport", "builder"] }
mailparse = "0.15"

# ─── CONFIGURATION ───
dotenvy = "0.15"
figment = { version = "0.10", default-features = false }
once_cell = "1.18.0"

# ─── TRACING / LOGGING ───
tracing = "0.1"
tracing-subscriber = { version = "0.3", default-features = false }

# ─── NUMERIC ───
num-format = "0.4"
bigdecimal = { version = "0.4", features = ["serde"] }

# ─── UTILITIES ───
bytes = "1.8"

# ─── CLOUD / AWS ───
aws-config = { version = "1.8.8", default-features = false }
aws-sdk-s3 = { version = "1.120", default-features = false }
aws-smithy-async = { version = "1.2", features = ["rt-tokio"] }

# ─── SCRIPTING ───
rhai = { version = "1.23", features = ["sync"] }

# ─── VECTOR DB ───
qdrant-client = "1.16"

# ─── VIDEO / MEETINGS ───
livekit = "0.7"

# ─── SYSTEM MONITORING ───
sysinfo = "0.37.2"

# ─── CONSOLE / TUI ───
crossterm = "0.29.0"
ratatui = "0.30"
indicatif = "0.18.0"

# ─── MEMORY ALLOCATOR ───
tikv-jemallocator = "0.6"
tikv-jemalloc-ctl = { version = "0.6", default-features = false, features = ["stats"] }

# ─── SECRETS / VAULT ───
vaultrs = "0.7"

# ─── CALENDAR / RSS ───
icalendar = "0.17"
rss = "2.0"

# ─── WEB SCRAPING ───
scraper = "0.25"

# ─── RATE LIMITING ───
governor = "0.10"

# ─── CSV ───
csv = "1.3"

# ─── GRPC ───
tonic = { version = "0.14.2", default-features = false }

# ─── STATIC FILES ───
rust-embed = { version = "8.5", features = ["interpolate-folder-path"] }
mime_guess = "2.0"

# ─── TAURI (Desktop/Mobile) ───
tauri = { version = "2", features = ["unstable"] }
tauri-build = "2"
tauri-plugin-dialog = "2"
tauri-plugin-opener = "2"
tauri-plugin-notification = "2"
tauri-plugin-http = "2"
tauri-plugin-geolocation = "2"

# ─── TESTING ───
mockito = "1.7.0"
wiremock = "0.6"
cookie = "0.18"
chromiumoxide = { version = "0.7", features = ["tokio-runtime"], default-features = false }
pretty_assertions = "1.4"
insta = { version = "1.40", features = ["json", "yaml"] }

# ─── PROCESS CONTROL ───
nix = { version = "0.29", features = ["signal", "process"] }
which = "7"

# ─── ANDROID ───
android_logger = "0.14"

# ─── VALIDATOR ───
validator = { version = "0.20", features = ["derive"] }

# ─── MISC ───
webbrowser = "0.8"
hostname = "0.4"
local-ip-address = "0.6.5"
image = "0.25"
libc = "0.2"

trayicon = "0.2"

# ═══════════════════════════════════════════════════════════════════════════════
# PROFILES
# ═══════════════════════════════════════════════════════════════════════════════

[profile.release]
lto = true
opt-level = "z"
strip = true
panic = "abort"
codegen-units = 1

[profile.ci]
inherits = "release"
lto = false
codegen-units = 8
debug = false

[profile.low-memory]
inherits = "release"
lto = "thin"
codegen-units = 16
debug = false
incremental = false
opt-level = "s"

[profile.dev]
debug = 1
incremental = true
codegen-units = 32
opt-level = 0
