handle invalid classes

This commit is contained in:
Robin Appelman 2023-03-11 22:20:48 +01:00
commit ab5a061eb0

View file

@ -68,6 +68,7 @@ pub enum Class {
Medic, Medic,
Sniper, Sniper,
Spy, Spy,
Unknown,
} }
impl EventFieldFromStr for Class {} impl EventFieldFromStr for Class {}
@ -84,13 +85,14 @@ impl Class {
Class::Medic => "medic", Class::Medic => "medic",
Class::Sniper => "sniper", Class::Sniper => "sniper",
Class::Spy => "spy", Class::Spy => "spy",
Class::Unknown => "unknown",
} }
} }
} }
impl Default for Class { impl Default for Class {
fn default() -> Self { fn default() -> Self {
Class::Scout Class::Unknown
} }
} }
@ -108,12 +110,12 @@ impl FromStr for Class {
"Medic" | "medic" => Ok(Class::Medic), "Medic" | "medic" => Ok(Class::Medic),
"Sniper" | "sniper" => Ok(Class::Sniper), "Sniper" | "sniper" => Ok(Class::Sniper),
"Spy" | "spy" => Ok(Class::Spy), "Spy" | "spy" => Ok(Class::Spy),
_ => Err(()), _ => Ok(Class::Unknown),
} }
} }
} }
pub struct ClassMap<T>([T; 9]); pub struct ClassMap<T>([T; 10]);
impl<T> Index<Class> for ClassMap<T> { impl<T> Index<Class> for ClassMap<T> {
type Output = T; type Output = T;
@ -129,6 +131,7 @@ impl<T> Index<Class> for ClassMap<T> {
Class::Medic => &self.0[6], Class::Medic => &self.0[6],
Class::Sniper => &self.0[7], Class::Sniper => &self.0[7],
Class::Spy => &self.0[8], Class::Spy => &self.0[8],
Class::Unknown => &self.0[9],
} }
} }
} }
@ -145,6 +148,7 @@ impl<T> IndexMut<Class> for ClassMap<T> {
Class::Medic => &mut self.0[6], Class::Medic => &mut self.0[6],
Class::Sniper => &mut self.0[7], Class::Sniper => &mut self.0[7],
Class::Spy => &mut self.0[8], Class::Spy => &mut self.0[8],
Class::Unknown => &mut self.0[9],
} }
} }
} }
@ -170,13 +174,13 @@ where
impl<T: Default> Default for ClassMap<T> { impl<T: Default> Default for ClassMap<T> {
fn default() -> Self { fn default() -> Self {
ClassMap(<[T; 9]>::default()) ClassMap(<[T; 10]>::default())
} }
} }
impl<T: Debug> Debug for ClassMap<T> { impl<T: Debug> Debug for ClassMap<T> {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
<[T; 9] as Debug>::fmt(&self.0, f) <[T; 10] as Debug>::fmt(&self.0, f)
} }
} }