[package]
name = "harmos-runtime"
description = "Harmos runtime: managed state, undo, recovery, background work and typed streams."
edition.workspace = true
rust-version.workspace = true
license.workspace = true
publish.workspace = true
autotests = false
version = { workspace = true }
[[bin]]
name = "harmos-stream-consumer-fixture"
path = "tests/fixtures/stream_consumer.rs"
required-features = ["plugin-sidecar"]
test = false
bench = false
[features]
default = []
plugin = ["dep:petgraph", "dep:semver", "semver/serde", "dep:harmos-packaging"]
plugin-sidecar = ["plugin", "dep:harmos-sidecar", "harmos-sidecar/kit", "harmos-sidecar/derive", "tokio/io-util", "tokio/process"]
plugin-guest = ["plugin", "dep:harmos-guest", "harmos-guest/kit", "harmos-guest/derive", "dep:wasmtime"]
grpc = [
"harmos-sdk/grpc",
"generate-proto",
"dep:tonic-reflection",
"dep:http-body",
"dep:heck",
"dep:bytes",
"dep:tonic",
"dep:prost-reflect",
"dep:tonic-web",
"dep:tower",
"dep:tower-http",
"tonic/tls-ring",
]
generate-proto = ["dep:harmos-packaging", "harmos-packaging/generate-proto"]
signal = []
signal-fft = ["signal", "harmos-storage/fft"]
simulation = ["tokio/test-util"]
[dependencies]
harmos-domain = { workspace = true, features = ["derive"] }
harmos-guest = { workspace = true, optional = true }
harmos-macros = { workspace = true, default-features = true }
harmos-packaging = { workspace = true, optional = true }
harmos-sdk = { workspace = true, features = ["streaming"] }
harmos-storage = { workspace = true }
thiserror = { workspace = true, default-features = true }
tracing = { workspace = true, default-features = true }
bytes = { workspace = true, optional = true }
getrandom = { workspace = true, features = ["std", "wasm_js"] }
heck = { workspace = true, optional = true }
petgraph = { workspace = true, default-features = true, optional = true }
semver = { workspace = true, default-features = true, optional = true }
sha2 = { workspace = true, default-features = true }
prost-reflect = { workspace = true, optional = true, features = ["serde"] }
serde = { workspace = true, default-features = true }
serde_json = { workspace = true, default-features = true, features = ["raw_value"] }
tempfile = { workspace = true, default-features = true }
futures-core = { workspace = true, default-features = true }
futures-util = { workspace = true }
tokio = { workspace = true, default-features = true, features = ["rt", "sync", "time", "macros"] }
http-body = { workspace = true, optional = true }
tonic = { workspace = true, default-features = true, optional = true }
tonic-reflection = { workspace = true, features = ["server"], optional = true }
tonic-web = { workspace = true, optional = true }
tower = { workspace = true, optional = true }
tower-http = { workspace = true, optional = true }
[dev-dependencies]
harmos-packaging = { path = "../harmos-packaging", default-features = false, features = ["generate-proto"] }
harmos-sdk = { path = "../harmos-sdk", default-features = false, features = ["grpc"] }
schematic-domain = { path = "../../examples/schematic/domain" }
tracing-subscriber = { workspace = true }
arrow-array = { workspace = true }
arrow-buffer = { workspace = true }
arrow-data = { workspace = true }
arrow-ipc = { workspace = true }
arrow-schema = { workspace = true }
arrow-select = { workspace = true }
base64 = { workspace = true }
flatbuffers = { workspace = true }
protoc-bin-vendored = { workspace = true }
tar = { workspace = true }
tempfile = { workspace = true, default-features = true }
syn = { workspace = true, default-features = true, features = ["visit"] }
futures-util = { workspace = true, features = ["async-await-macro"] }
tokio = { workspace = true, default-features = true, features = [
"io-util",
"macros",
"process",
"rt",
"rt-multi-thread",
"test-util",
"time",
] }
http-body-util = { workspace = true }
criterion = { workspace = true, default-features = false }
[target.'cfg(windows)'.dependencies]
windows-sys = { workspace = true, features = ["Win32_Storage_FileSystem", "Win32_System_WindowsProgramming"] }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
harmos-sidecar = { workspace = true, optional = true }
wasmtime = { workspace = true, optional = true }
tokio = { workspace = true, default-features = true, features = ["rt-multi-thread"] }
[[test]]
name = "integration"
path = "tests/integration/main.rs"
[[test]]
name = "acceptance"
path = "tests/acceptance/main.rs"
[[test]]
name = "system"
path = "tests/system/main.rs"
[[bench]]
name = "integration-runtime"
path = "benches/runtime/main.rs"
harness = false
[[bench]]
name = "integration-operations"
path = "benches/operations/main.rs"
harness = false
[[bench]]
name = "integration-storage"
path = "benches/storage/main.rs"
harness = false
[[bench]]
name = "integration-streams"
path = "benches/streams/main.rs"
harness = false
[[bench]]
name = "integration-sidecar"
path = "benches/sidecar/main.rs"
harness = false
required-features = ["plugin-sidecar"]
[[bench]]
name = "system-sidecar"
path = "benches/sidecar/system.rs"
harness = false
required-features = ["plugin-sidecar"]
[[bench]]
name = "integration-simulation"
path = "benches/simulation/main.rs"
harness = false
required-features = ["simulation"]
[lints]
workspace = true