Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
94 lines (88 loc) · 4.04 KB
/
Copy pathCargo.toml
File metadata and controls
94 lines (88 loc) · 4.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# Wickra X-Ray — workspace.
# A market-microstructure explorer built as one data-driven core (`wickra-xray-core`):
# a serde `XraySpec` is folded over a recorded dataset (trades, book diffs,
# funding/OI) into render data-models (`XrayFrame` — footprint, order-book
# heatmap, liquidation map, funding/OI divergence), never renderer commands. The
# core is exposed as a JSON-over-C-ABI data API in ten languages, mirroring the
# Wickra tiering: Rust core -> native Python/Node/WASM + a C ABI hub for
# C/C++/C#/Go/Java/R; a `web/` Vue front-end renders the same frames.
#
# The `members` list grows as crates are added, phase by phase; the final set is:
# crates/wickra-xray-core, crates/xray-cli, crates/wickra-xray-bench,
# bindings/c, bindings/python, bindings/node, bindings/wasm
# (`web/` is not a workspace member — it is an npm project.)
[workspace]
resolver = "2"
members = ["crates/wickra-xray-core", "crates/xray-cli", "crates/wickra-xray-bench", "bindings/c", "bindings/python", "bindings/node", "bindings/wasm", "examples/rust"]
# The fuzz crate is its own (detached) workspace — cargo-fuzz builds it on a
# nightly toolchain with sanitizer flags.
exclude = ["fuzz"]
[workspace.package]
version = "0.2.1"
edition = "2021"
rust-version = "1.87"
license = "MIT OR Apache-2.0"
authors = ["wickra-lib"]
repository = "https://github.com/wickra-lib/wickra-xray"
homepage = "https://wickra.org"
readme = "README.md"
keywords = ["trading", "microstructure", "orderbook", "footprint", "finance"]
categories = ["finance", "visualization", "command-line-utilities"]
[workspace.dependencies]
# Wickra ecosystem, all of it from crates.io, pinned exactly like every sibling.
# The exchange facade is used only by the optional `live` feature. It was
# consumed from git until its first crates.io release; that release is out, and
# a git source would have meant `cargo publish` resolving a different crate than
# the one that was tested.
#
# There are no `wickra-core` / `wickra-data` entries here on purpose: the panels
# are pure aggregations of the dataset streams and resolve no indicator by name,
# so nothing in this workspace depends on either crate directly. The copy in
# Cargo.lock arrives transitively through `wickra-exchange-core`, which pins
# it; a declaration here would not move that pin and could only put two
# `wickra-core` majors in one graph the moment a member used one.
wickra-exchange = "=0.2.1"
# Workspace-internal crate, referenced by the CLI, bench and bindings.
wickra-xray-core = { version = "0.2.1", path = "crates/wickra-xray-core" }
# Serialization — the data-driven boundary (spec/command/frame as JSON).
serde = { version = "1", features = ["derive"] }
serde_json = "1"
toml = "1.1"
# Exact decimal arithmetic where price/qty precision matters.
rust_decimal = { version = "1", features = ["serde"] }
thiserror = "2"
# Data-parallel fold across the dataset.
rayon = "1"
clap = { version = "4", features = ["derive"] }
# C ABI header generation.
cbindgen = "0.27"
# Test/dev.
# `criterion` is an alias for codspeed-criterion-compat so the same bench
# source runs under CodSpeed instrumentation (codspeed.yml) and as a plain
# criterion bench (bench.yml). Without the alias the CodSpeed job runs,
# reports nothing and passes.
criterion = { package = "codspeed-criterion-compat", version = "5.0.1", features = ["html_reports"] }
proptest = "1"
[workspace.lints.rust]
# The core and all bindings are safe Rust; the C ABI hub re-allows unsafe
# locally (it must call across the FFI boundary).
unsafe_code = "forbid"
[workspace.lints.clippy]
all = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
# Allowed pedantic lints (same precedent as the wickra core).
cast_precision_loss = "allow"
cast_sign_loss = "allow"
cast_possible_truncation = "allow"
module_name_repetitions = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
must_use_candidate = "allow"
too_many_lines = "allow"
similar_names = "allow"
[profile.release]
# Panics must never unwind across the C ABI boundary: abort instead.
lto = true
codegen-units = 1
panic = "abort"
strip = true