rust-sc2 icon indicating copy to clipboard operation
rust-sc2 copied to clipboard

Change Ids representation from enums to unsigned integer wrapper

Open UltraMachine opened this issue 2 years ago • 0 comments

Allows handling unknown ids in non-panicking way, while not breaking existing code, since associated constants can be referenced the same way as enum variants: SomeId::VariantX

Example code:

use std::fmt;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(transparent)]
pub struct SomeId(u32);

#[allow(non_upper_case_globals)]
impl SomeId {
	pub const Variant1: Self = Self(1);
	pub const Variant2: Self = Self(2);
	pub const Variant3: Self = Self(3);

	pub fn other(id: u32) -> Self {
		Self(id)
	}
}

impl fmt::Display for SomeId {
	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
		match *self {
			Self::Variant1 => write!(f, "Variant1"),
			Self::Variant2 => write!(f, "Variant2"),
			Self::Variant3 => write!(f, "Variant3"),
			_ => write!(f, "Other({})", self.0),
		}
	}
}

UltraMachine avatar Nov 28 '23 09:11 UltraMachine