use crate::error::KubeError;
use crate::kind::KubeResource;
use crate::patch::Patch;
use crate::watch::Watcher;
#[async_trait::async_trait]
pub trait KubeClient: Send + Sync {
async fn get<R: KubeResource + Send + Sync + 'static>(
&self,
namespace: Option<&str>,
name: &str,
) -> Result<R, KubeError>;
async fn list<R: KubeResource + Send + Sync + 'static>(
&self,
namespace: Option<&str>,
opts: &ListOptions,
) -> Result<List<R>, KubeError>;
async fn create<R: KubeResource + Send + Sync + 'static>(&self, resource: &R) -> Result<R, KubeError>;
async fn replace<R: KubeResource + Send + Sync + 'static>(&self, resource: &R) -> Result<R, KubeError>;
async fn patch<R: KubeResource + Send + Sync + 'static>(
&self,
namespace: Option<&str>,
name: &str,
patch: &Patch,
) -> Result<R, KubeError>;
async fn delete<R: KubeResource + Send + Sync + 'static>(
&self,
namespace: Option<&str>,
name: &str,
opts: &DeleteOptions,
) -> Result<(), KubeError>;
fn watcher<R: KubeResource + Send + Sync + 'static>(&self) -> Box<dyn Watcher<R>>;
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct List<R> {
pub items: Vec<R>,
pub resource_version: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub continue_token: Option<String>,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct ListOptions {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub label_selector: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub field_selector: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub limit: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub continue_token: Option<String>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub resource_version: String,
}
#[derive(Debug, Clone, Default, serde::Serialize, serde::Deserialize)]
pub struct DeleteOptions {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub grace_period_seconds: Option<u64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub propagation_policy: Option<PropagationPolicy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub preconditions: Option<DeletePreconditions>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "PascalCase")]
pub enum PropagationPolicy {
Foreground,
Background,
Orphan,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct DeletePreconditions {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resource_version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub uid: Option<String>,
}