]> git.proxmox.com Git - proxmox-backup.git/commitdiff
derive Clone and PartialEq for some API types
authorDietmar Maurer <dietmar@proxmox.com>
Thu, 15 Dec 2022 16:34:13 +0000 (17:34 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 15 Dec 2022 16:34:13 +0000 (17:34 +0100)
This is useful for react-lik GUI toolkits which need to do VDOM diffs.

Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
pbs-api-types/src/datastore.rs
pbs-api-types/src/human_byte.rs
pbs-api-types/src/jobs.rs
pbs-api-types/src/lib.rs
pbs-api-types/src/remote.rs
pbs-api-types/src/tape/media.rs
pbs-api-types/src/traffic_control.rs
pbs-api-types/src/user.rs

index d75ead90d2cba28be64e759c9f90b427fc0d7076..72e8d1eeba33bd5523ccf4e77e6aaa2095539d78 100644 (file)
@@ -270,7 +270,7 @@ pub const DATASTORE_TUNING_STRING_SCHEMA: Schema = StringSchema::new("Datastore
         },
     }
 )]
-#[derive(Serialize, Deserialize, Updater)]
+#[derive(Serialize, Deserialize, Updater, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Datastore configuration properties.
 pub struct DataStoreConfig {
@@ -354,7 +354,7 @@ impl DataStoreConfig {
         }
     },
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Basic information about a datastore.
 pub struct DataStoreListItem {
@@ -1141,7 +1141,7 @@ pub struct GroupListItem {
 }
 
 #[api()]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Basic information about a backup namespace.
 pub struct NamespaceListItem {
@@ -1223,7 +1223,7 @@ pub struct TypeCounts {
         },
     },
 )]
-#[derive(Clone, Default, Serialize, Deserialize)]
+#[derive(Clone, Default, Serialize, Deserialize, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Garbage collection status.
 pub struct GarbageCollectionStatus {
@@ -1295,7 +1295,7 @@ pub struct DataStoreStatus {
         },
      },
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Status of a Datastore
 pub struct DataStoreStatusListItem {
index f9ac6d531903ec5e39583f6f3b6c7b9facb551c9..189a645c57bc5181e8dff3e6cb2ede9e0297fd47 100644 (file)
@@ -121,7 +121,7 @@ fn strip_unit(v: &str) -> (&str, SizeUnit) {
 }
 
 /// Byte size which can be displayed in a human friendly way
-#[derive(Debug, Copy, Clone, UpdaterType)]
+#[derive(Debug, Copy, Clone, UpdaterType, PartialEq)]
 pub struct HumanByte {
     /// The siginficant value, it does not includes any factor of the `unit`
     size: f64,
index 7f029af78fa8a3e88ac6c1030f7ec135d7d5a92d..cf7618c4d55f82ce1564819a53735832f61d46b8 100644 (file)
@@ -87,7 +87,7 @@ pub const REMOVE_VANISHED_BACKUPS_SCHEMA: Schema = BooleanSchema::new(
         },
     }
 )]
-#[derive(Serialize, Deserialize, Default)]
+#[derive(Serialize, Deserialize, Default, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Job Scheduling Status
 pub struct JobScheduleStatus {
@@ -392,6 +392,17 @@ pub enum GroupFilter {
     Regex(Regex),
 }
 
+impl PartialEq for GroupFilter {
+    fn eq(&self, other: &Self) -> bool {
+        match (self, other) {
+            (Self::BackupType(a), Self::BackupType(b)) => a == b,
+            (Self::Group(a), Self::Group(b)) => a == b,
+            (Self::Regex(a), Self::Regex(b)) => a.as_str() == b.as_str(),
+            _ => false,
+        }
+    }
+}
+
 impl std::str::FromStr for GroupFilter {
     type Err = anyhow::Error;
 
@@ -484,7 +495,7 @@ pub const GROUP_FILTER_LIST_SCHEMA: Schema =
         },
     }
 )]
-#[derive(Serialize, Deserialize, Clone, Updater)]
+#[derive(Serialize, Deserialize, Clone, Updater, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Sync Job
 pub struct SyncJobConfig {
@@ -532,7 +543,7 @@ impl SyncJobConfig {
         },
     },
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Status of Sync Job
 pub struct SyncJobStatus {
@@ -572,7 +583,7 @@ pub struct SyncJobStatus {
         },
     }
 )]
-#[derive(Serialize, Deserialize, Default, Updater)]
+#[derive(Serialize, Deserialize, Default, Updater, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Common pruning options
 pub struct KeepOptions {
index 18cde45e59e226f7f72acfcb563a2aad0fa59a62..5e0439544fc7a88be6072c1948130677ff0bb65f 100644 (file)
@@ -492,7 +492,7 @@ pub enum RRDTimeFrame {
 }
 
 #[api]
-#[derive(Deserialize, Serialize, PartialEq, Eq)]
+#[derive(Deserialize, Serialize, Copy, Clone, PartialEq, Eq)]
 #[serde(rename_all = "lowercase")]
 /// type of the realm
 pub enum RealmType {
@@ -518,7 +518,7 @@ pub enum RealmType {
         },
     },
 )]
-#[derive(Deserialize, Serialize)]
+#[derive(Deserialize, Serialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Basic Information about a realm
 pub struct BasicRealmInfo {
index 890e31c0d09be5956798c1bb78b82ca7d13082d9..e7912ee0990ae59e06e68b73a35c721ed024a41c 100644 (file)
@@ -46,7 +46,7 @@ pub const REMOTE_ID_SCHEMA: Schema = StringSchema::new("Remote ID.")
         },
     },
 )]
-#[derive(Serialize, Deserialize, Updater)]
+#[derive(Serialize, Deserialize, Updater, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Remote configuration properties.
 pub struct RemoteConfig {
@@ -96,7 +96,7 @@ pub struct Remote {
         },
     },
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Remote properties.
 pub struct RemoteWithoutPassword {
index c2c25da021a587ad95ba1a1a4a5929c8a878dd20..6792cd3c9af037a24c674a091be24026f7a6f252 100644 (file)
@@ -149,7 +149,7 @@ pub struct LabelUuidMap {
         },
     },
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 /// Media content list entry
 pub struct MediaContentEntry {
index 3ed579cf9c0415be1048571eb8dc13b960b2df11..947df38ac10f65f7d714f82a427e2fc7a3f46ecb 100644 (file)
@@ -48,7 +48,7 @@ pub const TRAFFIC_CONTROL_BURST_SCHEMA: Schema =
         },
     },
 )]
-#[derive(Serialize, Deserialize, Default, Clone, Updater)]
+#[derive(Serialize, Deserialize, Default, Clone, Updater, PartialEq)]
 #[serde(rename_all = "kebab-case")]
 ///  Rate Limit Configuration
 pub struct RateLimitConfig {
index 56d82537282edcba4c9b8d2b4cbf0bf4d3281070..a7481190af31a7ebb8062f189fae5f489a6f9b38 100644 (file)
@@ -75,7 +75,7 @@ pub const EMAIL_SCHEMA: Schema = StringSchema::new("E-Mail Address.")
         },
     }
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 /// User properties with added list of ApiTokens
 pub struct UserWithTokens {
     pub userid: Userid,
@@ -114,7 +114,7 @@ pub struct UserWithTokens {
         },
     }
 )]
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Clone, PartialEq)]
 /// ApiToken properties.
 pub struct ApiToken {
     pub tokenid: Authid,