Skip to main content

soma_infra/
docker_provider.rs

1use std::sync::Arc;
2
3use async_trait::async_trait;
4use soma_fleet::HostRecord;
5use tokio_util::sync::CancellationToken;
6
7use crate::{
8    ContainerReader, DockerSystemReader, ImageReader, InfraResult, NetworkReader, VolumeReader,
9};
10
11/// Factory for host- and revision-bound Docker read clients.
12#[async_trait]
13pub trait DockerClientProvider: Send + Sync {
14    /// Returns a client bound to the exact host revision.
15    async fn client(
16        &self,
17        host: &HostRecord,
18        cancellation: &CancellationToken,
19    ) -> InfraResult<Arc<dyn DockerReadClient>>;
20}
21
22/// Complete neutral Docker read surface.
23pub trait DockerReadClient:
24    DockerSystemReader
25    + ContainerReader
26    + ImageReader
27    + NetworkReader
28    + VolumeReader
29    + crate::DockerTelemetryReader
30{
31}
32
33impl<T> DockerReadClient for T where
34    T: DockerSystemReader
35        + ContainerReader
36        + ImageReader
37        + NetworkReader
38        + VolumeReader
39        + crate::DockerTelemetryReader
40{
41}
42
43#[cfg(test)]
44#[path = "docker_provider_tests.rs"]
45mod tests;