[package]
name = "uniffi-russh"
version = "0.1.0"
edition = "2021"

# ──────────────────────────────────────────────────────────────────────────────
# Runtime + FFI + SSH deps
# ──────────────────────────────────────────────────────────────────────────────
[dependencies]
# UniFFI runtime (from your workspace). The `tokio` feature enables
# the `#[uniffi::export(async_runtime = "tokio")]` path so async Rust fns
# surface as Promises on the JS side.
uniffi = { workspace = true, features = ["tokio"] }

# Lightweight error enum derive for FFI-safe error reporting.
thiserror = "1.0.64"

# Tokio async runtime + IO bits. We use:
# - rt-multi-thread : multithreaded scheduler
# - macros          : attribute macros (if you ever need #[tokio::test], etc.)
# - time            : timers/sleeps
# - net             : sockets; russh uses this
# - sync            : async Mutex, channels, etc.
# - io-util         : AsyncRead/Write extension traits (write_all/flush)
tokio = { version = "1.47.1", features = ["rt-multi-thread", "macros", "time", "net", "sync", "io-util"] }

# Common async ecosystem utilities (not strictly required by our code, but
# frequently useful and pulled in by transitive deps).
bytes = "1.10.1"
futures = "0.3.31"

# SSH client and keys. `russh` is the client; `russh-keys` handles key types,
# generation, and OpenSSH (PEM) encoding/decoding.
# By default russh pulls in aws-lc which requires CMake toolchain. 'ring' is a rust based alternative.
# 'flate2' is a compression library.
# 'rsa' is a RSA encryption library.
russh = { version = "0.54.3", default-features = false, features = ["ring", "flate2", "rsa"] }
russh-keys = "0.49.2"

# Secure RNG for key generation (OsRng).
rand = "0.8"

# Handy but currently optional; you can remove it if unused.
once_cell = "1.21.3"

# Optional helper for async trait impls; safe to keep even if unused.
async-trait = "0.1"

# ──────────────────────────────────────────────────────────────────────────────
# Build-time codegen for UniFFI
# ──────────────────────────────────────────────────────────────────────────────
[build-dependencies]
# UniFFI build helper to generate bindings at compile time.
uniffi = { workspace = true, features = ["build"] }

# ──────────────────────────────────────────────────────────────────────────────
# Library outputs
# ──────────────────────────────────────────────────────────────────────────────
[lib]
# - cdylib   : C-compatible dynamic library (Android/iOS; what RN/JSI loads)
# - staticlib: Static archive (useful for iOS static linking)
# - lib      : Normal Rust rlib (unit tests, internal usage)
crate-type = ["cdylib", "staticlib", "lib"]
