use std::collections::HashMap; #[derive(Debug, Clone)] pub struct InstallResult { pub component: String, pub container_name: String, pub container_ip: String, pub ports: Vec, pub env_vars: HashMap, pub connection_info: String, } impl InstallResult { pub fn print(&self) { let component_upper = self.component.to_uppercase(); println!("\n========================================"); println!(" {component_upper} Installation Complete"); println!("========================================\n"); println!("Container: {}", self.container_name); println!("IP Address: {}", self.container_ip); println!("Ports: {:?}", self.ports); println!("\n--- Connection Info ---\n"); println!("{}", self.connection_info); if !self.env_vars.is_empty() { println!("\n--- Environment Variables (.env) ---\n"); for (key, value) in &self.env_vars { println!("{key}={value}"); } } println!("\n========================================\n"); } } #[derive(Debug, Clone)] pub struct ComponentConfig { pub name: String, pub ports: Vec, pub dependencies: Vec, pub linux_packages: Vec, pub macos_packages: Vec, pub windows_packages: Vec, pub download_url: Option, pub binary_name: Option, pub pre_install_cmds_linux: Vec, pub post_install_cmds_linux: Vec, pub pre_install_cmds_macos: Vec, pub post_install_cmds_macos: Vec, pub pre_install_cmds_windows: Vec, pub post_install_cmds_windows: Vec, pub env_vars: HashMap, pub data_download_list: Vec, pub exec_cmd: String, pub check_cmd: String, }