From: Stefan Hanreich <s.hanreich@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH proxmox-ve-rs v2 05/25] ve-config: fabric: refactor fabric config entry impl using macro
Date: Thu, 2 Apr 2026 10:11:25 +0200 [thread overview]
Message-ID: <20260402081148.76276-6-s.hanreich@proxmox.com> (raw)
In-Reply-To: <20260402081148.76276-1-s.hanreich@proxmox.com>
From: Christoph Heiss <c.heiss@proxmox.com>
It's always the same, so simplify future additions using a simple
macro.
Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
proxmox-ve-config/src/sdn/fabric/mod.rs | 76 +++++++------------------
1 file changed, 22 insertions(+), 54 deletions(-)
diff --git a/proxmox-ve-config/src/sdn/fabric/mod.rs b/proxmox-ve-config/src/sdn/fabric/mod.rs
index 677a309..d0add92 100644
--- a/proxmox-ve-config/src/sdn/fabric/mod.rs
+++ b/proxmox-ve-config/src/sdn/fabric/mod.rs
@@ -162,66 +162,34 @@ where
}
}
-impl Entry<OpenfabricProperties, OpenfabricNodeProperties> {
- /// Get the OpenFabric fabric config.
- ///
- /// This method is implemented for [`Entry<OpenfabricProperties, OpenfabricNodeProperties>`],
- /// so it is guaranteed that a [`FabricSection<OpenfabricProperties>`] is returned.
- pub fn fabric_section(&self) -> &FabricSection<OpenfabricProperties> {
- if let Fabric::Openfabric(section) = &self.fabric {
- return section;
- }
-
- unreachable!();
- }
-
- /// Get the OpenFabric node config for the given node_id.
- ///
- /// This method is implemented for [`Entry<OpenfabricProperties, OpenfabricNodeProperties>`],
- /// so it is guaranteed that a [`NodeSection<OpenfabricNodeProperties>`] is returned.
- /// An error is returned if the node is not found.
- pub fn node_section(
- &self,
- id: &NodeId,
- ) -> Result<&NodeSection<OpenfabricNodeProperties>, FabricConfigError> {
- if let Node::Openfabric(section) = self.get_node(id)? {
- return Ok(section);
- }
-
- unreachable!();
- }
-}
+macro_rules! impl_entry {
+ ($variant:ident, $propty:ty, $nodepropty:ty) => {
+ impl Entry<$propty, $nodepropty> {
+ pub fn fabric_section(&self) -> &FabricSection<$propty> {
+ if let Fabric::$variant(section) = &self.fabric {
+ return section;
+ }
-impl Entry<OspfProperties, OspfNodeProperties> {
- /// Get the OSPF fabric config.
- ///
- /// This method is implemented for [`Entry<OspfProperties, OspfNodeProperties>`],
- /// so it is guaranteed that a [`FabricSection<OspfProperties>`] is returned.
- pub fn fabric_section(&self) -> &FabricSection<OspfProperties> {
- if let Fabric::Ospf(section) = &self.fabric {
- return section;
- }
+ unreachable!();
+ }
- unreachable!();
- }
+ pub fn node_section(
+ &self,
+ id: &NodeId,
+ ) -> Result<&NodeSection<$nodepropty>, FabricConfigError> {
+ if let Node::$variant(section) = self.get_node(id)? {
+ return Ok(section);
+ }
- /// Get the OSPF node config for the given node_id.
- ///
- /// This method is implemented for [`Entry<OspfProperties, OspfNodeProperties>`],
- /// so it is guaranteed that a [`NodeSection<OspfNodeProperties>`] is returned.
- /// An error is returned if the node is not found.
- pub fn node_section(
- &self,
- id: &NodeId,
- ) -> Result<&NodeSection<OspfNodeProperties>, FabricConfigError> {
- if let Node::Ospf(section) = self.get_node(id)? {
- return Ok(section);
+ unreachable!();
+ }
}
-
- unreachable!();
- }
+ };
}
+impl_entry!(Openfabric, OpenfabricProperties, OpenfabricNodeProperties);
+impl_entry!(Ospf, OspfProperties, OspfNodeProperties);
+
/// All possible entries in a [`FabricConfig`].
///
/// It utilizes the [`Entry`] struct to validate proper combinations of [`FabricSection`] and
--
2.47.3
next prev parent reply other threads:[~2026-04-02 8:11 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-02 8:11 [RFC manager/network/proxmox{,-ve-rs,-perl-rs} v2 00/25] Add WireGuard as protocol to SDN fabrics Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox v2 01/25] wireguard: skip serializing preshared_key if unset Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox v2 02/25] wireguard: implement ApiType for endpoints and hostnames Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-ve-rs v2 03/25] sdn-types: add wireguard-specific PersistentKeepalive api type Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-ve-rs v2 04/25] ve-config: fabrics: split interface name regex into two parts Stefan Hanreich
2026-04-02 8:11 ` Stefan Hanreich [this message]
2026-04-02 8:11 ` [PATCH proxmox-ve-rs v2 06/25] ve-config: fabrics: add protocol-specific properties for wireguard Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-ve-rs v2 07/25] ve-config: sdn: fabrics: add wireguard to the fabric config Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-ve-rs v2 08/25] ve-config: fabrics: wireguard add validation for wireguard config Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-ve-rs v2 09/25] ve-config: fabrics: implement wireguard config generation Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-perl-rs v2 10/25] pve-rs: fabrics: wireguard: generate ifupdown2 configuration Stefan Hanreich
2026-04-02 8:11 ` [PATCH proxmox-perl-rs v2 11/25] pve-rs: fabrics: add helpers for parsing interface property strings Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-network v2 12/25] sdn: add wireguard helper module Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-network v2 13/25] fabrics: wireguard: add schema definitions for wireguard Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-network v2 14/25] fabrics: wireguard: implement wireguard key auto-generation Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 15/25] network: sdn: generate wireguard configuration on apply Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 16/25] ui: fix parsing of property-strings when values contain = Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 17/25] ui: fabrics: i18n: make node loading string translatable Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 18/25] ui: fabrics: split node selector creation and config Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 19/25] ui: fabrics: edit: make ipv4/6 support generic over fabric panels Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 20/25] ui: fabrics: node: make ipv4/6 support generic over edit panels Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 21/25] ui: fabrics: interface: " Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 22/25] ui: fabrics: wireguard: add interface edit panel Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 23/25] ui: fabrics: wireguard: add node " Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 24/25] ui: fabrics: wireguard: add fabric " Stefan Hanreich
2026-04-02 8:11 ` [PATCH pve-manager v2 25/25] ui: fabrics: hook up wireguard components Stefan Hanreich
2026-04-02 13:58 ` [RFC manager/network/proxmox{,-ve-rs,-perl-rs} v2 00/25] Add WireGuard as protocol to SDN fabrics Gabriel Goller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260402081148.76276-6-s.hanreich@proxmox.com \
--to=s.hanreich@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox