use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub enum BackupBackends {
#[serde(rename = "s3")]
S3,
#[serde(rename = "gcs")]
GCS,
#[serde(rename = "azure")]
AZURE,
#[serde(rename = "filesystem")]
FILESYSTEM,
}
impl BackupBackends {
pub fn value(&self) -> &str {
match self {
BackupBackends::S3 => "s3",
BackupBackends::GCS => "gcs",
BackupBackends::AZURE => "azure",
BackupBackends::FILESYSTEM => "filesystem",
}
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct BackupCreateRequest {
pub id: String,
pub include: Option<Vec<String>>,
pub exclude: Option<Vec<String>>,
}
impl BackupCreateRequest {
pub fn builder(id: &str) -> BackupCreateRequestBuilder {
BackupCreateRequestBuilder::new(id)
}
}
pub struct BackupCreateRequestBuilder {
pub id: String,
pub include: Option<Vec<String>>,
pub exclude: Option<Vec<String>>,
}
impl BackupCreateRequestBuilder {
pub fn new(id: &str) -> BackupCreateRequestBuilder {
BackupCreateRequestBuilder {
id: id.into(),
include: None,
exclude: None,
}
}
pub fn with_include(mut self, include: Vec<&str>) -> BackupCreateRequestBuilder {
let include = include.iter().map(|field| field.to_string()).collect();
self.include = Some(include);
self
}
pub fn with_exclude(mut self, exclude: Vec<&str>) -> BackupCreateRequestBuilder {
let exclude = exclude.iter().map(|field| field.to_string()).collect();
self.exclude = Some(exclude);
self
}
pub fn build(self) -> BackupCreateRequest {
BackupCreateRequest {
id: self.id,
include: self.include,
exclude: self.exclude,
}
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct BackupRestoreRequest {
pub include: Option<Vec<String>>,
pub exclude: Option<Vec<String>>,
}
impl BackupRestoreRequest {
pub fn builder() -> BackupRestoreRequestBuilder {
BackupRestoreRequestBuilder::default()
}
}
#[derive(Default)]
pub struct BackupRestoreRequestBuilder {
pub include: Option<Vec<String>>,
pub exclude: Option<Vec<String>>,
}
impl BackupRestoreRequestBuilder {
pub fn new() -> BackupRestoreRequestBuilder {
BackupRestoreRequestBuilder {
include: None,
exclude: None,
}
}
pub fn with_include(mut self, include: Vec<&str>) -> BackupRestoreRequestBuilder {
let include = include.iter().map(|field| field.to_string()).collect();
self.include = Some(include);
self
}
pub fn with_exclude(mut self, exclude: Vec<&str>) -> BackupRestoreRequestBuilder {
let exclude = exclude.iter().map(|field| field.to_string()).collect();
self.exclude = Some(exclude);
self
}
pub fn build(self) -> BackupRestoreRequest {
BackupRestoreRequest {
include: self.include,
exclude: self.exclude,
}
}
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub enum BackupStatus {
STARTED,
SUCCESS,
FAILED,
TRANSFERRING,
TRANSFERRED,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct BackupStatusResponse {
pub backend: String,
pub id: String,
pub path: Option<String>,
pub status: BackupStatus,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct BackupResponse {
pub backend: BackupBackends,
pub classes: Vec<String>,
pub id: String,
pub path: String,
pub status: BackupStatus,
}