type: move ProductType
type to proxmox-subscription
from pom
previously this type lived inside of pom. this made it harder to access the product type from a `SubscriptionInfo` trait in other products. move the type here so we can check product types more consistently across products (e. g. in pom and pbs) Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
This commit is contained in:
parent
4da2fee6fa
commit
82e742f8f5
@ -1,5 +1,7 @@
|
||||
mod subscription_info;
|
||||
pub use subscription_info::{get_hardware_address, SubscriptionInfo, SubscriptionStatus};
|
||||
pub use subscription_info::{
|
||||
get_hardware_address, ProductType, SubscriptionInfo, SubscriptionStatus,
|
||||
};
|
||||
|
||||
pub mod check;
|
||||
pub mod files;
|
||||
|
@ -1,4 +1,4 @@
|
||||
use std::path::Path;
|
||||
use std::{fmt::Display, path::Path, str::FromStr};
|
||||
|
||||
use anyhow::{bail, format_err, Error};
|
||||
use openssl::hash::{hash, DigestBytes, MessageDigest};
|
||||
@ -59,6 +59,48 @@ impl std::fmt::Display for SubscriptionStatus {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "api-types", api())]
|
||||
#[cfg_attr(feature = "api-types", derive(Updater))]
|
||||
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
|
||||
#[serde(rename_all = "lowercase")]
|
||||
/// Product type
|
||||
pub enum ProductType {
|
||||
/// Proxmox Virtual Environment
|
||||
Pve,
|
||||
/// Proxmox Backup Server
|
||||
Pbs,
|
||||
/// Proxmox Mail Gateway
|
||||
Pmg,
|
||||
/// Proxmox Offline Mirror
|
||||
Pom,
|
||||
}
|
||||
|
||||
impl Display for ProductType {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let txt = match self {
|
||||
ProductType::Pve => "pve",
|
||||
ProductType::Pbs => "pbs",
|
||||
ProductType::Pmg => "pmg",
|
||||
ProductType::Pom => "pom",
|
||||
};
|
||||
f.write_str(txt)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for ProductType {
|
||||
type Err = Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
match s {
|
||||
"pve" => Ok(ProductType::Pve),
|
||||
"pmg" => Ok(ProductType::Pmg),
|
||||
"pbs" => Ok(ProductType::Pbs),
|
||||
"pom" => Ok(ProductType::Pom),
|
||||
_ => bail!("unknown product type '{s}'"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "api-types", api(
|
||||
properties: {
|
||||
status: {
|
||||
@ -237,6 +279,13 @@ impl SubscriptionInfo {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_product_type(&self) -> Result<ProductType, Error> {
|
||||
self.key
|
||||
.as_ref()
|
||||
.ok_or_else(|| format_err!("no product key set"))
|
||||
.map(|key| key[..3].parse::<ProductType>())?
|
||||
}
|
||||
}
|
||||
|
||||
/// Shortcut for md5 sums.
|
||||
|
Loading…
Reference in New Issue
Block a user