apt-api-types: use serde-plain to display/parse enums

Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
This commit is contained in:
Dietmar Maurer 2024-06-27 18:53:21 +02:00 committed by Wolfgang Bumiller
parent b11dbfd105
commit 960131925e
3 changed files with 12 additions and 46 deletions

View File

@ -9,7 +9,7 @@ exclude.workspace = true
description = "APT API type definitions." description = "APT API type definitions."
[dependencies] [dependencies]
anyhow.workspace = true
serde = { workspace = true, features = ["derive"] } serde = { workspace = true, features = ["derive"] }
serde_plain.workspace = true
proxmox-schema = { workspace = true, features = ["api-macro"] } proxmox-schema = { workspace = true, features = ["api-macro"] }
proxmox-config-digest.workspace = true proxmox-config-digest.workspace = true

View File

@ -6,12 +6,12 @@ Build-Depends: debhelper (>= 12),
cargo:native <!nocheck>, cargo:native <!nocheck>,
rustc:native <!nocheck>, rustc:native <!nocheck>,
libstd-rust-dev <!nocheck>, libstd-rust-dev <!nocheck>,
librust-anyhow-1+default-dev <!nocheck>,
librust-proxmox-config-digest-0.1+default-dev <!nocheck>, librust-proxmox-config-digest-0.1+default-dev <!nocheck>,
librust-proxmox-schema-3+api-macro-dev (>= 3.1.1-~~) <!nocheck>, librust-proxmox-schema-3+api-macro-dev (>= 3.1.1-~~) <!nocheck>,
librust-proxmox-schema-3+default-dev (>= 3.1.1-~~) <!nocheck>, librust-proxmox-schema-3+default-dev (>= 3.1.1-~~) <!nocheck>,
librust-serde-1+default-dev <!nocheck>, librust-serde-1+default-dev <!nocheck>,
librust-serde-1+derive-dev <!nocheck> librust-serde-1+derive-dev <!nocheck>,
librust-serde-plain-1+default-dev <!nocheck>
Maintainer: Proxmox Support Team <support@proxmox.com> Maintainer: Proxmox Support Team <support@proxmox.com>
Standards-Version: 4.6.2 Standards-Version: 4.6.2
Vcs-Git: git://git.proxmox.com/git/proxmox-apt.git Vcs-Git: git://git.proxmox.com/git/proxmox-apt.git
@ -24,12 +24,12 @@ Architecture: any
Multi-Arch: same Multi-Arch: same
Depends: Depends:
${misc:Depends}, ${misc:Depends},
librust-anyhow-1+default-dev,
librust-proxmox-config-digest-0.1+default-dev, librust-proxmox-config-digest-0.1+default-dev,
librust-proxmox-schema-3+api-macro-dev (>= 3.1.1-~~), librust-proxmox-schema-3+api-macro-dev (>= 3.1.1-~~),
librust-proxmox-schema-3+default-dev (>= 3.1.1-~~), librust-proxmox-schema-3+default-dev (>= 3.1.1-~~),
librust-serde-1+default-dev, librust-serde-1+default-dev,
librust-serde-1+derive-dev librust-serde-1+derive-dev,
librust-serde-plain-1+default-dev
Provides: Provides:
librust-proxmox-apt-api-types+default-dev (= ${binary:Version}), librust-proxmox-apt-api-types+default-dev (= ${binary:Version}),
librust-proxmox-apt-api-types-1-dev (= ${binary:Version}), librust-proxmox-apt-api-types-1-dev (= ${binary:Version}),

View File

@ -1,6 +1,5 @@
use std::fmt::Display; use std::fmt::Display;
use anyhow::{bail, Error};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use proxmox_config_digest::ConfigDigest; use proxmox_config_digest::ConfigDigest;
@ -16,26 +15,8 @@ pub enum APTRepositoryFileType {
Sources, Sources,
} }
impl TryFrom<&str> for APTRepositoryFileType { serde_plain::derive_display_from_serialize!(APTRepositoryFileType);
type Error = Error; serde_plain::derive_fromstr_from_deserialize!(APTRepositoryFileType);
fn try_from(file_type: &str) -> Result<Self, Error> {
match file_type {
"list" => Ok(APTRepositoryFileType::List),
"sources" => Ok(APTRepositoryFileType::Sources),
_ => bail!("invalid file type '{file_type}'"),
}
}
}
impl Display for APTRepositoryFileType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
APTRepositoryFileType::List => write!(f, "list"),
APTRepositoryFileType::Sources => write!(f, "sources"),
}
}
}
#[api] #[api]
#[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)] #[derive(Debug, Copy, Clone, Serialize, Deserialize, PartialEq, Eq)]
@ -47,26 +28,8 @@ pub enum APTRepositoryPackageType {
DebSrc, DebSrc,
} }
impl TryFrom<&str> for APTRepositoryPackageType { serde_plain::derive_display_from_serialize!(APTRepositoryPackageType);
type Error = Error; serde_plain::derive_fromstr_from_deserialize!(APTRepositoryPackageType);
fn try_from(package_type: &str) -> Result<Self, Error> {
match package_type {
"deb" => Ok(APTRepositoryPackageType::Deb),
"deb-src" => Ok(APTRepositoryPackageType::DebSrc),
_ => bail!("invalid package type '{package_type}'"),
}
}
}
impl Display for APTRepositoryPackageType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
APTRepositoryPackageType::Deb => write!(f, "deb"),
APTRepositoryPackageType::DebSrc => write!(f, "deb-src"),
}
}
}
#[api( #[api(
properties: { properties: {
@ -327,6 +290,9 @@ pub enum APTRepositoryHandle {
CephReefTest, CephReefTest,
} }
serde_plain::derive_display_from_serialize!(APTRepositoryHandle);
serde_plain::derive_fromstr_from_deserialize!(APTRepositoryHandle);
#[api()] #[api()]
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")] #[serde(rename_all = "PascalCase")]