use tensorlogic_cli::{conversion, parser};
fn main() -> anyhow::Result<()> {
println!("=== TensorLogic Library Mode - Format Conversion Example ===\n");
println!("1. Original expression:");
let expression = "EXISTS x IN Person. (knows(x, Alice) AND (smart(x) OR creative(x)))";
println!(" {}\n", expression);
let expr = parser::parse_expression(expression)?;
println!("2. Compact format:");
let compact = conversion::format_expression(&expr, false);
println!(" {}\n", compact);
println!("3. Pretty format:");
let pretty = conversion::format_expression(&expr, true);
println!("{}\n", pretty);
println!("4. JSON serialization:");
let json = serde_json::to_string_pretty(&expr)?;
println!("{}\n", json);
println!("5. YAML serialization:");
let yaml = serde_yaml::to_string(&expr)?;
println!("{}", yaml);
println!("6. Round-trip conversion test:");
println!(" Original -> JSON -> Expression -> Pretty");
let json_str = serde_json::to_string(&expr)?;
println!(" ✓ Serialized to JSON ({} bytes)", json_str.len());
let expr_from_json: tensorlogic_cli::TLExpr = serde_json::from_str(&json_str)?;
println!(" ✓ Deserialized from JSON");
let final_pretty = conversion::format_expression(&expr_from_json, true);
println!(" ✓ Formatted:\n{}", final_pretty);
println!("\n7. Formatting different expression types:");
let examples = vec![
("Predicate", "person(Alice, age, 30)"),
("Conjunction", "happy(x) AND healthy(x)"),
("Disjunction", "smart(x) OR creative(x) OR hardworking(x)"),
("Negation", "NOT lazy(x)"),
("Implication", "student(x) -> studies(x)"),
("Quantifier", "FORALL x IN Student. studies(x)"),
("Arithmetic", "age(x) + 5 > 18"),
("Conditional", "IF rich(x) THEN happy(x) ELSE sad(x)"),
];
for (name, expr_str) in examples {
match parser::parse_expression(expr_str) {
Ok(e) => {
let formatted = conversion::format_expression(&e, false);
println!(" {}: {}", name, formatted);
}
Err(e) => {
println!(" {}: Error - {}", name, e);
}
}
}
println!("\n=== Format conversion example completed successfully! ===");
Ok(())
}