mirror of
https://git.proxmox.com/git/proxmox
synced 2025-08-07 03:02:34 +00:00
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;
|
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 check;
|
||||||
pub mod files;
|
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 anyhow::{bail, format_err, Error};
|
||||||
use openssl::hash::{hash, DigestBytes, MessageDigest};
|
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(
|
#[cfg_attr(feature = "api-types", api(
|
||||||
properties: {
|
properties: {
|
||||||
status: {
|
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.
|
/// Shortcut for md5 sums.
|
||||||
|
Loading…
Reference in New Issue
Block a user