error_chain/
error_chain.rs

1use ascii_dag::graph::DAG;
2
3fn main() {
4    println!("=== Error Chain Visualization ===\n");
5
6    // Simulate an error dependency chain
7    // FileNotFound -> ParseError -> CompilationFailed -> BuildFailed
8
9    let mut dag = DAG::new();
10
11    dag.add_node(1, "FileNotFound");
12    dag.add_node(2, "ParseError");
13    dag.add_node(3, "CompilationFailed");
14    dag.add_node(4, "BuildFailed");
15
16    dag.add_edge(1, 2); // FileNotFound caused ParseError
17    dag.add_edge(2, 3); // ParseError caused CompilationFailed
18    dag.add_edge(3, 4); // CompilationFailed caused BuildFailed
19
20    println!("Error Dependency Chain:");
21    println!("{}", dag.render());
22
23    // More complex error scenario
24    println!("\n=== Complex Error Scenario ===\n");
25
26    let dag = DAG::from_edges(
27        &[
28            (1, "ConfigMissing"),
29            (2, "DBConnFail"),
30            (3, "AuthFail"),
31            (4, "InitError"),
32            (5, "StartupFail"),
33        ],
34        &[
35            (1, 2), // ConfigMissing -> DBConnFail
36            (1, 3), // ConfigMissing -> AuthFail
37            (2, 4), // DBConnFail -> InitError
38            (3, 4), // AuthFail -> InitError
39            (4, 5), // InitError -> StartupFail
40        ],
41    );
42
43    println!("Multiple Error Paths:");
44    println!("{}", dag.render());
45
46    // Check for cycles (should not have any)
47    if dag.has_cycle() {
48        println!("\n⚠️  WARNING: Circular error dependency detected!");
49    } else {
50        println!("\n✓ No circular dependencies");
51    }
52}