From c611ee62477564fbe532f51e8526bae2e82dae93 Mon Sep 17 00:00:00 2001 From: HampusM Date: Thu, 13 Aug 2026 14:16:39 +0200 Subject: feat(engine): add standardized names for mesh vertex attrs & vertex shader input --- engine/src/util.rs | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'engine/src/util.rs') diff --git a/engine/src/util.rs b/engine/src/util.rs index bd69734..688778b 100644 --- a/engine/src/util.rs +++ b/engine/src/util.rs @@ -1,4 +1,4 @@ -use std::fmt::Debug; +use std::fmt::{Debug, Display}; use crate::ecs::util::VecExt; @@ -161,6 +161,49 @@ impl OptionExt for Option } } +pub struct DisplaySlice<'a, Item> +{ + slice: &'a [Item], +} + +impl<'a, Item> DisplaySlice<'a, Item> +{ + pub fn new(slice: &'a [Item]) -> Self + { + Self { slice } + } +} + +impl Display for DisplaySlice<'_, Item> +where + Item: Display, +{ + fn fmt(&self, formatter: &mut std::fmt::Formatter<'_>) -> std::fmt::Result + { + let Some(first_item) = self.slice.first() else { + return formatter.write_str(""); + }; + + write!(formatter, "{first_item}")?; + + if self.slice.len() == 1 { + return Ok(()); + } + + for item in &self.slice[1..self.slice.len() - 1] { + write!(formatter, ", {item}")?; + } + + let Some(last_item) = self.slice.last() else { + unreachable!(); + }; + + write!(formatter, " & {last_item}")?; + + Ok(()) + } +} + macro_rules! try_option { ($expr: expr) => { match $expr { -- cgit v1.2.3-18-g5258