use derive_empty_traits::EmptyTraits;
use resolver_api::Resolve;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
use crate::entities::{
ResourceTarget, SearchCombinator, U64,
docker::{
container::{Container, ContainerListItem},
image::{Image, ImageHistoryResponseItem, ImageListItem},
network::{Network, NetworkListItem},
volume::{Volume, VolumeListItem},
},
stack::ComposeProject,
update::Log,
};
use super::KomodoReadRequest;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(GetDockerContainersSummaryResponse)]
#[error(serror::Error)]
pub struct GetDockerContainersSummary {}
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct GetDockerContainersSummaryResponse {
pub total: u32,
pub running: u32,
pub stopped: u32,
pub unhealthy: u32,
pub unknown: u32,
}
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]#[empty_traits(KomodoReadRequest)]
#[response(ListAllDockerContainersResponse)]
#[error(serror::Error)]
pub struct ListAllDockerContainers {
#[serde(default)]
pub servers: Vec<String>,
#[serde(default)]
pub containers: Vec<String>,
}
#[typeshare]
pub type ListAllDockerContainersResponse = Vec<ContainerListItem>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(ListDockerContainersResponse)]
#[error(serror::Error)]
pub struct ListDockerContainers {
#[serde(alias = "id", alias = "name")]
pub server: String,
}
#[typeshare]
pub type ListDockerContainersResponse = Vec<ContainerListItem>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(InspectDockerContainerResponse)]
#[error(serror::Error)]
pub struct InspectDockerContainer {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub container: String,
}
#[typeshare]
pub type InspectDockerContainerResponse = Container;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(GetResourceMatchingContainerResponse)]
#[error(serror::Error)]
pub struct GetResourceMatchingContainer {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub container: String,
}
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
pub struct GetResourceMatchingContainerResponse {
pub resource: Option<ResourceTarget>,
}
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(GetContainerLogResponse)]
#[error(serror::Error)]
pub struct GetContainerLog {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub container: String,
#[serde(default = "default_tail")]
pub tail: U64,
#[serde(default)]
pub timestamps: bool,
}
fn default_tail() -> u64 {
50
}
#[typeshare]
pub type GetContainerLogResponse = Log;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(SearchContainerLogResponse)]
#[error(serror::Error)]
pub struct SearchContainerLog {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub container: String,
pub terms: Vec<String>,
#[serde(default)]
pub combinator: SearchCombinator,
#[serde(default)]
pub invert: bool,
#[serde(default)]
pub timestamps: bool,
}
#[typeshare]
pub type SearchContainerLogResponse = Log;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(ListComposeProjectsResponse)]
#[error(serror::Error)]
pub struct ListComposeProjects {
#[serde(alias = "id", alias = "name")]
pub server: String,
}
#[typeshare]
pub type ListComposeProjectsResponse = Vec<ComposeProject>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(ListDockerNetworksResponse)]
#[error(serror::Error)]
pub struct ListDockerNetworks {
#[serde(alias = "id", alias = "name")]
pub server: String,
}
#[typeshare]
pub type ListDockerNetworksResponse = Vec<NetworkListItem>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(InspectDockerNetworkResponse)]
#[error(serror::Error)]
pub struct InspectDockerNetwork {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub network: String,
}
#[typeshare]
pub type InspectDockerNetworkResponse = Network;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(ListDockerImagesResponse)]
#[error(serror::Error)]
pub struct ListDockerImages {
#[serde(alias = "id", alias = "name")]
pub server: String,
}
#[typeshare]
pub type ListDockerImagesResponse = Vec<ImageListItem>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(InspectDockerImageResponse)]
#[error(serror::Error)]
pub struct InspectDockerImage {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub image: String,
}
#[typeshare]
pub type InspectDockerImageResponse = Image;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(ListDockerImageHistoryResponse)]
#[error(serror::Error)]
pub struct ListDockerImageHistory {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub image: String,
}
#[typeshare]
pub type ListDockerImageHistoryResponse =
Vec<ImageHistoryResponseItem>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(ListDockerVolumesResponse)]
#[error(serror::Error)]
pub struct ListDockerVolumes {
#[serde(alias = "id", alias = "name")]
pub server: String,
}
#[typeshare]
pub type ListDockerVolumesResponse = Vec<VolumeListItem>;
#[typeshare]
#[derive(
Serialize, Deserialize, Debug, Clone, Resolve, EmptyTraits,
)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[empty_traits(KomodoReadRequest)]
#[response(InspectDockerVolumeResponse)]
#[error(serror::Error)]
pub struct InspectDockerVolume {
#[serde(alias = "id", alias = "name")]
pub server: String,
pub volume: String,
}
#[typeshare]
pub type InspectDockerVolumeResponse = Volume;