From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 7DE19627E5 for ; Tue, 22 Feb 2022 09:47:22 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 75A8C21F60 for ; Tue, 22 Feb 2022 09:47:22 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 9233221F56 for ; Tue, 22 Feb 2022 09:47:20 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 6AF094611D for ; Tue, 22 Feb 2022 09:47:20 +0100 (CET) From: Wolfgang Bumiller To: pbs-devel@lists.proxmox.com Date: Tue, 22 Feb 2022 09:47:17 +0100 Message-Id: <20220222084717.60064-2-w.bumiller@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220222084717.60064-1-w.bumiller@proxmox.com> References: <20220222084717.60064-1-w.bumiller@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.378 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [acl.rs, config.rs, plugin.rs, sync.rs, domains.rs, verify.rs, datastore.rs, drive.rs, user.rs, remote.rs] Subject: [pbs-devel] [PATCH backup] constify schema usage and dedup some code X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Feb 2022 08:47:22 -0000 Signed-off-by: Wolfgang Bumiller --- pbs-config/src/acl.rs | 12 ++--- pbs-config/src/datastore.rs | 12 ++--- pbs-config/src/domains.rs | 12 ++--- pbs-config/src/drive.rs | 23 +++----- pbs-config/src/media_pool.rs | 7 +-- pbs-config/src/remote.rs | 9 ++-- pbs-config/src/sync.rs | 11 ++-- pbs-config/src/tape_job.rs | 12 ++--- pbs-config/src/traffic_control.rs | 10 ++-- pbs-config/src/user.rs | 16 +++--- pbs-config/src/verify.rs | 10 ++-- src/config/acme/plugin.rs | 16 +++--- src/tools/systemd/config.rs | 88 +++++++++---------------------- 13 files changed, 83 insertions(+), 155 deletions(-) diff --git a/pbs-config/src/acl.rs b/pbs-config/src/acl.rs index 13af45a9..28f0f686 100644 --- a/pbs-config/src/acl.rs +++ b/pbs-config/src/acl.rs @@ -8,7 +8,7 @@ use anyhow::{bail, Error}; use lazy_static::lazy_static; -use proxmox_schema::{ApiStringFormat, ApiType, Schema, StringSchema}; +use proxmox_schema::ApiType; use pbs_api_types::{Authid, Userid, Role, ROLE_NAME_NO_ACCESS}; @@ -20,12 +20,12 @@ lazy_static! { pub static ref ROLE_NAMES: HashMap<&'static str, (u64, &'static str)> = { let mut map = HashMap::new(); - let list = match Role::API_SCHEMA { - Schema::String(StringSchema { format: Some(ApiStringFormat::Enum(list)), .. }) => list, - _ => unreachable!(), - }; + const ROLE_SCHEMA_ENUM_LIST: &'static [proxmox_schema::EnumEntry] = Role::API_SCHEMA + .unwrap_string_schema() + .unwrap_format() + .unwrap_enum_format(); - for entry in list.iter() { + for entry in ROLE_SCHEMA_ENUM_LIST { let privs: u64 = Role::from_str(entry.value).unwrap() as u64; map.insert(entry.value, (privs, entry.description)); } diff --git a/pbs-config/src/datastore.rs b/pbs-config/src/datastore.rs index 12071a9f..dc56e0c3 100644 --- a/pbs-config/src/datastore.rs +++ b/pbs-config/src/datastore.rs @@ -2,7 +2,7 @@ use anyhow::{Error}; use lazy_static::lazy_static; use std::collections::HashMap; -use proxmox_schema::{ApiType, Schema}; +use proxmox_schema::ApiType; use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin}; use pbs_api_types::{DataStoreConfig, DATASTORE_SCHEMA}; @@ -14,12 +14,10 @@ lazy_static! { } fn init() -> SectionConfig { - let obj_schema = match DataStoreConfig::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - - let plugin = SectionConfigPlugin::new("datastore".to_string(), Some(String::from("name")), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::ObjectSchema = + DataStoreConfig::API_SCHEMA.unwrap_object_schema(); + let plugin = + SectionConfigPlugin::new("datastore".to_string(), Some(String::from("name")), OBJ_SCHEMA); let mut config = SectionConfig::new(&DATASTORE_SCHEMA); config.register_plugin(plugin); diff --git a/pbs-config/src/domains.rs b/pbs-config/src/domains.rs index 90a83bc6..12a58048 100644 --- a/pbs-config/src/domains.rs +++ b/pbs-config/src/domains.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use anyhow::{Error}; use lazy_static::lazy_static; -use proxmox_schema::{ApiType, Schema}; +use proxmox_schema::ApiType; use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin}; use pbs_api_types::{OpenIdRealmConfig, REALM_ID_SCHEMA}; @@ -15,12 +15,10 @@ lazy_static! { fn init() -> SectionConfig { - let obj_schema = match OpenIdRealmConfig::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - - let plugin = SectionConfigPlugin::new("openid".to_string(), Some(String::from("realm")), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::ObjectSchema = + OpenIdRealmConfig::API_SCHEMA.unwrap_object_schema(); + let plugin = + SectionConfigPlugin::new("openid".to_string(), Some(String::from("realm")), OBJ_SCHEMA); let mut config = SectionConfig::new(&REALM_ID_SCHEMA); config.register_plugin(plugin); diff --git a/pbs-config/src/drive.rs b/pbs-config/src/drive.rs index 13be8841..66aa3c78 100644 --- a/pbs-config/src/drive.rs +++ b/pbs-config/src/drive.rs @@ -35,25 +35,18 @@ lazy_static! { fn init() -> SectionConfig { let mut config = SectionConfig::new(&DRIVE_NAME_SCHEMA); - let obj_schema = match VirtualTapeDrive::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - let plugin = SectionConfigPlugin::new("virtual".to_string(), Some("name".to_string()), obj_schema); + const VIRT_SCHEMA: &ObjectSchema = VirtualTapeDrive::API_SCHEMA.unwrap_object_schema(); + let plugin = + SectionConfigPlugin::new("virtual".to_string(), Some("name".to_string()), VIRT_SCHEMA); config.register_plugin(plugin); - let obj_schema = match LtoTapeDrive::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - let plugin = SectionConfigPlugin::new("lto".to_string(), Some("name".to_string()), obj_schema); + const LTO_SCHEMA: &ObjectSchema = LtoTapeDrive::API_SCHEMA.unwrap_object_schema(); + let plugin = SectionConfigPlugin::new("lto".to_string(), Some("name".to_string()), LTO_SCHEMA); config.register_plugin(plugin); - let obj_schema = match ScsiTapeChanger::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - let plugin = SectionConfigPlugin::new("changer".to_string(), Some("name".to_string()), obj_schema); + const CHANGER_SCHEMA: &ObjectSchema = ScsiTapeChanger::API_SCHEMA.unwrap_object_schema(); + let plugin = + SectionConfigPlugin::new("changer".to_string(), Some("name".to_string()), CHANGER_SCHEMA); config.register_plugin(plugin); config } diff --git a/pbs-config/src/media_pool.rs b/pbs-config/src/media_pool.rs index 35a2924e..40403d27 100644 --- a/pbs-config/src/media_pool.rs +++ b/pbs-config/src/media_pool.rs @@ -26,11 +26,8 @@ lazy_static! { fn init() -> SectionConfig { let mut config = SectionConfig::new(&MEDIA_POOL_NAME_SCHEMA); - let obj_schema = match MediaPoolConfig::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - let plugin = SectionConfigPlugin::new("pool".to_string(), Some("name".to_string()), obj_schema); + const OBJ_SCHEMA: &ObjectSchema = MediaPoolConfig::API_SCHEMA.unwrap_object_schema(); + let plugin = SectionConfigPlugin::new("pool".to_string(), Some("name".to_string()), OBJ_SCHEMA); config.register_plugin(plugin); config diff --git a/pbs-config/src/remote.rs b/pbs-config/src/remote.rs index 921410e2..81da3574 100644 --- a/pbs-config/src/remote.rs +++ b/pbs-config/src/remote.rs @@ -15,12 +15,9 @@ lazy_static! { } fn init() -> SectionConfig { - let obj_schema = match Remote::API_SCHEMA { - Schema::AllOf(ref allof_schema) => allof_schema, - _ => unreachable!(), - }; - - let plugin = SectionConfigPlugin::new("remote".to_string(), Some("name".to_string()), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::AllOfSchema = Remote::API_SCHEMA.unwrap_all_of_schema(); + let plugin = + SectionConfigPlugin::new("remote".to_string(), Some("name".to_string()), OBJ_SCHEMA); let mut config = SectionConfig::new(&REMOTE_ID_SCHEMA); config.register_plugin(plugin); diff --git a/pbs-config/src/sync.rs b/pbs-config/src/sync.rs index f515613f..a9e137b6 100644 --- a/pbs-config/src/sync.rs +++ b/pbs-config/src/sync.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use anyhow::Error; use lazy_static::lazy_static; -use proxmox_schema::{ApiType, Schema}; +use proxmox_schema::ApiType; use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin}; use pbs_api_types::{JOB_ID_SCHEMA, SyncJobConfig}; @@ -16,12 +16,9 @@ lazy_static! { fn init() -> SectionConfig { - let obj_schema = match SyncJobConfig::API_SCHEMA { - Schema::AllOf(ref allof_schema) => allof_schema, - _ => unreachable!(), - }; - - let plugin = SectionConfigPlugin::new("sync".to_string(), Some(String::from("id")), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::AllOfSchema = + SyncJobConfig::API_SCHEMA.unwrap_all_of_schema(); + let plugin = SectionConfigPlugin::new("sync".to_string(), Some(String::from("id")), OBJ_SCHEMA); let mut config = SectionConfig::new(&JOB_ID_SCHEMA); config.register_plugin(plugin); diff --git a/pbs-config/src/tape_job.rs b/pbs-config/src/tape_job.rs index 992d4382..f208f7a1 100644 --- a/pbs-config/src/tape_job.rs +++ b/pbs-config/src/tape_job.rs @@ -2,7 +2,7 @@ use anyhow::{Error}; use lazy_static::lazy_static; use std::collections::HashMap; -use proxmox_schema::{Schema, ApiType}; +use proxmox_schema::ApiType; use proxmox_section_config::{SectionConfig, SectionConfigData, SectionConfigPlugin}; use pbs_api_types::{TapeBackupJobConfig, JOB_ID_SCHEMA}; @@ -14,12 +14,10 @@ lazy_static! { } fn init() -> SectionConfig { - let obj_schema = match TapeBackupJobConfig::API_SCHEMA { - Schema::AllOf(ref allof_schema) => allof_schema, - _ => unreachable!(), - }; - - let plugin = SectionConfigPlugin::new("backup".to_string(), Some(String::from("id")), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::AllOfSchema = + TapeBackupJobConfig::API_SCHEMA.unwrap_all_of_schema(); + let plugin = + SectionConfigPlugin::new("backup".to_string(), Some(String::from("id")), OBJ_SCHEMA); let mut config = SectionConfig::new(&JOB_ID_SCHEMA); config.register_plugin(plugin); diff --git a/pbs-config/src/traffic_control.rs b/pbs-config/src/traffic_control.rs index 860d0fb7..98b6a544 100644 --- a/pbs-config/src/traffic_control.rs +++ b/pbs-config/src/traffic_control.rs @@ -4,7 +4,7 @@ use std::collections::HashMap; use anyhow::Error; use lazy_static::lazy_static; -use proxmox_schema::{ApiType, Schema}; +use proxmox_schema::ApiType; use pbs_api_types::{TrafficControlRule, TRAFFIC_CONTROL_ID_SCHEMA}; @@ -21,11 +21,9 @@ lazy_static! { fn init() -> SectionConfig { let mut config = SectionConfig::new(&TRAFFIC_CONTROL_ID_SCHEMA); - let obj_schema = match TrafficControlRule::API_SCHEMA { - Schema::AllOf(ref allof_schema) => allof_schema, - _ => unreachable!(), - }; - let plugin = SectionConfigPlugin::new("rule".to_string(), Some("name".to_string()), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::AllOfSchema = + TrafficControlRule::API_SCHEMA.unwrap_all_of_schema(); + let plugin = SectionConfigPlugin::new("rule".to_string(), Some("name".to_string()), OBJ_SCHEMA); config.register_plugin(plugin); config diff --git a/pbs-config/src/user.rs b/pbs-config/src/user.rs index f62d45db..a69865a9 100644 --- a/pbs-config/src/user.rs +++ b/pbs-config/src/user.rs @@ -22,18 +22,14 @@ lazy_static! { fn init() -> SectionConfig { let mut config = SectionConfig::new(&Authid::API_SCHEMA); - let user_schema = match User::API_SCHEMA { - Schema::Object(ref user_schema) => user_schema, - _ => unreachable!(), - }; - let user_plugin = SectionConfigPlugin::new("user".to_string(), Some("userid".to_string()), user_schema); + const USER_SCHEMA: &ObjectSchema = User::API_SCHEMA.unwrap_object_schema(); + let user_plugin = + SectionConfigPlugin::new("user".to_string(), Some("userid".to_string()), USER_SCHEMA); config.register_plugin(user_plugin); - let token_schema = match ApiToken::API_SCHEMA { - Schema::Object(ref token_schema) => token_schema, - _ => unreachable!(), - }; - let token_plugin = SectionConfigPlugin::new("token".to_string(), Some("tokenid".to_string()), token_schema); + const TOKEN_SCHEMA: &ObjectSchema = ApiToken::API_SCHEMA.unwrap_object_schema(); + let token_plugin = + SectionConfigPlugin::new("token".to_string(), Some("tokenid".to_string()), TOKEN_SCHEMA); config.register_plugin(token_plugin); config diff --git a/pbs-config/src/verify.rs b/pbs-config/src/verify.rs index b6c70caa..efe22996 100644 --- a/pbs-config/src/verify.rs +++ b/pbs-config/src/verify.rs @@ -15,12 +15,10 @@ lazy_static! { } fn init() -> SectionConfig { - let obj_schema = match VerificationJobConfig::API_SCHEMA { - Schema::Object(ref obj_schema) => obj_schema, - _ => unreachable!(), - }; - - let plugin = SectionConfigPlugin::new("verification".to_string(), Some(String::from("id")), obj_schema); + const OBJ_SCHEMA: &proxmox_schema::ObjectSchema = + VerificationJobConfig::API_SCHEMA.unwrap_object_schema(); + let plugin = + SectionConfigPlugin::new("verification".to_string(), Some(String::from("id")), OBJ_SCHEMA); let mut config = SectionConfig::new(&JOB_ID_SCHEMA); config.register_plugin(plugin); diff --git a/src/config/acme/plugin.rs b/src/config/acme/plugin.rs index 5decc154..1788267f 100644 --- a/src/config/acme/plugin.rs +++ b/src/config/acme/plugin.rs @@ -107,25 +107,21 @@ impl DnsPlugin { fn init() -> SectionConfig { let mut config = SectionConfig::new(&PLUGIN_ID_SCHEMA); - let standalone_schema = match &StandalonePlugin::API_SCHEMA { - Schema::Object(schema) => schema, - _ => unreachable!(), - }; + const STANDALONE_SCHEMA: &proxmox_schema::ObjectSchema = + StandalonePlugin::API_SCHEMA.unwrap_object_schema(); let standalone_plugin = SectionConfigPlugin::new( "standalone".to_string(), Some("id".to_string()), - standalone_schema, + STANDALONE_SCHEMA, ); config.register_plugin(standalone_plugin); - let dns_challenge_schema = match DnsPlugin::API_SCHEMA { - Schema::AllOf(ref schema) => schema, - _ => unreachable!(), - }; + const DNS_CHALLENGE_SCHEMA: &proxmox_schema::AllOfSchema = + DnsPlugin::API_SCHEMA.unwrap_all_of_schema(); let dns_challenge_plugin = SectionConfigPlugin::new( "dns".to_string(), Some("id".to_string()), - dns_challenge_schema, + DNS_CHALLENGE_SCHEMA, ); config.register_plugin(dns_challenge_plugin); diff --git a/src/tools/systemd/config.rs b/src/tools/systemd/config.rs index 95c1a942..8dae1bf5 100644 --- a/src/tools/systemd/config.rs +++ b/src/tools/systemd/config.rs @@ -15,31 +15,25 @@ lazy_static! { pub static ref MOUNT_CONFIG: SectionConfig = init_mount(); } +fn register_unit_section(config: &mut SectionConfig) { + const UNIT_SCHEMA: &ObjectSchema = SystemdUnitSection::API_SCHEMA.unwrap_object_schema(); + config.register_plugin(SectionConfigPlugin::new("Unit".to_string(), None, UNIT_SCHEMA)); +} + +fn register_install_section(config: &mut SectionConfig) { + const INSTALL_SCHEMA: &ObjectSchema = SystemdInstallSection::API_SCHEMA.unwrap_object_schema(); + config.register_plugin(SectionConfigPlugin::new("Install".to_string(), None, INSTALL_SCHEMA)); +} + fn init_service() -> SectionConfig { let mut config = SectionConfig::with_systemd_syntax(&SYSTEMD_SECTION_NAME_SCHEMA); - match SystemdUnitSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Unit".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; - match SystemdInstallSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Install".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; - match SystemdServiceSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Service".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; + register_unit_section(&mut config); + register_install_section(&mut config); + + const SERVICE_SCHEMA: &ObjectSchema = SystemdServiceSection::API_SCHEMA.unwrap_object_schema(); + config.register_plugin(SectionConfigPlugin::new("Service".to_string(), None, SERVICE_SCHEMA)); config } @@ -48,27 +42,11 @@ fn init_timer() -> SectionConfig { let mut config = SectionConfig::with_systemd_syntax(&SYSTEMD_SECTION_NAME_SCHEMA); - match SystemdUnitSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Unit".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; - match SystemdInstallSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Install".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; - match SystemdTimerSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Timer".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; + register_unit_section(&mut config); + register_install_section(&mut config); + + const TIMER_SCHEMA: &ObjectSchema = SystemdTimerSection::API_SCHEMA.unwrap_object_schema(); + config.register_plugin(SectionConfigPlugin::new("Timer".to_string(), None, TIMER_SCHEMA)); config } @@ -77,27 +55,11 @@ fn init_mount() -> SectionConfig { let mut config = SectionConfig::with_systemd_syntax(&SYSTEMD_SECTION_NAME_SCHEMA); - match SystemdUnitSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Unit".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; - match SystemdInstallSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Install".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; - match SystemdMountSection::API_SCHEMA { - Schema::Object(ref obj_schema) => { - let plugin = SectionConfigPlugin::new("Mount".to_string(), None, obj_schema); - config.register_plugin(plugin); - } - _ => unreachable!(), - }; + register_unit_section(&mut config); + register_install_section(&mut config); + + const MOUNT_SCHEMA: &ObjectSchema = SystemdMountSection::API_SCHEMA.unwrap_object_schema(); + config.register_plugin(SectionConfigPlugin::new("Mount".to_string(), None, MOUNT_SCHEMA)); config } -- 2.30.2