| 
							
							
							
						 |  |  | @@ -1,671 +0,0 @@ | 
		
	
		
			
				|  |  |  |  | use rhai::{Engine, Dynamic, Map, Array, EvalAltResult}; | 
		
	
		
			
				|  |  |  |  | use std::process::Command; | 
		
	
		
			
				|  |  |  |  | use crate::herocontainer::buildah::execute_buildah_command; | 
		
	
		
			
				|  |  |  |  | use crate::herocontainer::buildah_build::{build_copy, build_add}; | 
		
	
		
			
				|  |  |  |  | use crate::herocontainer::buildah_images::{image_commit, image_pull, image_tag, image_push, images, config, image_remove}; | 
		
	
		
			
				|  |  |  |  | use crate::herocontainer::engine::create_error_result; | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // Implement functions needed for container operations | 
		
	
		
			
				|  |  |  |  | pub fn from_wrapper(image: &str, name: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     // Implementation of the function to create container from image with name | 
		
	
		
			
				|  |  |  |  |     let result = execute_buildah_command(&["from", "--name", name, image]); | 
		
	
		
			
				|  |  |  |  |     let mut result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to create container from image {} with name {}: {}", image, name, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Extract the container ID from stdout and add it to the result | 
		
	
		
			
				|  |  |  |  |     let stdout = match result_map.get("stdout") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |         None => "".to_string(), | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |     let container_id = stdout.trim(); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     result_map.insert("container_id".into(), Dynamic::from(container_id.to_string())); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     Ok(Dynamic::from(result_map)) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // Single argument version for backward compatibility | 
		
	
		
			
				|  |  |  |  | pub fn from_wrapper_single(image: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     // Implementation of the function to create container from image | 
		
	
		
			
				|  |  |  |  |     let result = execute_buildah_command(&["from", image]); | 
		
	
		
			
				|  |  |  |  |     let mut result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to create container from image {}: {}", image, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Extract the container ID from stdout and add it to the result | 
		
	
		
			
				|  |  |  |  |     let stdout = match result_map.get("stdout") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |         None => "".to_string(), | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |     let container_id = stdout.trim(); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     result_map.insert("container_id".into(), Dynamic::from(container_id.to_string())); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     Ok(Dynamic::from(result_map)) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn run_wrapper(container: &str, command: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = execute_buildah_command(&["run", container, "--", "sh", "-c", command]); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to run command '{}' in container {}: {}", command, container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn run_with_args_wrapper(container: &str, command: &str, args: Array) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     // Create owned strings to avoid lifetime issues | 
		
	
		
			
				|  |  |  |  |     let mut cmd_args_owned: Vec<String> = Vec::new(); | 
		
	
		
			
				|  |  |  |  |     cmd_args_owned.push("run".to_string()); | 
		
	
		
			
				|  |  |  |  |     cmd_args_owned.push(container.to_string()); | 
		
	
		
			
				|  |  |  |  |     cmd_args_owned.push("--".to_string()); | 
		
	
		
			
				|  |  |  |  |     cmd_args_owned.push(command.to_string()); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     for arg in args.iter() { | 
		
	
		
			
				|  |  |  |  |         cmd_args_owned.push(arg.to_string()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Convert to &str for the command | 
		
	
		
			
				|  |  |  |  |     let cmd_args: Vec<&str> = cmd_args_owned.iter().map(|s| s.as_str()).collect(); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let result = execute_buildah_command(&cmd_args); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to run command '{}' with args in container {}: {}", command, container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn run_script_wrapper(container: &str, script: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = execute_buildah_command(&["run", container, "--", "sh", "-c", script]); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to run script in container {}: {}", container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn mount_wrapper(container: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = execute_buildah_command(&["mount", container]); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to mount container {}: {}", container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn build(context_dir: &str, file: Option<&str>, tag: Option<&str>, format: Option<&str>,  | 
		
	
		
			
				|  |  |  |  |               layers: bool, pull: bool, no_cache: bool) -> Dynamic { | 
		
	
		
			
				|  |  |  |  |     let mut args = vec!["build"]; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if let Some(file_path) = file { | 
		
	
		
			
				|  |  |  |  |         args.push("-f"); | 
		
	
		
			
				|  |  |  |  |         args.push(file_path); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if let Some(tag_name) = tag { | 
		
	
		
			
				|  |  |  |  |         args.push("-t"); | 
		
	
		
			
				|  |  |  |  |         args.push(tag_name); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if let Some(format_str) = format { | 
		
	
		
			
				|  |  |  |  |         args.push("--format"); | 
		
	
		
			
				|  |  |  |  |         args.push(format_str); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if layers { | 
		
	
		
			
				|  |  |  |  |         args.push("--layers"); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if pull { | 
		
	
		
			
				|  |  |  |  |         args.push("--pull"); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if no_cache { | 
		
	
		
			
				|  |  |  |  |         args.push("--no-cache"); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     args.push(context_dir); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     execute_buildah_command(&args) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn containers() -> Dynamic { | 
		
	
		
			
				|  |  |  |  |     execute_buildah_command(&["containers", "--format", "json"]) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn rm(container: &str) -> Dynamic { | 
		
	
		
			
				|  |  |  |  |     execute_buildah_command(&["rm", container]) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn copy_wrapper(container: &str, source: &str, destination: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = build_copy(container, source, destination); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to copy '{}' to '{}' in container {}: {}", source, destination, container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn add_wrapper(container: &str, source: &str, destination: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = build_add(container, source, destination); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to add '{}' to '{}' in container {}: {}", source, destination, container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // Configuring Containers | 
		
	
		
			
				|  |  |  |  | pub fn config_wrapper(container: &str, options: Map) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = config(container, options); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to configure container {}: {}", container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // Building Images | 
		
	
		
			
				|  |  |  |  | pub fn commit_wrapper(container: &str, image_name: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_commit(container, image_name, None, false, false); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to commit container {} to image {}: {}", container, image_name, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Extract the image ID if present | 
		
	
		
			
				|  |  |  |  |     if let Some(stdout) = result_map.get("stdout") { | 
		
	
		
			
				|  |  |  |  |         let image_id = stdout.to_string().trim().to_string(); | 
		
	
		
			
				|  |  |  |  |         let mut result_clone = result_map.clone(); | 
		
	
		
			
				|  |  |  |  |         result_clone.insert("image_id".into(), Dynamic::from(image_id)); | 
		
	
		
			
				|  |  |  |  |         return Ok(Dynamic::from(result_clone)); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn commit_full_wrapper(container: &str, image_name: &str, format: &str, squash: bool, rm: bool) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_commit(container, image_name, Some(format), squash, rm); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to commit container {} to image {} (format: {}): {}",  | 
		
	
		
			
				|  |  |  |  |                           container, image_name, format, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Extract the image ID if present | 
		
	
		
			
				|  |  |  |  |     if let Some(stdout) = result_map.get("stdout") { | 
		
	
		
			
				|  |  |  |  |         let image_id = stdout.to_string().trim().to_string(); | 
		
	
		
			
				|  |  |  |  |         let mut result_clone = result_map.clone(); | 
		
	
		
			
				|  |  |  |  |         result_clone.insert("image_id".into(), Dynamic::from(image_id)); | 
		
	
		
			
				|  |  |  |  |         return Ok(Dynamic::from(result_clone)); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | //TODO: don't know what this is need more info | 
		
	
		
			
				|  |  |  |  | // pub fn build_wrapper(context_dir: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  | //     let result = container_build(context_dir, None, None, None, false, false, false); | 
		
	
		
			
				|  |  |  |  | //     if !result.get("success").as_bool().unwrap_or(false) { | 
		
	
		
			
				|  |  |  |  | //         let error = result.get("error").to_string(); | 
		
	
		
			
				|  |  |  |  | //         return Err(format!("Failed to build image from context {}: {}", context_dir, error).into()); | 
		
	
		
			
				|  |  |  |  | //     } | 
		
	
		
			
				|  |  |  |  | //     Ok(result) | 
		
	
		
			
				|  |  |  |  | // } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // pub fn build_with_tag_wrapper(context_dir: &str, tag: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  | //     let result = build(context_dir, None, Some(tag), None, false, false, false); | 
		
	
		
			
				|  |  |  |  | //     if !result.get("success").as_bool().unwrap_or(false) { | 
		
	
		
			
				|  |  |  |  | //         let error = result.get("error").to_string(); | 
		
	
		
			
				|  |  |  |  | //         return Err(format!("Failed to build image with tag {} from context {}: {}",  | 
		
	
		
			
				|  |  |  |  | //                           tag, context_dir, error).into()); | 
		
	
		
			
				|  |  |  |  | //     } | 
		
	
		
			
				|  |  |  |  | //     Ok(result) | 
		
	
		
			
				|  |  |  |  | // } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn build_full_wrapper(context_dir: &str, file: &str, tag: &str, format: &str,  | 
		
	
		
			
				|  |  |  |  |                         layers: bool, pull: bool, no_cache: bool) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = build(context_dir, Some(file), Some(tag), Some(format), layers, pull, no_cache); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to build image with tag {} from file {} in context {}: {}",  | 
		
	
		
			
				|  |  |  |  |                           tag, file, context_dir, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // Managing Images | 
		
	
		
			
				|  |  |  |  | pub fn images_wrapper() -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = images(); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to list images: {}", error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn rmi_wrapper(image: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_remove(image); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to remove image {}: {}", image, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn push_wrapper(image: &str, destination: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_push(image, destination, true); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to push image {} to {}: {}", image, destination, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn push_with_tls_wrapper(image: &str, destination: &str, tls_verify: bool) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_push(image, destination, tls_verify); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to push image {} to {}: {}", image, destination, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn tag_wrapper(image: &str, new_name: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_tag(image, new_name); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to tag image {} as {}: {}", image, new_name, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn pull_wrapper(image: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_pull(image, true); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to pull image {}: {}", image, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn pull_with_tls_wrapper(image: &str, tls_verify: bool) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = image_pull(image, tls_verify); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to pull image {}: {}", image, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn containers_wrapper() -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = containers(); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to list containers: {}", error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | pub fn rm_wrapper(container: &str) -> Result<Dynamic, Box<EvalAltResult>> { | 
		
	
		
			
				|  |  |  |  |     let result = rm(container); | 
		
	
		
			
				|  |  |  |  |     let result_map = match result.clone().try_cast::<Map>() { | 
		
	
		
			
				|  |  |  |  |         Some(map) => map, | 
		
	
		
			
				|  |  |  |  |         None => { | 
		
	
		
			
				|  |  |  |  |             return Err("Failed to convert result to map".into()); | 
		
	
		
			
				|  |  |  |  |         } | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     let success = match result_map.get("success") { | 
		
	
		
			
				|  |  |  |  |         Some(val) => val.as_bool().unwrap_or(false), | 
		
	
		
			
				|  |  |  |  |         None => false, | 
		
	
		
			
				|  |  |  |  |     }; | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     if !success { | 
		
	
		
			
				|  |  |  |  |         let error = match result_map.get("stderr") { | 
		
	
		
			
				|  |  |  |  |             Some(val) => val.to_string(), | 
		
	
		
			
				|  |  |  |  |             None => "Unknown error".to_string(), | 
		
	
		
			
				|  |  |  |  |         }; | 
		
	
		
			
				|  |  |  |  |         return Err(format!("Failed to remove container {}: {}", container, error).into()); | 
		
	
		
			
				|  |  |  |  |     } | 
		
	
		
			
				|  |  |  |  |     Ok(result) | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | /// Register buildah functions with the Rhai engine | 
		
	
		
			
				|  |  |  |  | pub fn register_buildah_functions(engine: &mut Engine) { | 
		
	
		
			
				|  |  |  |  |     // Creating Containers | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_from", from_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_from", from_wrapper_single); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Working with Containers | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_run", run_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_run_with_args", run_with_args_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_run_script", run_script_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_copy", copy_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_add", add_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_mount", mount_wrapper); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Configuring Containers | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_config", config_wrapper); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Building Images | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_commit", commit_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_commit_full", commit_full_wrapper); | 
		
	
		
			
				|  |  |  |  |     // Only register build_full_wrapper since the other build wrappers are commented out | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_build", build_full_wrapper); | 
		
	
		
			
				|  |  |  |  |      | 
		
	
		
			
				|  |  |  |  |     // Managing Images | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_images", images_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_rmi", rmi_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_push", push_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_push_tls", push_with_tls_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_tag", tag_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_pull", pull_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_pull_tls", pull_with_tls_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_list", containers_wrapper); | 
		
	
		
			
				|  |  |  |  |     engine.register_fn("container_rm", rm_wrapper); | 
		
	
		
			
				|  |  |  |  | } |