optionchain_simulator 0.2.21

OptionChain-Simulator is a lightweight REST API service that simulates an evolving option chain with every request. It is designed for developers building or testing trading systems, backtesters, and visual tools that depend on option data streams but want to avoid relying on live data feeds.
[package]
name = "optionchain_simulator"
version = "0.2.21"
edition = "2024"
# The maximum `rust-version` across the RESOLVED graph, not the highest direct
# dependency: clickhouse 0.15.1, nalgebra 0.35, statrs 0.19.1 and wide 1.7 all
# require 1.89, so declaring 1.88 would fail inside a dependency instead of
# saying clearly that this crate needs a newer toolchain. Re-derive it after a
# bump with `cargo metadata` over the resolved packages' rust_version.
rust-version = "1.89"
authors = ["Joaquin Bejar <jb@taunais.com>"]
description = "OptionChain-Simulator is a lightweight REST API service that simulates an evolving option chain with every request. It is designed for developers building or testing trading systems, backtesters, and visual tools that depend on option data streams but want to avoid relying on live data feeds."
license = "MIT"
readme = "README.md"
repository = "https://github.com/joaquinbejar/OptionChain-Simulator"
homepage = "https://github.com/joaquinbejar/OptionChain-Simulator"
keywords = ["finance", "options", "trading"]
categories = ["finance", "data-structures"]

[features]
# The Arrow IPC export encoding. Off by default; see `arrow` in
# [workspace.dependencies]. `cargo test --all-features` covers it, and CI's lint
# job builds with it.
arrow-export = ["dep:arrow"]

[dependencies]
arrow = { workspace = true, optional = true }
optionstratlib = { workspace = true }
positive = { workspace = true }
tracing = { workspace = true }
rust_decimal = { workspace = true }
rust_decimal_macros = { workspace = true }
serde_json = { workspace = true }
serde = { workspace = true }
uuid = { workspace = true }
chrono = { workspace = true }
chrono-tz = { workspace = true }
clickhouse = { workspace = true }
csv = { workspace = true }
tokio = { workspace = true }
async-trait = { workspace = true }
actix-web = { workspace = true }
redis = { workspace = true }
utoipa = { workspace = true }
utoipa-swagger-ui = { workspace = true }
rand = { workspace = true }
rand_distr = { workspace = true }
prometheus = { workspace = true }
futures = { workspace = true }
mongodb = { workspace = true }

[dev-dependencies]
mockall = { workspace = true }
tempfile = { workspace = true }
once_cell = { workspace = true }
tokio = { workspace = true, features = ["test-util"] }

[workspace]
members = [
    "examples/session",
    "examples/clickhouse",
    "examples/integration",
]

[workspace.dependencies]
optionchain_simulator = { path = "." }
optionstratlib = "0.21"
positive = "0.6"
tracing = "0.1"
rust_decimal = { version = "1.42", features = ["maths", "serde"] }
rust_decimal_macros = "1.40"
serde_json = "1.0"
serde = "1.0"
uuid = { version = "1.26", features = ["v4", "v5", "serde"] }
chrono = { version = "0.4", features = ["serde"] }
# IANA timezone database for the v2 rolling-expiry calendar: the local
# expiration cutoff and its DST fold/gap resolution (ADR 0001, issue #43)
chrono-tz = { version = "0.10", features = ["serde"] }
# RFC 4180 quoting and escaping for the v2 backtest exports, streaming into a
# Write sink so a multi-year download stays bounded-memory (ADR 0001, issue #49)
csv = "1.4"
clickhouse = "0.15"
tokio = { version = "1.53", features = ["full"] }
async-trait = "0.1"
actix-web = { version = "4.15", features = ["rustls"] }
redis = { version = "1.6", features = ["tokio-comp", "connection-manager"] }
# actix_extras is unavailable: optionstratlib enables utoipa/axum_extras,
# and utoipa's framework extras are mutually exclusive
utoipa = "5.5"
utoipa-swagger-ui = { version = "9.0", features = ["actix-web"] }
rand = "0.10"
rand_distr = "0.6"
prometheus = "0.14"
futures = "0.3"
mongodb = "3.8"
mockall = "0.15"
tempfile = "3.27"
once_cell = "1.21"
# Apache Arrow, for the `arrow` export encoding (issue #78). OPTIONAL and off by
# default: it is a large tree, and a deployment that never exports — or a
# crates.io consumer using this as a library — must not pay for it.
# `default-features = false` and the version match IronCondor, which consumes
# the stream and writes Parquet.
arrow = { version = "59.2", default-features = false, features = ["ipc"] }