From 5ba96e86d9cf0c142c950e73a264c99ab7c705fe Mon Sep 17 00:00:00 2001 From: qpismont Date: Thu, 13 Nov 2025 21:43:26 +0000 Subject: [PATCH] Refactor Docker integration: update BollardAdapter to use async Mutex, implement version retrieval, and clean up unused service methods. --- src/docker/bollard.rs | 23 ++++++++++++----------- src/docker/mod.rs | 8 +++++--- src/main.rs | 3 ++- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/docker/bollard.rs b/src/docker/bollard.rs index 0498ffa..bc4a00f 100644 --- a/src/docker/bollard.rs +++ b/src/docker/bollard.rs @@ -1,5 +1,6 @@ use bollard::Docker; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; +use tokio::sync::Mutex; pub struct BollardAdapter { client: Arc>>, @@ -22,22 +23,22 @@ impl crate::docker::DockerAdapter for BollardAdapter { docker.ping().await?; - let mut client = self.client.lock().unwrap(); + let mut client = self.client.lock().await; *client = Some(docker); Ok(()) } - async fn list_service_with_label(&self, label: &str) -> anyhow::Result> { - Ok(vec![]) - } + async fn version(&self) -> anyhow::Result { + let client = self.client.lock().await; + if let Some(docker) = &*client { + let version_info = docker.version().await?; + let version = version_info.version; - async fn shutdown_service(&self, service_name: &str) -> anyhow::Result<()> { - Ok(()) - } - - async fn start_service(&self, service_name: &str) -> anyhow::Result<()> { - Ok(()) + version.ok_or_else(|| anyhow::anyhow!("Version not available")) + } else { + Err(anyhow::anyhow!("Docker client is not connected")) + } } } diff --git a/src/docker/mod.rs b/src/docker/mod.rs index ccd557e..b400a0f 100644 --- a/src/docker/mod.rs +++ b/src/docker/mod.rs @@ -14,11 +14,13 @@ impl Docker { pub async fn connect_docker(&self, docker_host: Option) -> anyhow::Result<()> { self.adapter.connect_docker(docker_host).await } + + pub async fn version(&self) -> anyhow::Result { + self.adapter.version().await + } } pub trait DockerAdapter { async fn connect_docker(&self, docker_host: Option) -> anyhow::Result<()>; - async fn list_service_with_label(&self, label: &str) -> anyhow::Result>; - async fn shutdown_service(&self, service_name: &str) -> anyhow::Result<()>; - async fn start_service(&self, service_name: &str) -> anyhow::Result<()>; + async fn version(&self) -> anyhow::Result; } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 003e8da..80d58f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,9 +12,10 @@ async fn main() -> anyhow::Result<()> { let envs = load_envs()?; let backup_root_path = std::path::Path::new(&envs.backup_folder); - let folders = list_folders(backup_root_path).await?; + let _folders = list_folders(backup_root_path).await?; let docker_conn = connect_docker(envs.docker_host).await?; + println!("Docker version: {}", docker_conn.version().await?); Ok(()) }