error_handling/
error_handling.rs

1/// Example demonstrating error handling
2use composerize_np::composerize;
3
4fn main() {
5    // Example 1: Valid command
6    println!("=== Example 1: Valid Command ===");
7    let valid_command = "docker run -p 80:80 nginx";
8    
9    match composerize(valid_command, "", "latest", 2) {
10        Ok(yaml) => println!("Success!\n{}", yaml),
11        Err(e) => eprintln!("Error: {}", e),
12    }
13
14    println!("\n{}\n", "=".repeat(50));
15
16    // Example 2: Missing image
17    println!("=== Example 2: Missing Image (Error) ===");
18    let invalid_command = "docker run -d -p 80:80";
19    
20    match composerize(invalid_command, "", "latest", 2) {
21        Ok(yaml) => println!("Success!\n{}", yaml),
22        Err(e) => eprintln!("Expected error: {}", e),
23    }
24
25    println!("\n{}\n", "=".repeat(50));
26
27    // Example 3: Invalid format
28    println!("=== Example 3: Invalid Format (Error) ===");
29    let command = "docker run nginx";
30    
31    match composerize(command, "", "invalid-format", 2) {
32        Ok(yaml) => println!("Success!\n{}", yaml),
33        Err(e) => eprintln!("Expected error: {}", e),
34    }
35
36    println!("\n{}\n", "=".repeat(50));
37
38    // Example 4: Proper error handling in production code
39    println!("=== Example 4: Production-style Error Handling ===");
40    
41    fn convert_with_fallback(command: &str) -> String {
42        composerize(command, "", "latest", 2)
43            .unwrap_or_else(|e| {
44                eprintln!("Conversion failed: {}", e);
45                // Return a default compose file
46                "services:\n  default:\n    image: alpine\n".to_string()
47            })
48    }
49    
50    let result = convert_with_fallback("docker run nginx");
51    println!("Result:\n{}", result);
52}