[package]
name = "isola"
version.workspace = true
edition.workspace = true
publish = true
license.workspace = true
description = "Isola runtime"
documentation = "https://docs.rs/isola"
homepage.workspace = true
repository.workspace = true

[features]
default = ["serde"]
serde = [
    "dep:base64",
    "dep:minicbor",
    "dep:minicbor-serde",
    "dep:serde",
    "dep:serde-transcode",
    "dep:serde_json",
]

[dependencies]
anyhow = { workspace = true }
async-trait = { workspace = true }
base64 = { workspace = true, optional = true }
bytes = { workspace = true }
futures = { workspace = true }
http = { workspace = true }
http-body = { workspace = true }
http-body-util = { workspace = true }
hyper = { workspace = true }
minicbor = { workspace = true, optional = true }
minicbor-serde = { workspace = true, features = ["alloc"], optional = true }
parking_lot = { workspace = true }
serde = { workspace = true, optional = true }
serde-transcode = { workspace = true, optional = true }
serde_json = { workspace = true, optional = true }
sha2 = { workspace = true }
smallvec = { workspace = true, features = ["const_new"] }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["fs", "time", "macros", "rt", "sync"] }
tokio-stream = { workspace = true }
tracing = { workspace = true }
wasmtime = { workspace = true, features = ["cranelift", "async", "parallel-compilation"] }
wasmtime-wasi = { workspace = true }
wasmtime-wasi-http = { workspace = true }
wasmtime-wizer = { workspace = true, features = ["component-model", "wasmtime"] }

[dev-dependencies]
criterion = { workspace = true }
reqwest = { workspace = true, features = ["http2", "stream", "gzip", "rustls"] }
tempfile = { workspace = true }
wiremock = { workspace = true }

[lints]
workspace = true

[[test]]
name = "integration"
path = "tests/integration.rs"
required-features = ["serde"]

[[bench]]
name = "isola-integration-bench"
path = "benches/integration.rs"
harness = false
required-features = ["serde"]
