diff --git a/pbs-api-types/src/upid.rs b/pbs-api-types/src/upid.rs index 5666df1e..9447b8a0 100644 --- a/pbs-api-types/src/upid.rs +++ b/pbs-api-types/src/upid.rs @@ -2,7 +2,7 @@ use std::sync::atomic::{AtomicUsize, Ordering}; use anyhow::{bail, Error}; -use proxmox::api::schema::{ApiStringFormat, Schema, StringSchema}; +use proxmox::api::schema::{ApiStringFormat, ApiType, Schema, StringSchema}; use proxmox::const_regex; use proxmox::sys::linux::procfs; @@ -54,13 +54,15 @@ const_regex! { pub const PROXMOX_UPID_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&PROXMOX_UPID_REGEX); -impl UPID { - pub const API_SCHEMA: Schema = StringSchema::new("Unique Process/Task Identifier") +impl ApiType for UPID { + const API_SCHEMA: Schema = StringSchema::new("Unique Process/Task Identifier") .min_length("UPID:N:12345678:12345678:12345678:::".len()) .max_length(128) // arbitrary .format(&PROXMOX_UPID_FORMAT) .schema(); +} +impl UPID { /// Create a new UPID pub fn new( worker_type: &str, diff --git a/pbs-api-types/src/userid.rs b/pbs-api-types/src/userid.rs index 8418f13e..5ecae4df 100644 --- a/pbs-api-types/src/userid.rs +++ b/pbs-api-types/src/userid.rs @@ -30,7 +30,7 @@ use lazy_static::lazy_static; use serde::{Deserialize, Serialize}; use proxmox::api::api; -use proxmox::api::schema::{ApiStringFormat, Schema, StringSchema, Updatable}; +use proxmox::api::schema::{ApiStringFormat, ApiType, Schema, StringSchema, Updatable}; use proxmox::const_regex; // we only allow a limited set of characters @@ -409,13 +409,15 @@ impl Updatable for Userid { const UPDATER_IS_OPTION: bool = true; } -impl Userid { - pub const API_SCHEMA: Schema = StringSchema::new("User ID") +impl ApiType for Userid { + const API_SCHEMA: Schema = StringSchema::new("User ID") .format(&PROXMOX_USER_ID_FORMAT) .min_length(3) .max_length(64) .schema(); +} +impl Userid { const fn new(data: String, name_len: usize) -> Self { Self { data, name_len } } @@ -538,13 +540,22 @@ pub struct Authid { tokenname: Option } -impl Authid { - pub const API_SCHEMA: Schema = StringSchema::new("Authentication ID") + +impl Updatable for Authid { + type Updater = Option; + + const UPDATER_IS_OPTION: bool = true; +} + +impl ApiType for Authid { + const API_SCHEMA: Schema = StringSchema::new("Authentication ID") .format(&PROXMOX_AUTH_ID_FORMAT) .min_length(3) .max_length(64) .schema(); +} +impl Authid { const fn new(user: Userid, tokenname: Option) -> Self { Self { user, tokenname } } diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs index aa754808..b0a5b0d2 100644 --- a/src/api2/config/datastore.rs +++ b/src/api2/config/datastore.rs @@ -6,7 +6,7 @@ use ::serde::{Deserialize, Serialize}; use proxmox::api::{api, Router, RpcEnvironment, Permission}; use proxmox::api::section_config::SectionConfigData; -use proxmox::api::schema::parse_property_string; +use proxmox::api::schema::{ApiType, parse_property_string}; use pbs_datastore::task::TaskState; use crate::api2::config::sync::delete_sync_job; diff --git a/src/api2/types/acme.rs b/src/api2/types/acme.rs index 87b86537..4370d6a6 100644 --- a/src/api2/types/acme.rs +++ b/src/api2/types/acme.rs @@ -1,7 +1,7 @@ use serde::{Deserialize, Serialize}; use serde_json::Value; -use proxmox::api::{api, schema::{Schema, StringSchema, ApiStringFormat}}; +use proxmox::api::{api, schema::{ApiType, Schema, StringSchema, ApiStringFormat}}; use crate::api2::types::{ DNS_ALIAS_FORMAT, DNS_NAME_FORMAT, PROXMOX_SAFE_ID_FORMAT, diff --git a/src/api2/types/tape/media_location.rs b/src/api2/types/tape/media_location.rs index 031369e3..6040655a 100644 --- a/src/api2/types/tape/media_location.rs +++ b/src/api2/types/tape/media_location.rs @@ -35,8 +35,8 @@ pub enum MediaLocation { proxmox::forward_deserialize_to_from_str!(MediaLocation); proxmox::forward_serialize_to_display!(MediaLocation); -impl MediaLocation { - pub const API_SCHEMA: Schema = StringSchema::new( +impl proxmox::api::schema::ApiType for MediaLocation { + const API_SCHEMA: Schema = StringSchema::new( "Media location (e.g. 'offline', 'online-', 'vault-')") .format(&ApiStringFormat::VerifyFn(|text| { let location: MediaLocation = text.parse()?; diff --git a/src/bin/docgen.rs b/src/bin/docgen.rs index 3a387e1c..1fba9baf 100644 --- a/src/bin/docgen.rs +++ b/src/bin/docgen.rs @@ -4,6 +4,7 @@ use serde_json::{json, Value}; use proxmox::{ api::{ schema::{ + ApiType, Schema, ObjectSchemaType, ApiStringFormat, diff --git a/src/bin/proxmox_backup_client/benchmark.rs b/src/bin/proxmox_backup_client/benchmark.rs index 442bd03f..9f205c27 100644 --- a/src/bin/proxmox_backup_client/benchmark.rs +++ b/src/bin/proxmox_backup_client/benchmark.rs @@ -16,6 +16,7 @@ use proxmox::api::{ default_table_format_options, }, router::ReturnType, + schema::ApiType, }; use pbs_client::tools::key_source::get_encryption_key_password; diff --git a/src/bin/proxmox_backup_client/key.rs b/src/bin/proxmox_backup_client/key.rs index cd2958ba..c06926e3 100644 --- a/src/bin/proxmox_backup_client/key.rs +++ b/src/bin/proxmox_backup_client/key.rs @@ -10,6 +10,7 @@ use proxmox::api::cli::{ OUTPUT_FORMAT, }; use proxmox::api::router::ReturnType; +use proxmox::api::schema::ApiType; use proxmox::sys::linux::tty; use proxmox::tools::fs::{file_get_contents, replace_file, CreateOptions}; diff --git a/src/config/datastore.rs b/src/config/datastore.rs index 5409c7c2..cfa03547 100644 --- a/src/config/datastore.rs +++ b/src/config/datastore.rs @@ -5,7 +5,7 @@ use serde::{Serialize, Deserialize}; use proxmox::api::{ api, - schema::{Schema, StringSchema, Updater}, + schema::{ApiType, Schema, StringSchema, Updater}, section_config::{ SectionConfig, SectionConfigData, diff --git a/src/config/node.rs b/src/config/node.rs index c03078bb..a46aabed 100644 --- a/src/config/node.rs +++ b/src/config/node.rs @@ -4,7 +4,7 @@ use anyhow::{bail, Error}; use serde::{Deserialize, Serialize}; use proxmox::api::api; -use proxmox::api::schema::{ApiStringFormat, Updater}; +use proxmox::api::schema::{ApiStringFormat, ApiType, Updater}; use proxmox_http::ProxyConfig; diff --git a/src/server/email_notifications.rs b/src/server/email_notifications.rs index 2362b673..70830915 100644 --- a/src/server/email_notifications.rs +++ b/src/server/email_notifications.rs @@ -4,7 +4,7 @@ use serde_json::json; use handlebars::{Handlebars, Helper, Context, RenderError, RenderContext, Output, HelperResult, TemplateError}; use proxmox::tools::email::sendmail; -use proxmox::api::schema::parse_property_string; +use proxmox::api::schema::{ApiType, parse_property_string}; use proxmox::try_block; use pbs_tools::format::HumanByte; diff --git a/src/tools/config.rs b/src/tools/config.rs index 499bd187..f908d67c 100644 --- a/src/tools/config.rs +++ b/src/tools/config.rs @@ -152,6 +152,8 @@ fn object_to_writer(output: &mut dyn Write, object: &Object) -> Result<(), Error #[test] fn test() { + use proxmox::api::schema::ApiType; + // let's just reuse some schema we actually have available: use crate::config::node::NodeConfig;