composerize

Function composerize 

Source
pub fn composerize(
    input: &str,
    _existing_compose: &str,
    format: &str,
    _indent: usize,
) -> Result<String, String>
Examples found in repository?
examples/batch_processing.rs (line 17)
5fn main() {
6    // Multiple docker commands to convert
7    let commands = vec![
8        ("nginx", "docker run -d -p 80:80 nginx"),
9        ("redis", "docker run -d -p 6379:6379 redis:alpine"),
10        ("postgres", "docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret postgres:14"),
11        ("mongodb", "docker run -d -p 27017:27017 -v mongo-data:/data/db mongo:latest"),
12    ];
13
14    println!("Converting {} docker commands...\n", commands.len());
15
16    for (name, command) in commands {
17        match composerize(command, "", "latest", 2) {
18            Ok(yaml) => {
19                let filename = format!("docker-compose-{}.yml", name);
20                
21                // Save to file
22                if let Err(e) = fs::write(&filename, &yaml) {
23                    eprintln!("Failed to write {}: {}", filename, e);
24                } else {
25                    println!("✓ Created: {}", filename);
26                }
27            }
28            Err(e) => {
29                eprintln!("✗ Failed to convert {}: {}", name, e);
30            }
31        }
32    }
33
34    println!("\nDone! Check the generated docker-compose-*.yml files.");
35}
More examples
Hide additional examples
examples/basic_usage.rs (line 8)
4fn main() {
5    // Example 1: Convert docker run to YAML
6    let docker_command = "docker run -d -p 80:80 --name web nginx:alpine";
7    
8    match composerize(docker_command, "", "latest", 2) {
9        Ok(yaml) => {
10            println!("=== YAML Output ===");
11            println!("{}", yaml);
12        }
13        Err(e) => eprintln!("Error: {}", e),
14    }
15
16    println!("\n{}\n", "=".repeat(50));
17
18    // Example 2: Convert docker run to JSON
19    let docker_command = "docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret mysql:8";
20    
21    match composerize_to_json(docker_command, "", "latest", 2) {
22        Ok(json) => {
23            println!("=== JSON Output ===");
24            println!("{}", json);
25        }
26        Err(e) => eprintln!("Error: {}", e),
27    }
28
29    println!("\n{}\n", "=".repeat(50));
30
31    // Example 3: Complex command with volumes and networks
32    let docker_command = "docker run -d \
33        --name ml-service \
34        --network ml-net \
35        -v ml-models:/models \
36        -v ml-cache:/cache \
37        -p 5000:5000 \
38        -e MODEL_PATH=/models \
39        tensorflow/tensorflow:latest-gpu";
40    
41    match composerize(docker_command, "", "v3x", 2) {
42        Ok(yaml) => {
43            println!("=== Complex Example (v3x) ===");
44            println!("{}", yaml);
45        }
46        Err(e) => eprintln!("Error: {}", e),
47    }
48}
examples/advanced_usage.rs (line 25)
4fn main() {
5    // Example: Process command and extract service name
6    let docker_command = "docker run -d -p 8080:80 --name my-app nginx:alpine";
7    
8    // Extract service name from image
9    let image = "nginx:alpine";
10    let service_name = get_service_name(image);
11    println!("Service name extracted: {}", service_name);
12    
13    println!("\n{}\n", "=".repeat(50));
14    
15    // Convert with different formats
16    let formats = vec![
17        ("latest", "Latest (no version)"),
18        ("v3x", "Docker Compose v3.x"),
19        ("v2x", "Docker Compose v2.x"),
20    ];
21    
22    for (format, description) in formats {
23        println!("=== {} ===", description);
24        
25        match composerize(docker_command, "", format, 2) {
26            Ok(yaml) => {
27                // Show first few lines
28                let lines: Vec<&str> = yaml.lines().take(5).collect();
29                println!("{}", lines.join("\n"));
30                println!("...\n");
31            }
32            Err(e) => eprintln!("Error: {}", e),
33        }
34    }
35    
36    println!("{}\n", "=".repeat(50));
37    
38    // Example: Different indentation levels
39    println!("=== Different Indentation ===");
40    
41    for indent in [2, 4] {
42        println!("\nIndent: {} spaces", indent);
43        match composerize("docker run -p 80:80 nginx", "", "latest", indent) {
44            Ok(yaml) => {
45                let lines: Vec<&str> = yaml.lines().take(4).collect();
46                println!("{}", lines.join("\n"));
47            }
48            Err(e) => eprintln!("Error: {}", e),
49        }
50    }
51}
examples/error_handling.rs (line 9)
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}