2023-08-06 08:25:04 -04:00
|
|
|
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
|
|
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
|
2022-07-27 21:41:05 -04:00
|
|
|
/// Creates a enum list of combined race identifiers. For example, (Hyur, Midlander, Male) becomes a new variant called HyurMidlanderMale.
|
2023-07-30 08:58:59 -04:00
|
|
|
#[macro_export]
|
2023-09-22 18:34:24 -04:00
|
|
|
#[doc(hidden)]
|
2022-08-16 11:52:07 -04:00
|
|
|
macro_rules! define_race_enum {
|
2022-07-19 19:29:41 -04:00
|
|
|
(
|
|
|
|
pub enum $name:ident {
|
|
|
|
$(
|
|
|
|
$([$id:expr]($race:ident, $gender:ident $(, $subrace:ident)?))*
|
|
|
|
),+$(,)?
|
|
|
|
}
|
|
|
|
) => {
|
|
|
|
paste! {
|
2022-09-15 16:26:31 -04:00
|
|
|
#[derive(PartialEq, Eq, Debug)]
|
2022-07-19 19:29:41 -04:00
|
|
|
|
|
|
|
pub enum $name {
|
|
|
|
$(
|
|
|
|
$([<$race $($subrace)? $gender>] = $id)*
|
|
|
|
,
|
|
|
|
)+
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
paste! {
|
|
|
|
pub fn convert_to_internal(race : Race, subrace : Subrace, gender : Gender) -> Option<$name> {
|
|
|
|
$(
|
|
|
|
$(if race == $race $(&& subrace == $subrace)? && gender == $gender {
|
|
|
|
return Some($name::[<$race $($subrace)? $gender>])
|
|
|
|
})*
|
|
|
|
)+
|
|
|
|
|
|
|
|
None
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|