Skip to main content

optionstratlib_visualization/visualization/terminal/
mod.rs

1//! Terminal tables for chain and simulation reports.
2//!
3//! The computational crates return structured data and never write to
4//! stdout: an [`OptionChain`](optionstratlib_market::chains::OptionChain)
5//! is market data, and
6//! [`SimulationStats`](optionstratlib_backtest::backtesting::SimulationStats)
7//! and
8//! [`SimulationStatsResult`](optionstratlib_backtest::backtesting::SimulationStatsResult)
9//! are run statistics. This module is the explicit adapter that turns them
10//! into bordered terminal tables, so the terminal-table package is resolved
11//! by the presentation crate alone (M6-05, #546).
12//!
13//! Each report comes in two forms:
14//!
15//! - `render_*` returns the tables as a `String`, in plain text without ANSI
16//!   escapes, ready to log, snapshot or write anywhere.
17//! - `print_*` writes the same tables to stdout, coloured when stdout is a
18//!   terminal. It is the only place in the library that writes to stdout,
19//!   and it does so only when called.
20//!
21//! | Report | Trait | Methods |
22//! | --- | --- | --- |
23//! | option chain | [`ChainReport`](crate::visualization::terminal::ChainReport) | `render_table`, `print_table` |
24//! | simulation statistics | [`SimulationReport`](crate::visualization::terminal::SimulationReport) | `render_summary`, `print_summary`, `render_individual_results`, `print_individual_results` |
25//!
26//! ```rust
27//! use optionstratlib_core::model::Positive;
28//! use optionstratlib_market::chains::OptionChain;
29//! use optionstratlib_visualization::visualization::terminal::ChainReport;
30//!
31//! let chain = OptionChain::new("SPY", Positive::HUNDRED, "2030-01-18".to_string(), None, None);
32//! let table = chain.render_table();
33//! assert!(table.contains("Strike"));
34//! assert!(!table.contains('\u{1b}'));
35//! ```
36
37mod backtest;
38mod chain;
39mod table;
40
41pub use backtest::SimulationReport;
42pub use chain::ChainReport;