use alloc::string::String;
use super::impl_scalar_config_field_ as impl_scalar_config_field;
macro_rules! impl_numeric_config_field {
($($ty:ty,)*) => {
$(
impl_scalar_config_field!(
$ty,
NumericMetadata<$ty>,
|metadata: &NumericMetadata<$ty>| metadata.default,
'a => $ty,
|&value: &$ty| value,
);
)*
};
}
impl_numeric_config_field!(
i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, f32, f64,
);
#[derive(Default, Clone)]
pub struct NumericMetadata<T> {
pub min: Option<T>,
pub max: Option<T>,
pub default: T,
}
impl_scalar_config_field!(
String,
StringMetadata,
|metadata: &StringMetadata| metadata.default.into(),
'a => &'a str,
String::as_str,
);
#[derive(Default, Clone)]
pub struct StringMetadata {
pub default: &'static str,
pub min_length: Option<usize>,
pub max_length: Option<usize>,
pub multiline: bool,
}
#[cfg(feature = "bevy_color")]
impl_scalar_config_field!(
bevy_color::Color,
ColorMetadata,
|metadata: &ColorMetadata| metadata.default,
'a => bevy_color::Color,
|&value: &bevy_color::Color| value,
);
#[cfg(feature = "bevy_color")]
#[derive(Default, Clone)]
pub struct ColorMetadata {
pub default: bevy_color::Color,
pub alpha_blend: bool,
pub alpha_additive: bool,
}