]> git.proxmox.com Git - proxmox-backup.git/commitdiff
pbs-datastore/prune: make PruneOptions an api type
authorDominik Csapak <d.csapak@proxmox.com>
Fri, 16 Jul 2021 08:53:19 +0000 (10:53 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 16 Jul 2021 09:34:18 +0000 (11:34 +0200)
so that we can reuse it from here

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
pbs-datastore/src/prune.rs

index d0d8ca166afe66c798ee66fbb692a62e424edb42..4605e26f2656fbe7054e253dee03349f8f95dec3 100644 (file)
@@ -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<u64>,
+    #[serde(skip_serializing_if="Option::is_none")]
     pub keep_hourly: Option<u64>,
+    #[serde(skip_serializing_if="Option::is_none")]
     pub keep_daily: Option<u64>,
+    #[serde(skip_serializing_if="Option::is_none")]
     pub keep_weekly: Option<u64>,
+    #[serde(skip_serializing_if="Option::is_none")]
     pub keep_monthly: Option<u64>,
+    #[serde(skip_serializing_if="Option::is_none")]
     pub keep_yearly: Option<u64>,
 }