use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
use crate::entities::{
I64, NoData, U64, docker::task::TaskSpecRestartPolicyConditionEnum,
swarm::SwarmState,
};
use super::{
EndpointPortConfig, NetworkAttachmentConfig, ObjectVersion,
task::TaskSpec,
};
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct SwarmServiceListItem {
#[serde(rename = "ID")]
pub id: Option<String>,
#[serde(rename = "Name")]
pub name: Option<String>,
#[serde(rename = "Image")]
pub image: Option<String>,
#[serde(rename = "Runtime")]
pub runtime: Option<String>,
#[serde(rename = "Restart")]
pub restart: Option<TaskSpecRestartPolicyConditionEnum>,
#[serde(rename = "Mode")]
pub mode: Option<SwarmServiceMode>,
#[serde(rename = "Replicas")]
pub replicas: Option<I64>,
#[serde(rename = "MaxConcurrent")]
pub max_concurrent: Option<I64>,
#[serde(rename = "Configs")]
pub configs: Vec<String>,
#[serde(rename = "Secrets")]
pub secrets: Vec<String>,
#[serde(rename = "RunningTasks")]
pub running_tasks: Option<U64>,
#[serde(rename = "DesiredTasks")]
pub desired_tasks: Option<U64>,
#[serde(rename = "CompletedTasks")]
pub completed_tasks: Option<U64>,
#[serde(rename = "State")]
pub state: SwarmState,
#[serde(rename = "CreatedAt")]
pub created_at: Option<String>,
#[serde(rename = "UpdatedAt")]
pub updated_at: Option<String>,
}
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum SwarmServiceMode {
Replicated,
Global,
ReplicatedJob,
GlobalJob,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct SwarmService {
#[serde(rename = "ID")]
pub id: Option<String>,
#[serde(rename = "Mode")]
pub mode: Option<SwarmServiceMode>,
#[serde(rename = "Replicas")]
pub replicas: Option<I64>,
#[serde(rename = "MaxConcurrent")]
pub max_concurrent: Option<I64>,
#[serde(rename = "State")]
pub state: SwarmState,
#[serde(rename = "Version")]
pub version: Option<ObjectVersion>,
#[serde(rename = "CreatedAt")]
pub created_at: Option<String>,
#[serde(rename = "UpdatedAt")]
pub updated_at: Option<String>,
#[serde(rename = "Spec")]
pub spec: Option<ServiceSpec>,
#[serde(rename = "Endpoint")]
pub endpoint: Option<ServiceEndpoint>,
#[serde(rename = "UpdateStatus")]
pub update_status: Option<ServiceUpdateStatus>,
#[serde(rename = "ServiceStatus")]
pub service_status: Option<ServiceServiceStatus>,
#[serde(rename = "JobStatus")]
pub job_status: Option<ServiceJobStatus>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceSpec {
#[serde(rename = "Name")]
pub name: Option<String>,
#[serde(rename = "Labels")]
pub labels: Option<HashMap<String, String>>,
#[serde(rename = "TaskTemplate")]
pub task_template: Option<TaskSpec>,
#[serde(rename = "Mode")]
pub mode: Option<ServiceSpecMode>,
#[serde(rename = "UpdateConfig")]
pub update_config: Option<ServiceSpecUpdateConfig>,
#[serde(rename = "RollbackConfig")]
pub rollback_config: Option<ServiceSpecRollbackConfig>,
#[serde(rename = "Networks")]
pub networks: Option<Vec<NetworkAttachmentConfig>>,
#[serde(rename = "EndpointSpec")]
pub endpoint_spec: Option<EndpointSpec>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceSpecMode {
#[serde(rename = "Replicated")]
pub replicated: Option<ServiceSpecModeReplicated>,
#[serde(rename = "Global")]
pub global: Option<NoData>,
#[serde(rename = "ReplicatedJob")]
pub replicated_job: Option<ServiceSpecModeReplicatedJob>,
#[serde(rename = "GlobalJob")]
pub global_job: Option<NoData>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceSpecModeReplicated {
#[serde(rename = "Replicas")]
pub replicas: Option<I64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceSpecModeReplicatedJob {
#[serde(rename = "MaxConcurrent")]
pub max_concurrent: Option<I64>,
#[serde(rename = "TotalCompletions")]
pub total_completions: Option<I64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceSpecUpdateConfig {
#[serde(rename = "Parallelism")]
pub parallelism: Option<I64>,
#[serde(rename = "Delay")]
pub delay: Option<I64>,
#[serde(rename = "FailureAction")]
pub failure_action:
Option<ServiceSpecUpdateConfigFailureActionEnum>,
#[serde(rename = "Monitor")]
pub monitor: Option<I64>,
#[serde(rename = "MaxFailureRatio")]
pub max_failure_ratio: Option<f64>,
#[serde(rename = "Order")]
pub order: Option<ServiceSpecUpdateConfigOrderEnum>,
}
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Default,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum ServiceSpecUpdateConfigFailureActionEnum {
#[default]
#[serde(rename = "")]
EMPTY,
#[serde(rename = "continue")]
CONTINUE,
#[serde(rename = "pause")]
PAUSE,
#[serde(rename = "rollback")]
ROLLBACK,
}
#[allow(non_camel_case_types)]
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Default,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum ServiceSpecUpdateConfigOrderEnum {
#[default]
#[serde(rename = "")]
EMPTY,
#[serde(rename = "stop-first")]
STOP_FIRST,
#[serde(rename = "start-first")]
START_FIRST,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceSpecRollbackConfig {
#[serde(rename = "Parallelism")]
pub parallelism: Option<I64>,
#[serde(rename = "Delay")]
pub delay: Option<I64>,
#[serde(rename = "FailureAction")]
pub failure_action:
Option<ServiceSpecRollbackConfigFailureActionEnum>,
#[serde(rename = "Monitor")]
pub monitor: Option<I64>,
#[serde(rename = "MaxFailureRatio")]
pub max_failure_ratio: Option<f64>,
#[serde(rename = "Order")]
pub order: Option<ServiceSpecRollbackConfigOrderEnum>,
}
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Default,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum ServiceSpecRollbackConfigFailureActionEnum {
#[default]
#[serde(rename = "")]
EMPTY,
#[serde(rename = "continue")]
CONTINUE,
#[serde(rename = "pause")]
PAUSE,
}
#[allow(non_camel_case_types)]
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Default,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum ServiceSpecRollbackConfigOrderEnum {
#[default]
#[serde(rename = "")]
EMPTY,
#[serde(rename = "stop-first")]
STOP_FIRST,
#[serde(rename = "start-first")]
START_FIRST,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct EndpointSpec {
#[serde(rename = "Mode")]
pub mode: Option<EndpointSpecModeEnum>,
#[serde(rename = "Ports")]
pub ports: Option<Vec<EndpointPortConfig>>,
}
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Default,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum EndpointSpecModeEnum {
#[default]
#[serde(rename = "")]
EMPTY,
#[serde(rename = "vip")]
VIP,
#[serde(rename = "dnsrr")]
DNSRR,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceEndpoint {
#[serde(rename = "Spec")]
pub spec: Option<EndpointSpec>,
#[serde(rename = "Ports")]
pub ports: Option<Vec<EndpointPortConfig>>,
#[serde(rename = "VirtualIPs")]
pub virtual_ips: Option<Vec<ServiceEndpointVirtualIps>>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceEndpointVirtualIps {
#[serde(rename = "NetworkID")]
pub network_id: Option<String>,
#[serde(rename = "Addr")]
pub addr: Option<String>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceUpdateStatus {
#[serde(rename = "State")]
pub state: Option<ServiceUpdateStatusStateEnum>,
#[serde(rename = "StartedAt")]
pub started_at: Option<String>,
#[serde(rename = "CompletedAt")]
pub completed_at: Option<String>,
#[serde(rename = "Message")]
pub message: Option<String>,
}
#[allow(non_camel_case_types)]
#[typeshare]
#[derive(
Debug,
Clone,
Copy,
PartialEq,
Eq,
PartialOrd,
Ord,
Default,
Serialize,
Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub enum ServiceUpdateStatusStateEnum {
#[default]
#[serde(rename = "")]
EMPTY,
#[serde(rename = "updating")]
UPDATING,
#[serde(rename = "paused")]
PAUSED,
#[serde(rename = "completed")]
COMPLETED,
#[serde(rename = "rollback_started")]
ROLLBACK_STARTED,
#[serde(rename = "rollback_paused")]
ROLLBACK_PAUSED,
#[serde(rename = "rollback_completed")]
ROLLBACK_COMPLETED,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceServiceStatus {
#[serde(rename = "RunningTasks")]
pub running_tasks: Option<U64>,
#[serde(rename = "DesiredTasks")]
pub desired_tasks: Option<U64>,
#[serde(rename = "CompletedTasks")]
pub completed_tasks: Option<U64>,
}
#[typeshare]
#[derive(
Debug, Clone, Default, PartialEq, Serialize, Deserialize,
)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
pub struct ServiceJobStatus {
#[serde(rename = "JobIteration")]
pub job_iteration: Option<ObjectVersion>,
#[serde(rename = "LastExecution")]
pub last_execution: Option<String>,
}