From 3e8b0ee567678846dabc6e8f6b87f29f1fe8dff8 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 8 May 2024 10:28:34 +0200 Subject: [PATCH] system-config-api: use cargo features to sparate functionality Signed-off-by: Dietmar Maurer --- proxmox-system-config-api/Cargo.toml | 20 +++++++++++-- .../src/{ => dns}/api_types.rs | 26 ----------------- proxmox-system-config-api/src/dns/mod.rs | 7 +++++ .../src/{ => dns}/resolv_conf.rs | 6 ++-- proxmox-system-config-api/src/lib.rs | 14 ++------- .../src/time/api_types.rs | 29 +++++++++++++++++++ proxmox-system-config-api/src/time/mod.rs | 7 +++++ .../src/{time.rs => time/time_impl.rs} | 2 +- 8 files changed, 67 insertions(+), 44 deletions(-) rename proxmox-system-config-api/src/{ => dns}/api_types.rs (79%) create mode 100644 proxmox-system-config-api/src/dns/mod.rs rename proxmox-system-config-api/src/{ => dns}/resolv_conf.rs (97%) create mode 100644 proxmox-system-config-api/src/time/api_types.rs create mode 100644 proxmox-system-config-api/src/time/mod.rs rename proxmox-system-config-api/src/{time.rs => time/time_impl.rs} (97%) diff --git a/proxmox-system-config-api/Cargo.toml b/proxmox-system-config-api/Cargo.toml index 37850699..1ee00ec9 100644 --- a/proxmox-system-config-api/Cargo.toml +++ b/proxmox-system-config-api/Cargo.toml @@ -22,7 +22,21 @@ proxmox-schema = { workspace = true, features = ["api-macro", "api-types"] } proxmox-time = { workspace = true, optional = true } proxmox-product-config = { workspace = true, optional = true } - [features] -default = [ "proxmox-product-config/default" ] -impl = [ "dep:proxmox-sys", "dep:proxmox-time", "proxmox-product-config/impl"] \ No newline at end of file +default = [] +dns = ["dep:proxmox-product-config"] +dns-impl = [ + "dns", + "dep:proxmox-product-config", + "proxmox-product-config?/impl", + "dep:proxmox-sys", + "dep:proxmox-time", +] +time = [] +time-impl = [ + "time", + "dep:proxmox-product-config", + "proxmox-product-config?/impl", + "dep:proxmox-sys", + "dep:proxmox-time", +] diff --git a/proxmox-system-config-api/src/api_types.rs b/proxmox-system-config-api/src/dns/api_types.rs similarity index 79% rename from proxmox-system-config-api/src/api_types.rs rename to proxmox-system-config-api/src/dns/api_types.rs index 6daf0ed9..4b9b8fb9 100644 --- a/proxmox-system-config-api/src/api_types.rs +++ b/proxmox-system-config-api/src/dns/api_types.rs @@ -2,7 +2,6 @@ use serde::{Deserialize, Serialize}; use proxmox_schema::api; use proxmox_schema::api_types::IP_FORMAT; -use proxmox_schema::api_types::TIME_ZONE_SCHEMA; use proxmox_schema::Schema; use proxmox_schema::StringSchema; @@ -93,28 +92,3 @@ pub enum DeletableResolvConfProperty { /// Delete third nameserver entry Dns3, } - -#[api( - properties: { - timezone: { - schema: TIME_ZONE_SCHEMA, - }, - time: { - type: i64, - description: "Seconds since 1970-01-01 00:00:00 UTC.", - minimum: 1_297_163_644, - }, - localtime: { - type: i64, - description: "Seconds since 1970-01-01 00:00:00 UTC. (local time)", - minimum: 1_297_163_644, - }, - } -)] -#[derive(Serialize, Deserialize)] -/// Server time and timezone. -pub struct ServerTimeInfo { - pub timezone: String, - pub time: i64, - pub localtime: i64, -} diff --git a/proxmox-system-config-api/src/dns/mod.rs b/proxmox-system-config-api/src/dns/mod.rs new file mode 100644 index 00000000..0e55aeb4 --- /dev/null +++ b/proxmox-system-config-api/src/dns/mod.rs @@ -0,0 +1,7 @@ +mod api_types; +pub use api_types::*; + +#[cfg(feature = "dns-impl")] +mod resolv_conf; +#[cfg(feature = "dns-impl")] +pub use resolv_conf::*; diff --git a/proxmox-system-config-api/src/resolv_conf.rs b/proxmox-system-config-api/src/dns/resolv_conf.rs similarity index 97% rename from proxmox-system-config-api/src/resolv_conf.rs rename to proxmox-system-config-api/src/dns/resolv_conf.rs index ddcab6ad..50419c50 100644 --- a/proxmox-system-config-api/src/resolv_conf.rs +++ b/proxmox-system-config-api/src/dns/resolv_conf.rs @@ -13,9 +13,9 @@ use proxmox_sys::fs::CreateOptions; use proxmox_schema::api_types::IPRE_STR; -use crate::DeletableResolvConfProperty; -use crate::ResolvConf; -use crate::ResolvConfWithDigest; +use super::DeletableResolvConfProperty; +use super::ResolvConf; +use super::ResolvConfWithDigest; static RESOLV_CONF_FN: &str = "/etc/resolv.conf"; diff --git a/proxmox-system-config-api/src/lib.rs b/proxmox-system-config-api/src/lib.rs index 1d0894ab..07b9b0d1 100644 --- a/proxmox-system-config-api/src/lib.rs +++ b/proxmox-system-config-api/src/lib.rs @@ -1,13 +1,5 @@ -mod api_types; -pub use api_types::ServerTimeInfo; -pub use api_types::{DeletableResolvConfProperty, ResolvConf, ResolvConfWithDigest}; -pub use api_types::{ - FIRST_DNS_SERVER_SCHEMA, SEARCH_DOMAIN_SCHEMA, SECOND_DNS_SERVER_SCHEMA, - THIRD_DNS_SERVER_SCHEMA, -}; +#[cfg(feature = "dns")] +pub mod dns; -#[cfg(feature = "impl")] -pub mod resolv_conf; - -#[cfg(feature = "impl")] +#[cfg(feature = "time")] pub mod time; diff --git a/proxmox-system-config-api/src/time/api_types.rs b/proxmox-system-config-api/src/time/api_types.rs new file mode 100644 index 00000000..53764888 --- /dev/null +++ b/proxmox-system-config-api/src/time/api_types.rs @@ -0,0 +1,29 @@ +use serde::{Deserialize, Serialize}; + +use proxmox_schema::api; +use proxmox_schema::api_types::TIME_ZONE_SCHEMA; + +#[api( + properties: { + timezone: { + schema: TIME_ZONE_SCHEMA, + }, + time: { + type: i64, + description: "Seconds since 1970-01-01 00:00:00 UTC.", + minimum: 1_297_163_644, + }, + localtime: { + type: i64, + description: "Seconds since 1970-01-01 00:00:00 UTC. (local time)", + minimum: 1_297_163_644, + }, + } +)] +#[derive(Serialize, Deserialize)] +/// Server time and timezone. +pub struct ServerTimeInfo { + pub timezone: String, + pub time: i64, + pub localtime: i64, +} diff --git a/proxmox-system-config-api/src/time/mod.rs b/proxmox-system-config-api/src/time/mod.rs new file mode 100644 index 00000000..307414dd --- /dev/null +++ b/proxmox-system-config-api/src/time/mod.rs @@ -0,0 +1,7 @@ +mod api_types; +pub use api_types::*; + +#[cfg(feature = "time-impl")] +mod time_impl; +#[cfg(feature = "time-impl")] +pub use time_impl::*; diff --git a/proxmox-system-config-api/src/time.rs b/proxmox-system-config-api/src/time/time_impl.rs similarity index 97% rename from proxmox-system-config-api/src/time.rs rename to proxmox-system-config-api/src/time/time_impl.rs index 269c95ef..3d5aee6f 100644 --- a/proxmox-system-config-api/src/time.rs +++ b/proxmox-system-config-api/src/time/time_impl.rs @@ -3,7 +3,7 @@ use anyhow::{bail, format_err, Error}; use proxmox_product_config::replace_system_config; use proxmox_sys::fs::file_read_firstline; -use crate::api_types::ServerTimeInfo; +use super::ServerTimeInfo; pub fn read_etc_localtime() -> Result { // use /etc/timezone