From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 5CF821FF0EA for ; Fri, 14 Aug 2026 15:46:03 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 108AB22593; Fri, 14 Aug 2026 15:45:54 +0200 (CEST) From: Dominik Csapak To: pdm-devel@lists.proxmox.com Subject: [PATCH datacenter-manager 5/8] ui: renderer: use ResourceView for rendering Date: Fri, 14 Aug 2026 15:44:01 +0200 Message-ID: <20260814134548.3446943-6-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260814134548.3446943-1-d.csapak@proxmox.com> References: <20260814134548.3446943-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.339 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust RDNS_NONE 1.274 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: SQOTHZEBYFHGBP2RQ35VL5G2TIX5COGV X-Message-ID-Hash: SQOTHZEBYFHGBP2RQ35VL5G2TIX5COGV X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Datacenter Manager development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: A `Resource` can be converted to the `ResourceView` and the data returned is identical, so there is no need to change any current caller, but it's now possible to call it with a `PveResource` too. Signed-off-by: Dominik Csapak --- ui/src/renderer.rs | 52 +++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/ui/src/renderer.rs b/ui/src/renderer.rs index be3a94b4..0eecc889 100644 --- a/ui/src/renderer.rs +++ b/ui/src/renderer.rs @@ -6,43 +6,43 @@ use pwt::widget::{Column, Container, Fa, Row}; use proxmox_human_byte::HumanByte; -use pdm_client::types::Resource; +use pdm_api_types::resource::{AsResourceView, ResourceView}; use crate::pve; -pub fn render_resource_name(resource: &Resource, vmid_first: bool) -> String { - match resource { - Resource::PveStorage(storage) => storage.storage.clone(), - Resource::PveQemu(qemu) => pve::utils::render_qemu_name(qemu, vmid_first), - Resource::PveLxc(lxc) => pve::utils::render_lxc_name(lxc, vmid_first), - Resource::PveNode(node) => node.node.clone(), - Resource::PveNetwork(network) => network.name().to_string(), - Resource::PbsNode(node) => node.name.clone(), - Resource::PbsDatastore(store) => store.name.clone(), +pub fn render_resource_name(resource: impl AsResourceView, vmid_first: bool) -> String { + match resource.as_resource_view() { + ResourceView::PveStorage(storage) => storage.storage.clone(), + ResourceView::PveQemu(qemu) => pve::utils::render_qemu_name(qemu, vmid_first), + ResourceView::PveLxc(lxc) => pve::utils::render_lxc_name(lxc, vmid_first), + ResourceView::PveNode(node) => node.node.clone(), + ResourceView::PveNetwork(network) => network.name().to_string(), + ResourceView::PbsNode(node) => node.name.clone(), + ResourceView::PbsDatastore(store) => store.name.clone(), } } -pub fn render_resource_icon(resource: &Resource) -> Fa { - let class = match resource { - Resource::PveStorage(_) => "database", - Resource::PveQemu(_) => "desktop", - Resource::PveLxc(_) => "cube", - Resource::PveNode(_) => "building", - Resource::PveNetwork(_) => "fa-sdn", - Resource::PbsNode(_) => "building-o", - Resource::PbsDatastore(_) => "floppy-o", +pub fn render_resource_icon(resource: impl AsResourceView) -> Fa { + let class = match resource.as_resource_view() { + ResourceView::PveStorage(_) => "database", + ResourceView::PveQemu(_) => "desktop", + ResourceView::PveLxc(_) => "cube", + ResourceView::PveNode(_) => "building", + ResourceView::PveNetwork(_) => "fa-sdn", + ResourceView::PbsNode(_) => "building-o", + ResourceView::PbsDatastore(_) => "floppy-o", }; Fa::new(class) } -pub fn render_status_icon(resource: &Resource) -> Container { - match resource { - Resource::PveStorage(store) => pve::utils::render_storage_status_icon(store), - Resource::PveQemu(qemu) => pve::utils::render_qemu_status_icon(qemu), - Resource::PveLxc(lxc) => pve::utils::render_lxc_status_icon(lxc), - Resource::PveNode(node) => pve::utils::render_node_status_icon(node), - Resource::PveNetwork(network) => pve::utils::render_sdn_status_icon(network), +pub fn render_status_icon(resource: impl AsResourceView) -> Container { + match resource.as_resource_view() { + ResourceView::PveStorage(store) => pve::utils::render_storage_status_icon(store), + ResourceView::PveQemu(qemu) => pve::utils::render_qemu_status_icon(qemu), + ResourceView::PveLxc(lxc) => pve::utils::render_lxc_status_icon(lxc), + ResourceView::PveNode(node) => pve::utils::render_node_status_icon(node), + ResourceView::PveNetwork(network) => pve::utils::render_sdn_status_icon(network), // FIXME: implement remaining types _ => Container::new().with_child(render_resource_icon(resource)), } -- 2.47.3