we probably want to use this type in the section config as well, so
maybe move it to sdn-types instead? I could do that in my patch series
as well, when I actually need it - or we're okay with unconditionally
pulling proxmox-wireguard into ve-rs.

see below for additional comments

On 1/16/26 4:33 PM, Christoph Heiss wrote:
> .. such that it can be used in API definitions.
> 
> Authored-by: Stefan Hanreich <[email protected]>
> Signed-off-by: Christoph Heiss <[email protected]>
> ---
>  proxmox-wireguard/Cargo.toml     |  6 ++++++
>  proxmox-wireguard/debian/control | 19 +++++++++++++++++++
>  proxmox-wireguard/src/lib.rs     | 17 +++++++++++++++++
>  3 files changed, 42 insertions(+)
> 
> diff --git a/proxmox-wireguard/Cargo.toml b/proxmox-wireguard/Cargo.toml
> index 5976aa90..c01a4902 100644
> --- a/proxmox-wireguard/Cargo.toml
> +++ b/proxmox-wireguard/Cargo.toml
> @@ -13,9 +13,15 @@ rust-version.workspace = true
>  ed25519-dalek = "2.1"
>  serde = { workspace = true, features = [ "derive" ] }
>  thiserror.workspace = true
> +proxmox-schema = { workspace = true, optional = true, features = 
> ["api-types"] }
>  proxmox-serde = { workspace = true, features = [ "ini-ser" ] }
>  proxmox-network-types.workspace = true
>  proxmox-sys.workspace = true
> +regex = { workspace = true, optional = true }
>  
>  [dev-dependencies]
>  pretty_assertions.workspace = true
> +
> +[features]
> +default = []
> +api-types = ["dep:proxmox-schema", "dep:regex"]
> diff --git a/proxmox-wireguard/debian/control 
> b/proxmox-wireguard/debian/control
> index 4adc1ac2..f613b839 100644
> --- a/proxmox-wireguard/debian/control
> +++ b/proxmox-wireguard/debian/control
> @@ -36,6 +36,8 @@ Depends:
>   librust-serde-1+default-dev,
>   librust-serde-1+derive-dev,
>   librust-thiserror-2+default-dev
> +Suggests:
> + librust-proxmox-wireguard+api-types-dev (= ${binary:Version})
>  Provides:
>   librust-proxmox-wireguard+default-dev (= ${binary:Version}),
>   librust-proxmox-wireguard-0-dev (= ${binary:Version}),
> @@ -46,3 +48,20 @@ Provides:
>   librust-proxmox-wireguard-0.1.0+default-dev (= ${binary:Version})
>  Description: WireGuard configuration support - Rust source code
>   Source code for Debianized Rust crate "proxmox-wireguard"
> +
> +Package: librust-proxmox-wireguard+api-types-dev
> +Architecture: any
> +Multi-Arch: same
> +Depends:
> + ${misc:Depends},
> + librust-proxmox-wireguard-dev (= ${binary:Version}),
> + librust-proxmox-schema-5+api-types-dev (>= 5.0.1-~~),
> + librust-proxmox-schema-5+default-dev (>= 5.0.1-~~),
> + librust-regex-1+default-dev (>= 1.5-~~)
> +Provides:
> + librust-proxmox-wireguard-0+api-types-dev (= ${binary:Version}),
> + librust-proxmox-wireguard-0.1+api-types-dev (= ${binary:Version}),
> + librust-proxmox-wireguard-0.1.0+api-types-dev (= ${binary:Version})
> +Description: WireGuard configuration support - feature "api-types"
> + This metapackage enables feature "api-types" for the Rust proxmox-wireguard
> + crate, by pulling in any additional dependencies needed by that feature.
> diff --git a/proxmox-wireguard/src/lib.rs b/proxmox-wireguard/src/lib.rs
> index 840767d8..d4697560 100644
> --- a/proxmox-wireguard/src/lib.rs
> +++ b/proxmox-wireguard/src/lib.rs
> @@ -17,6 +17,10 @@ use serde::{Deserialize, Serialize};
>  use std::fmt;
>  
>  use proxmox_network_types::{endpoint::ServiceEndpoint, ip_address::Cidr};
> +#[cfg(feature = "api-types")]
> +use proxmox_schema::{
> +    api_types::ED25519_BASE64_KEY_REGEX, ApiStringFormat, ApiType, 
> StringSchema, UpdaterType,
> +};
>  
>  /// Possible error when handling WireGuard configurations.
>  #[derive(thiserror::Error, Debug, PartialEq, Clone)]
> @@ -42,6 +46,19 @@ pub struct PublicKey(
>      #[serde(with = "proxmox_serde::byte_array_as_base64")] [u8; 
> ed25519_dalek::PUBLIC_KEY_LENGTH],
>  );
>  
> +#[cfg(feature = "api-types")]
> +impl ApiType for PublicKey {
> +    const API_SCHEMA: proxmox_schema::Schema =
> +        StringSchema::new("ED25519 public key base64-encoded")

I think either 'base64-encoded ED25519 public key' or 'ED25519 public
key (base64-encoded)' would fit better as description.

> +            .format(&ApiStringFormat::Pattern(&ED25519_BASE64_KEY_REGEX))
> +            .schema();
> +}
> +
> +#[cfg(feature = "api-types")]
> +impl UpdaterType for PublicKey {
> +    type Updater = Option<PublicKey>;
> +}
> +
>  /// Private key of a WireGuard peer.
>  #[derive(Serialize)]
>  #[serde(transparent)]




Reply via email to