From 49698c7f21f725576e73491cd2458d504488b86a Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 31 Mar 2025 15:42:53 -0400 Subject: [PATCH] Check for invalid race/tribe combinations in get_race_id --- src/race.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/race.rs b/src/race.rs index e374a86..3d709ec 100755 --- a/src/race.rs +++ b/src/race.rs @@ -15,7 +15,7 @@ pub enum Gender { #[binrw] #[brw(repr = u8)] -#[derive(PartialEq, Eq, Clone, Debug)] +#[derive(PartialEq, Eq, Clone, Copy, Debug)] #[repr(u8)] /// The race's "tribe". Each race has two tribes, which are usually very similar (even down to the ids!) /// with the exception of Hyurs, which have two very distinct tribes. @@ -40,7 +40,7 @@ pub enum Tribe { #[binrw] #[brw(repr = u8)] -#[derive(PartialEq, Eq, Clone, Debug)] +#[derive(PartialEq, Eq, Clone, Copy, Debug)] #[repr(u8)] /// The major races of Eorzea. pub enum Race { @@ -57,7 +57,10 @@ pub enum Race { /// Gets a proper race identifier (such as 101, for Hyur-Midlander-Males) given a race, a tribe, /// and a gender. pub fn get_race_id(race: Race, tribe: Tribe, gender: Gender) -> Option { - // TODO: should we check for invalid tribes like the Hyur branch does? + if !get_supported_tribes(race).contains(&tribe) { + return None; + } + match race { Race::Hyur => match tribe { Tribe::Midlander => match gender { @@ -131,9 +134,15 @@ mod tests { #[test] fn test_convert_race_num() { + // valid assert_eq!( get_race_id(Race::Roegadyn, Tribe::SeaWolf, Gender::Male), Some(901) ); + // invalid + assert_eq!( + get_race_id(Race::Roegadyn, Tribe::Midlander, Gender::Male), + None + ); } }