api-types: datastore type improvements
let BackupGroup implement Hash let BackupGroup and BackupDir be AsRef<BackupGroup> let BackupDir be AsRef<BackupDir> the pbs-datastore types will implement these AsRefs as well Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
2d5c20c8f5
commit
b444eb68af
|
@ -471,7 +471,7 @@ impl std::cmp::PartialOrd for BackupType {
|
||||||
"backup-id": { schema: BACKUP_ID_SCHEMA },
|
"backup-id": { schema: BACKUP_ID_SCHEMA },
|
||||||
},
|
},
|
||||||
)]
|
)]
|
||||||
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
/// A backup group (without a data store).
|
/// A backup group (without a data store).
|
||||||
pub struct BackupGroup {
|
pub struct BackupGroup {
|
||||||
|
@ -488,6 +488,28 @@ impl BackupGroup {
|
||||||
pub fn new<T: Into<String>>(ty: BackupType, id: T) -> Self {
|
pub fn new<T: Into<String>>(ty: BackupType, id: T) -> Self {
|
||||||
Self { ty, id: id.into() }
|
Self { ty, id: id.into() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn matches(&self, filter: &crate::GroupFilter) -> bool {
|
||||||
|
use crate::GroupFilter;
|
||||||
|
|
||||||
|
match filter {
|
||||||
|
GroupFilter::Group(backup_group) => {
|
||||||
|
match backup_group.parse::<BackupGroup>() {
|
||||||
|
Ok(group) => *self == group,
|
||||||
|
Err(_) => false, // shouldn't happen if value is schema-checked
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GroupFilter::BackupType(backup_type) => self.ty.as_str() == backup_type,
|
||||||
|
GroupFilter::Regex(regex) => regex.is_match(&self.to_string()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<BackupGroup> for BackupGroup {
|
||||||
|
#[inline]
|
||||||
|
fn as_ref(&self) -> &Self {
|
||||||
|
self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<(BackupType, String)> for BackupGroup {
|
impl From<(BackupType, String)> for BackupGroup {
|
||||||
|
@ -568,6 +590,20 @@ pub struct BackupDir {
|
||||||
pub time: i64,
|
pub time: i64,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl AsRef<BackupGroup> for BackupDir {
|
||||||
|
#[inline]
|
||||||
|
fn as_ref(&self) -> &BackupGroup {
|
||||||
|
&self.group
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<BackupDir> for BackupDir {
|
||||||
|
#[inline]
|
||||||
|
fn as_ref(&self) -> &Self {
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<(BackupGroup, i64)> for BackupDir {
|
impl From<(BackupGroup, i64)> for BackupDir {
|
||||||
fn from(data: (BackupGroup, i64)) -> Self {
|
fn from(data: (BackupGroup, i64)) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
|
|
@ -342,6 +342,7 @@ pub struct TapeBackupJobStatus {
|
||||||
/// Filter for matching `BackupGroup`s, for use with `BackupGroup::filter`.
|
/// Filter for matching `BackupGroup`s, for use with `BackupGroup::filter`.
|
||||||
pub enum GroupFilter {
|
pub enum GroupFilter {
|
||||||
/// BackupGroup type - either `vm`, `ct`, or `host`.
|
/// BackupGroup type - either `vm`, `ct`, or `host`.
|
||||||
|
// FIXME: Should be `BackupType`
|
||||||
BackupType(String),
|
BackupType(String),
|
||||||
/// Full identifier of BackupGroup, including type
|
/// Full identifier of BackupGroup, including type
|
||||||
Group(String),
|
Group(String),
|
||||||
|
|
Loading…
Reference in New Issue