From dc46aa9a0038f6d20f4c9a01138b3620fac1a94c Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 16 Jul 2021 10:53:19 +0200 Subject: [PATCH] pbs-datastore/prune: make PruneOptions an api type so that we can reuse it from here Signed-off-by: Dominik Csapak --- pbs-datastore/src/prune.rs | 50 +++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/pbs-datastore/src/prune.rs b/pbs-datastore/src/prune.rs index d0d8ca16..4605e26f 100644 --- a/pbs-datastore/src/prune.rs +++ b/pbs-datastore/src/prune.rs @@ -2,6 +2,18 @@ use std::collections::{HashMap, HashSet}; use std::path::PathBuf; use anyhow::{Error}; +use serde::{Deserialize, Serialize}; + +use proxmox::api::api; + +use pbs_api_types::{ + PRUNE_SCHEMA_KEEP_LAST, + PRUNE_SCHEMA_KEEP_HOURLY, + PRUNE_SCHEMA_KEEP_DAILY, + PRUNE_SCHEMA_KEEP_WEEKLY, + PRUNE_SCHEMA_KEEP_MONTHLY, + PRUNE_SCHEMA_KEEP_YEARLY, +}; use super::BackupInfo; @@ -68,13 +80,49 @@ fn remove_incomplete_snapshots( } } -#[derive(Default)] +#[api( + properties: { + "keep-last": { + schema: PRUNE_SCHEMA_KEEP_LAST, + optional: true, + }, + "keep-hourly": { + schema: PRUNE_SCHEMA_KEEP_HOURLY, + optional: true, + }, + "keep-daily": { + schema: PRUNE_SCHEMA_KEEP_DAILY, + optional: true, + }, + "keep-weekly": { + schema: PRUNE_SCHEMA_KEEP_WEEKLY, + optional: true, + }, + "keep-monthly": { + schema: PRUNE_SCHEMA_KEEP_MONTHLY, + optional: true, + }, + "keep-yearly": { + schema: PRUNE_SCHEMA_KEEP_YEARLY, + optional: true, + }, + } +)] +#[derive(Serialize, Deserialize, Default)] +#[serde(rename_all = "kebab-case")] +/// Common pruning options pub struct PruneOptions { + #[serde(skip_serializing_if="Option::is_none")] pub keep_last: Option, + #[serde(skip_serializing_if="Option::is_none")] pub keep_hourly: Option, + #[serde(skip_serializing_if="Option::is_none")] pub keep_daily: Option, + #[serde(skip_serializing_if="Option::is_none")] pub keep_weekly: Option, + #[serde(skip_serializing_if="Option::is_none")] pub keep_monthly: Option, + #[serde(skip_serializing_if="Option::is_none")] pub keep_yearly: Option, }