use std::sync::Arc;
use anyhow::Result;
use client_core::config::AppConfig;
use client_core::container::DockerManager;
pub mod architecture;
pub mod config;
pub mod directory_permissions;
pub mod environment;
pub mod error;
pub mod health_check;
pub mod image_loader;
pub mod manager;
pub mod port_manager;
pub mod script_permissions;
pub mod service_manager;
pub use architecture::{Architecture, detect_architecture};
#[allow(unused_imports)]
pub use config::DockerServiceConfig;
#[allow(unused_imports)]
pub use environment::EnvironmentChecker;
#[allow(unused_imports)]
pub use error::{DockerServiceError, DockerServiceResult};
#[allow(unused_imports)]
pub use health_check::{ContainerStatus, HealthReport, ServiceStatus};
#[allow(unused_imports)]
pub use image_loader::{ImageInfo, ImageLoader, ImageType, LoadResult, TagResult};
pub use manager::DockerServiceManager;
#[allow(unused_imports)]
pub use port_manager::{PortConflict, PortConflictReport, PortManager, PortMapping};
#[allow(unused_imports)]
pub use service_manager::ServiceManager;
pub struct DockerService;
impl DockerService {
#[allow(clippy::new_ret_no_self)]
pub fn new(
config: Arc<AppConfig>,
docker_manager: Arc<DockerManager>,
) -> Result<DockerServiceManager> {
let work_dir = docker_manager
.get_working_directory()
.ok_or_else(|| anyhow::anyhow!("Unable to determine Docker working directory"))?
.to_path_buf();
Ok(DockerServiceManager::new(
config,
docker_manager.clone(),
work_dir,
))
}
}
pub fn get_system_architecture() -> Architecture {
detect_architecture()
}
pub fn get_architecture_suffix(arch: Architecture) -> &'static str {
match arch {
Architecture::Amd64 => "amd64",
Architecture::Arm64 => "arm64",
}
}