derive-defs 0.0.8

Library for generating derive preset macros from TOML configuration
Documentation
//! Circular dependency detection example.
//!
//! This example demonstrates how derive-defs detects and reports
//! circular inheritance relationships.
//!
//! # Running the example
//!
//! ```bash
//! cargo run --example circular_detection
//! ```

use std::fs;

fn main() {
    println!("Circular Dependency Detection Example");
    println!("======================================");
    println!();

    // Create a TOML configuration with circular dependency
    let config = r#"
[defs.a]
extends = "b"
traits = ["Debug"]

[defs.b]
extends = "c"
traits = ["Clone"]

[defs.c]
extends = "a"
traits = ["PartialEq"]
"#;

    let temp_dir = std::env::temp_dir();
    let config_path = temp_dir.join("derive_defs_circular_example.toml");
    fs::write(&config_path, config).expect("Failed to write config");

    println!("Configuration (with circular dependency):");
    println!("{config}");
    println!();

    // Parse the configuration
    let parsed = derive_defs::parser::parse_file(&config_path).expect("Failed to parse");

    // Try to resolve - this should fail with circular dependency error
    match derive_defs::resolver::resolve(&parsed) {
        Ok(_) => {
            eprintln!("ERROR: Expected circular dependency error, but resolution succeeded!");
            std::process::exit(1);
        }
        Err(e) => {
            println!("Expected error caught:");
            println!("  {e}");
            println!();
            println!("This demonstrates that derive-defs correctly detects");
            println!("circular inheritance and provides a helpful error message.");
        }
    }

    // Cleanup
    let _ = fs::remove_file(&config_path);
}