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
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}