1
Fork 0
mirror of https://github.com/redstrate/Physis.git synced 2025-04-26 14:17:45 +00:00
physis/src/macros.rs

39 lines
1.1 KiB
Rust
Raw Normal View History

// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
/// 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]
#[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
}
}
};
}