From: Stefan Hanreich <s.hanreich@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox 5/5] pbs-api-types: add fallback variants to enums in public API
Date: Thu, 20 Nov 2025 15:50:13 +0100 [thread overview]
Message-ID: <20251120145031.550340-6-s.hanreich@proxmox.com> (raw)
In-Reply-To: <20251120145031.550340-1-s.hanreich@proxmox.com>
In order to be able to provide forwards-compatibility in the Proxmox
Datacenter Manager, add fallback variants to all enums that are
exposed in the public API. This prevents breakage on PDM side whenever
a new enum variant is added in PBS.
The fallbacks are feature-guarded, so PBS can use the strict enums
without having to handle any fallback variants. This is unnecessary,
because pbs-api-types and proxmox-backup are updated in tandem, so
proxmox-backup should never run into the situation of having to handle
unknown variants. Only the datacenter manager will use this feature
flag for now, since it needs to potentially handle unknown variants.
Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
---
pbs-api-types/Cargo.toml | 4 +++
pbs-api-types/debian/control | 8 +++++-
pbs-api-types/src/crypto.rs | 6 +++++
pbs-api-types/src/datastore.rs | 36 ++++++++++++++++++++++++++
pbs-api-types/src/file_restore.rs | 6 +++++
pbs-api-types/src/jobs.rs | 13 ++++++++++
pbs-api-types/src/key_derivation.rs | 6 +++++
pbs-api-types/src/ldap.rs | 9 +++++++
pbs-api-types/src/lib.rs | 12 +++++++++
pbs-api-types/src/maintenance.rs | 6 +++++
pbs-api-types/src/metrics.rs | 10 +++++++
pbs-api-types/src/node.rs | 5 ++++
pbs-api-types/src/tape/changer.rs | 6 +++++
pbs-api-types/src/tape/device.rs | 6 +++++
pbs-api-types/src/tape/drive.rs | 9 +++++++
pbs-api-types/src/tape/media_status.rs | 6 +++++
pbs-api-types/src/zfs.rs | 8 ++++++
17 files changed, 155 insertions(+), 1 deletion(-)
diff --git a/pbs-api-types/Cargo.toml b/pbs-api-types/Cargo.toml
index dacbf6cd..eca67e9a 100644
--- a/pbs-api-types/Cargo.toml
+++ b/pbs-api-types/Cargo.toml
@@ -18,6 +18,7 @@ serde_plain.workspace = true
proxmox-auth-api = { workspace = true, features = [ "api-types" ] }
proxmox-apt-api-types.workspace = true
+proxmox-fixed-string.workspace = true
proxmox-human-byte.workspace = true
proxmox-lang.workspace=true
proxmox-s3-client = { workspace = true, features = [ "api-types" ] }
@@ -25,3 +26,6 @@ proxmox-schema = { workspace = true, features = [ "api-macro" ] }
proxmox-serde.workspace = true
proxmox-time.workspace = true
proxmox-uuid = { workspace = true, features = [ "serde" ] }
+
+[features]
+enum-fallback = []
diff --git a/pbs-api-types/debian/control b/pbs-api-types/debian/control
index 13dc4db4..cf21fdb8 100644
--- a/pbs-api-types/debian/control
+++ b/pbs-api-types/debian/control
@@ -13,6 +13,7 @@ Build-Depends-Arch: cargo:native <!nocheck>,
librust-proxmox-apt-api-types-2+default-dev (>= 2.0.2-~~) <!nocheck>,
librust-proxmox-auth-api-1+api-types-dev (>= 1.0.5-~~) <!nocheck>,
librust-proxmox-auth-api-1+default-dev (>= 1.0.5-~~) <!nocheck>,
+ librust-proxmox-fixed-string-0.1+default-dev <!nocheck>,
librust-proxmox-human-byte-1+default-dev <!nocheck>,
librust-proxmox-lang-1+default-dev (>= 1.5-~~) <!nocheck>,
librust-proxmox-s3-client-1+api-types-dev (>= 1.2-~~) <!nocheck>,
@@ -45,6 +46,7 @@ Depends:
librust-proxmox-apt-api-types-2+default-dev (>= 2.0.2-~~),
librust-proxmox-auth-api-1+api-types-dev (>= 1.0.5-~~),
librust-proxmox-auth-api-1+default-dev (>= 1.0.5-~~),
+ librust-proxmox-fixed-string-0.1+default-dev,
librust-proxmox-human-byte-1+default-dev,
librust-proxmox-lang-1+default-dev (>= 1.5-~~),
librust-proxmox-s3-client-1+api-types-dev (>= 1.2-~~),
@@ -61,11 +63,15 @@ Depends:
librust-serde-plain-1+default-dev
Provides:
librust-pbs-api-types+default-dev (= ${binary:Version}),
+ librust-pbs-api-types+enum-fallback-dev (= ${binary:Version}),
librust-pbs-api-types-1-dev (= ${binary:Version}),
librust-pbs-api-types-1+default-dev (= ${binary:Version}),
+ librust-pbs-api-types-1+enum-fallback-dev (= ${binary:Version}),
librust-pbs-api-types-1.0-dev (= ${binary:Version}),
librust-pbs-api-types-1.0+default-dev (= ${binary:Version}),
+ librust-pbs-api-types-1.0+enum-fallback-dev (= ${binary:Version}),
librust-pbs-api-types-1.0.6-dev (= ${binary:Version}),
- librust-pbs-api-types-1.0.6+default-dev (= ${binary:Version})
+ librust-pbs-api-types-1.0.6+default-dev (= ${binary:Version}),
+ librust-pbs-api-types-1.0.6+enum-fallback-dev (= ${binary:Version})
Description: API types for Proxmox Backup Server - Rust source code
Source code for Debianized Rust crate "pbs-api-types"
diff --git a/pbs-api-types/src/crypto.rs b/pbs-api-types/src/crypto.rs
index d229eee0..536c53b4 100644
--- a/pbs-api-types/src/crypto.rs
+++ b/pbs-api-types/src/crypto.rs
@@ -3,6 +3,9 @@ use std::fmt::{self, Display};
use anyhow::Error;
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::api;
#[api(default: "encrypt")]
@@ -16,6 +19,9 @@ pub enum CryptMode {
Encrypt,
/// Only sign.
SignOnly,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[derive(Debug, Eq, PartialEq, Hash, Clone, Deserialize, Serialize)]
diff --git a/pbs-api-types/src/datastore.rs b/pbs-api-types/src/datastore.rs
index a214ac25..7dd365c6 100644
--- a/pbs-api-types/src/datastore.rs
+++ b/pbs-api-types/src/datastore.rs
@@ -8,6 +8,9 @@ use anyhow::{bail, format_err, Error};
use const_format::concatcp;
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_human_byte::HumanByte;
use proxmox_schema::{
api, const_regex, ApiStringFormat, ApiType, ArraySchema, EnumEntry, IntegerSchema, ReturnType,
@@ -177,6 +180,9 @@ pub enum ChunkOrder {
/// Iterate chunks in inode order
#[default]
Inode,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api]
@@ -191,6 +197,9 @@ pub enum DataStoreMountStatus {
/// Datastore is not removable, so there is no mount status.
#[default]
NonRemovable,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api]
@@ -222,6 +231,9 @@ pub enum DatastoreFSyncLevel {
/// and consistency.
#[default]
Filesystem,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
pub const GC_ATIME_CUTOFF_SCHEMA: Schema = IntegerSchema::new(
@@ -297,6 +309,9 @@ pub enum DatastoreBackendType {
Filesystem,
/// S3 object store
S3,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
serde_plain::derive_display_from_serialize!(DatastoreBackendType);
serde_plain::derive_fromstr_from_deserialize!(DatastoreBackendType);
@@ -382,6 +397,10 @@ impl FromStr for DatastoreBackendConfig {
bail!("missing option bucket, required for backend type s3");
}
}
+ #[cfg(feature = "enum-fallback")]
+ DatastoreBackendType::UnknownEnumValue(s) => {
+ bail!("unknown backend type: {s}");
+ }
}
Ok(backend_config)
}
@@ -516,6 +535,9 @@ pub enum NotificationMode {
/// Emit notification events to the notification system
#[default]
NotificationSystem,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
impl DataStoreConfig {
@@ -576,6 +598,10 @@ impl DataStoreConfig {
}
}
}
+ #[cfg(feature = "enum-fallback")]
+ Some(MaintenanceType::UnknownEnumValue(s)) => {
+ bail!("unknown maintenance type: {s}")
+ }
None => { /* always OK */ }
}
@@ -697,6 +723,9 @@ pub enum VerifyState {
Ok,
/// Verification reported one or more errors
Failed,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
@@ -1058,6 +1087,9 @@ pub enum BackupType {
/// "Host" backups.
Host,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
// NOTE: if you add new types, don't forget to adapt the iter below!
}
@@ -1067,6 +1099,8 @@ impl BackupType {
BackupType::Vm => "vm",
BackupType::Ct => "ct",
BackupType::Host => "host",
+ #[cfg(feature = "enum-fallback")]
+ BackupType::UnknownEnumValue(_) => "unknown backup type",
}
}
@@ -1076,6 +1110,8 @@ impl BackupType {
BackupType::Ct => 0,
BackupType::Host => 1,
BackupType::Vm => 2,
+ #[cfg(feature = "enum-fallback")]
+ BackupType::UnknownEnumValue(_) => u8::MAX,
}
}
diff --git a/pbs-api-types/src/file_restore.rs b/pbs-api-types/src/file_restore.rs
index 90657d65..8093e2eb 100644
--- a/pbs-api-types/src/file_restore.rs
+++ b/pbs-api-types/src/file_restore.rs
@@ -1,5 +1,8 @@
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::api;
#[api]
@@ -27,4 +30,7 @@ pub enum FileRestoreFormat {
Zip,
/// TAR archive
Tar,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
diff --git a/pbs-api-types/src/jobs.rs b/pbs-api-types/src/jobs.rs
index 13317c9d..7e6dfb94 100644
--- a/pbs-api-types/src/jobs.rs
+++ b/pbs-api-types/src/jobs.rs
@@ -5,6 +5,9 @@ use const_format::concatcp;
use regex::Regex;
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::*;
use crate::{
@@ -134,6 +137,9 @@ pub enum Notify {
Always,
/// Send notifications for failed jobs only
Error,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
@@ -549,6 +555,9 @@ pub enum SyncDirection {
Pull,
/// Sync direction push
Push,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
impl std::fmt::Display for SyncDirection {
@@ -556,6 +565,10 @@ impl std::fmt::Display for SyncDirection {
match self {
SyncDirection::Pull => f.write_str("pull"),
SyncDirection::Push => f.write_str("push"),
+ #[cfg(feature = "enum-fallback")]
+ SyncDirection::UnknownEnumValue(s) => {
+ write!(f, "unknown sync direction: {s}")
+ }
}
}
}
diff --git a/pbs-api-types/src/key_derivation.rs b/pbs-api-types/src/key_derivation.rs
index 8d6cbc89..57ae353a 100644
--- a/pbs-api-types/src/key_derivation.rs
+++ b/pbs-api-types/src/key_derivation.rs
@@ -1,5 +1,8 @@
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::api;
use crate::CERT_FINGERPRINT_SHA256_SCHEMA;
@@ -15,6 +18,9 @@ pub enum Kdf {
Scrypt,
/// Encrtypt the Key with a password using PBKDF2
PBKDF2,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
impl Default for Kdf {
diff --git a/pbs-api-types/src/ldap.rs b/pbs-api-types/src/ldap.rs
index 51146160..ff380ffe 100644
--- a/pbs-api-types/src/ldap.rs
+++ b/pbs-api-types/src/ldap.rs
@@ -1,5 +1,8 @@
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::{api, ApiStringFormat, ApiType, ArraySchema, Schema, StringSchema, Updater};
use super::{REALM_ID_SCHEMA, SINGLE_LINE_COMMENT_SCHEMA};
@@ -18,6 +21,9 @@ pub enum LdapMode {
/// Secure LDAPS connection
#[serde(rename = "ldaps")]
Ldaps,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
@@ -145,6 +151,9 @@ pub enum RemoveVanished {
Entry,
/// Remove vanished properties from users (e.g. email)
Properties,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
pub const LDAP_DOMAIN_SCHEMA: Schema = StringSchema::new("LDAP Domain").schema();
diff --git a/pbs-api-types/src/lib.rs b/pbs-api-types/src/lib.rs
index 519f6f20..54547291 100644
--- a/pbs-api-types/src/lib.rs
+++ b/pbs-api-types/src/lib.rs
@@ -13,6 +13,9 @@ use proxmox_time::parse_daily_duration;
use proxmox_auth_api::types::{APITOKEN_ID_REGEX_STR, USER_ID_REGEX_STR};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
pub use proxmox_schema::api_types::SAFE_ID_FORMAT as PROXMOX_SAFE_ID_FORMAT;
pub use proxmox_schema::api_types::SAFE_ID_REGEX as PROXMOX_SAFE_ID_REGEX;
pub use proxmox_schema::api_types::SAFE_ID_REGEX_STR as PROXMOX_SAFE_ID_REGEX_STR;
@@ -269,6 +272,9 @@ pub enum NodePowerCommand {
Reboot,
/// Shutdown the server
Shutdown,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api()]
@@ -284,6 +290,9 @@ pub enum TaskStateType {
Error,
/// Unknown
Unknown,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
@@ -337,6 +346,9 @@ pub enum RealmType {
Ldap,
/// An Active Directory (AD) realm
Ad,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
serde_plain::derive_display_from_serialize!(RealmType);
diff --git a/pbs-api-types/src/maintenance.rs b/pbs-api-types/src/maintenance.rs
index a516a1d9..6b97ff10 100644
--- a/pbs-api-types/src/maintenance.rs
+++ b/pbs-api-types/src/maintenance.rs
@@ -2,6 +2,9 @@ use anyhow::{bail, Error};
use serde::{Deserialize, Serialize};
use std::borrow::Cow;
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::{api, const_regex, ApiStringFormat, Schema, StringSchema};
const_regex! {
@@ -51,6 +54,9 @@ pub enum MaintenanceType {
Unmount,
/// The S3 cache store is being refreshed.
S3Refresh,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
serde_plain::derive_display_from_serialize!(MaintenanceType);
serde_plain::derive_fromstr_from_deserialize!(MaintenanceType);
diff --git a/pbs-api-types/src/metrics.rs b/pbs-api-types/src/metrics.rs
index ee901276..5ce2c9fc 100644
--- a/pbs-api-types/src/metrics.rs
+++ b/pbs-api-types/src/metrics.rs
@@ -3,6 +3,10 @@ use serde::{Deserialize, Serialize};
use crate::{
HOST_PORT_SCHEMA, HTTP_URL_SCHEMA, PROXMOX_SAFE_ID_FORMAT, SINGLE_LINE_COMMENT_SCHEMA,
};
+
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::{api, Schema, StringSchema, Updater};
pub const METRIC_SERVER_ID_SCHEMA: Schema = StringSchema::new("Metrics Server ID.")
@@ -156,6 +160,9 @@ pub enum MetricServerType {
/// InfluxDB UDP
#[serde(rename = "influxdb-udp")]
InfluxDbUdp,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
@@ -249,6 +256,9 @@ pub enum MetricDataType {
Counter,
/// derive.
Derive,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
serde_plain::derive_display_from_serialize!(MetricDataType);
diff --git a/pbs-api-types/src/node.rs b/pbs-api-types/src/node.rs
index 4231f312..e5b3526c 100644
--- a/pbs-api-types/src/node.rs
+++ b/pbs-api-types/src/node.rs
@@ -3,6 +3,8 @@ use std::ffi::OsStr;
use serde::{Deserialize, Serialize};
use proxmox_auth_api::types::Authid;
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
use proxmox_schema::*;
use crate::StorageStatus;
@@ -86,6 +88,9 @@ pub enum BootMode {
Efi,
/// The BootMode is Legacy BIOS
LegacyBios,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api]
diff --git a/pbs-api-types/src/tape/changer.rs b/pbs-api-types/src/tape/changer.rs
index df3823cf..1f818844 100644
--- a/pbs-api-types/src/tape/changer.rs
+++ b/pbs-api-types/src/tape/changer.rs
@@ -2,6 +2,9 @@
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::{
api, ApiStringFormat, ArraySchema, IntegerSchema, Schema, StringSchema, Updater,
};
@@ -102,6 +105,9 @@ pub enum MtxEntryKind {
Slot,
/// Import/Export Slot
ImportExport,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
diff --git a/pbs-api-types/src/tape/device.rs b/pbs-api-types/src/tape/device.rs
index ff335cdf..0fe2ae41 100644
--- a/pbs-api-types/src/tape/device.rs
+++ b/pbs-api-types/src/tape/device.rs
@@ -1,5 +1,8 @@
use ::serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::api;
#[api()]
@@ -27,6 +30,9 @@ pub enum DeviceKind {
Changer,
/// Normal SCSI tape device
Tape,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api(
diff --git a/pbs-api-types/src/tape/drive.rs b/pbs-api-types/src/tape/drive.rs
index e00665cd..720ba5e4 100644
--- a/pbs-api-types/src/tape/drive.rs
+++ b/pbs-api-types/src/tape/drive.rs
@@ -2,6 +2,9 @@
use anyhow::{bail, Error};
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::{api, IntegerSchema, Schema, StringSchema, Updater};
use crate::{OptionalDeviceIdentification, CHANGER_NAME_SCHEMA, PROXMOX_SAFE_ID_FORMAT};
@@ -136,6 +139,9 @@ pub enum TapeDensity {
LTO8,
/// LTO9
LTO9,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
impl TryFrom<u8> for TapeDensity {
@@ -321,6 +327,9 @@ pub enum DeviceActivity {
ReadingEncrypted,
/// Writing encrypted data
WritingEncrypted,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
impl TryFrom<u8> for DeviceActivity {
diff --git a/pbs-api-types/src/tape/media_status.rs b/pbs-api-types/src/tape/media_status.rs
index fdb4e6a0..4a5cc120 100644
--- a/pbs-api-types/src/tape/media_status.rs
+++ b/pbs-api-types/src/tape/media_status.rs
@@ -1,5 +1,8 @@
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
+
use proxmox_schema::api;
#[api()]
@@ -18,4 +21,7 @@ pub enum MediaStatus {
Damaged,
/// Media is marked as retired
Retired,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
diff --git a/pbs-api-types/src/zfs.rs b/pbs-api-types/src/zfs.rs
index 57fa5cf4..2cfbd403 100644
--- a/pbs-api-types/src/zfs.rs
+++ b/pbs-api-types/src/zfs.rs
@@ -1,5 +1,7 @@
use serde::{Deserialize, Serialize};
+#[cfg(feature = "enum-fallback")]
+use proxmox_fixed_string::FixedString;
use proxmox_schema::*;
const_regex! {
@@ -35,6 +37,9 @@ pub enum ZfsCompressionType {
On,
/// Disable compression.
Off,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api()]
@@ -54,6 +59,9 @@ pub enum ZfsRaidLevel {
RaidZ2,
/// RaidZ3
RaidZ3,
+ #[cfg(feature = "enum-fallback")]
+ #[serde(untagged)]
+ UnknownEnumValue(FixedString),
}
#[api()]
--
2.47.3
_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
next prev parent reply other threads:[~2025-11-20 14:51 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-20 14:50 [pbs-devel] [RFC proxmox{, -datacenter-manager} 0/6] Add fallback variants to PBS API types Stefan Hanreich
2025-11-20 14:50 ` [pbs-devel] [PATCH proxmox 1/5] proxmox-upgrade-checks: fix meta package version check Stefan Hanreich
2025-11-20 15:04 ` Shannon Sterz
2025-11-20 15:08 ` Stefan Hanreich
2025-11-20 14:50 ` [pbs-devel] [PATCH proxmox 2/5] proxmox-fixed-string: extract FixedString into own crate Stefan Hanreich
2025-11-20 14:50 ` [pbs-devel] [PATCH proxmox 3/5] proxmox-fixed-string: implement hash trait Stefan Hanreich
2025-11-20 14:50 ` [pbs-devel] [PATCH proxmox 4/5] pve-api-types: add proxmox-fixed-string Stefan Hanreich
2025-11-20 14:50 ` Stefan Hanreich [this message]
2025-11-20 14:50 ` [pbs-devel] [PATCH proxmox-datacenter-manager 1/1] tree-wide: add enum fallback variants for pbs api types Stefan Hanreich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251120145031.550340-6-s.hanreich@proxmox.com \
--to=s.hanreich@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox