[pve-devel] [PATCH proxmox-ve-rs v4 15/22] config: sdn: fabrics: add api types

Gabriel Goller g.goller at proxmox.com
Tue Jul 8 11:50:20 CEST 2025


On 08.07.2025 10:15, Wolfgang Bumiller wrote:
>minor doc nits
>
>On Wed, Jul 02, 2025 at 04:50:06PM +0200, Gabriel Goller wrote:
>> [snip]
>> +/// API types for SDN fabric node configurations.
>> +///
>> +/// This module provides specialized types that are used for API interactions when retrieving,
>> +/// creating, or updating fabric/node configurations. These types serialize differently than their
>> +/// section-config configuration counterparts to be nicer client-side.
>> +///
>> +/// The module includes:
>> +/// - [NodeData<T>]: API-friendly version of [NodeSection<T>] that flattens the node identifier
>> +///   into separate `fabric_id` and `node_id` fields
>> +/// - [Node]: API-version of [super::Node]
>> +/// - [NodeDataUpdater]
>> +/// - [NodeDeletableProperties]
>
>^ The types in those links should also be in backticks.

Yep, there is also a `api::` prefix missing on most of these.

>> +///
>> +/// These types include conversion methods to transform between API representations and internal
>> +/// configuration objects.
>> +pub mod api {
>> +    use serde::{Deserialize, Serialize};
>> +
>> +    use proxmox_schema::{Updater, UpdaterType};
>> +
>> +    use crate::sdn::fabric::section_config::protocol::{
>> +        openfabric::{
>> +            OpenfabricNodeDeletableProperties, OpenfabricNodeProperties,
>> +            OpenfabricNodePropertiesUpdater,
>> +        },
>> +        ospf::{OspfNodeDeletableProperties, OspfNodeProperties, OspfNodePropertiesUpdater},
>> +    };
>> +
>> +    use super::*;
>> +
>> +    /// API-equivalent to [NodeSection<T>].
>
>^ backticks

Yep.

>> [snip]
>> +    impl<T> From<NodeData<T>> for NodeSection<T> {
>> +        fn from(value: NodeData<T>) -> Self {
>> +            let id = NodeSectionId::new(value.fabric_id, value.node_id);
>> +
>> +            Self {
>> +                id,
>> +                ip: value.ip,
>> +                ip6: value.ip6,
>> +                properties: value.properties,
>> +            }
>> +        }
>> +    }
>> +
>> +    /// API-equivalent to [super::Node].
>
>^ backticks

Yes.

>> [snip]
>> +    #[derive(Debug, Clone, Serialize, Deserialize)]
>> +    pub struct NodeDataUpdater<T, D> {
>> +        #[serde(skip_serializing_if = "Option::is_none")]
>> +        pub(crate) ip: Option<Ipv4Addr>,
>> +
>> +        #[serde(skip_serializing_if = "Option::is_none")]
>> +        pub(crate) ip6: Option<Ipv6Addr>,
>> +
>> +        #[serde(flatten)]
>> +        pub(crate) properties: T,
>> +
>> +        #[serde(skip_serializing_if = "Vec::is_empty", default = "Vec::new")]
>
>(^ the `= "Vec::new"` should not be necessary, but doesn't matter
>either - new is `const` so it's probably more efficient this way
>anyawy...)

Yeah, Vec::default calls Vec::new anyway. I'll still keep it like this
though.

>> +        pub(crate) delete: Vec<NodeDeletableProperties<D>>,
>> +    }
>> +
>> [snip]

Thanks!




More information about the pve-devel mailing list