use kestrel_chartkit::applicability::{data_requirements, rule_catalog, DataRequirements};
use kestrel_chartkit::indicator::registry::CANONICAL_INDICATOR_NAMES;
const NON_CATALOG_NAMES: &[&str] = &["elliott", "swing_structure"];
fn indicator_json(name: &str, requirements: &DataRequirements) -> String {
format!(
"{{\"name\":\"{}\",\"needs_real_volume\":{},\"needs_trade_direction\":{},\"session_sensitive\":{},\"roll_sensitive\":{},\"adjustment_sensitive\":{},\"needs_liquidity_depth\":{}}}",
name,
requirements.needs_real_volume,
requirements.needs_trade_direction,
requirements.session_sensitive,
requirements.roll_sensitive,
requirements.adjustment_sensitive,
requirements.needs_liquidity_depth,
)
}
fn main() {
let indicators: Vec<String> = CANONICAL_INDICATOR_NAMES
.iter()
.chain(NON_CATALOG_NAMES)
.map(|&name| indicator_json(name, &data_requirements(name)))
.collect();
let rules: Vec<String> = rule_catalog()
.iter()
.map(|rule| {
format!(
"{{\"reason\":\"{:?}\",\"tier\":\"{:?}\",\"explanation\":\"{}\"}}",
rule.reason, rule.tier, rule.explanation
)
})
.collect();
println!(
"{{\"indicators\":[{}],\"rules\":[{}]}}",
indicators.join(","),
rules.join(",")
);
}