use zzstat::context::StatContext;
use zzstat::source::ConstantSource;
use zzstat::stat_id::StatId;
use zzstat::template::StatTemplate;
use zzstat::StatNumeric;
fn main() {
let json_data = r#"{
"name": "Knight Class Core Stats",
"transforms": [
{
"stat": "DEF",
"phase": "additive",
"rule": "additive",
"type": "Additive",
"value": 50.0
},
{
"stat": "DEF",
"phase": "additive",
"rule": "additive",
"type": "Conditional",
"condition": { "operator": "Equals", "key": "STANCE", "value": "DEFENSIVE" },
"transform": { "type": "Additive", "value": 30.0 }
}
]
}"#;
let template: StatTemplate = serde_json::from_str(json_data).unwrap();
let mut resolver = template.build_resolver().unwrap();
let def_id = StatId::from("DEF");
resolver.register_source(def_id.clone(), Box::new(ConstantSource(0.0)));
println!("--- JSON Template Loaded ---");
println!("Template Name: {}\n", template.name);
let mut ctx_normal = StatContext::new();
ctx_normal.set("STANCE", "NORMAL");
let def_normal = resolver.resolve(&def_id, &ctx_normal).unwrap();
println!("DEF in NORMAL stance: {}", def_normal.value.to_f64());
let mut ctx_defensive = StatContext::new();
ctx_defensive.set("STANCE", "DEFENSIVE");
resolver.invalidate_all();
let def_defensive = resolver.resolve(&def_id, &ctx_defensive).unwrap();
println!("DEF in DEFENSIVE stance: {}", def_defensive.value.to_f64()); }