bevy_mod_config 0.1.0

A Bevy plugin for configuration management
Documentation
use crate::ConfigField;

/// Implemented by the discriminant type generated by [`crate::Config`] when derived for enums.
///
/// [Managers](crate::Manager) that support enum config fields should blanket-implement
/// [`manager::Supports<T>`](crate::manager::Supports) for all `T: EnumDiscriminant`.
pub trait EnumDiscriminant: ConfigField + Eq + Sized + Copy + Send + Sync + 'static {
    /// Lists all variants of the enum.
    const VARIANTS: &'static [Self];

    /// Returns the index of the variant in [`VARIANTS`](Self::VARIANTS).
    fn into_usize(self) -> usize;

    /// Returns the enum variant name.
    fn name(self) -> &'static str;

    /// Returns the enum variant with the given name if any.
    fn from_name(name: &str) -> Option<Self>;
}

/// A [`ConfigField`] implementation that wraps an [`EnumDiscriminant`] implementor.
#[derive(PartialEq)]
pub struct EnumDiscriminantWrapper<T>(pub T);