use tagset::tagset_meta;
use crate::{common, item};
#[telety::telety(crate::state, alias_traits = "always")]
#[tagset_meta]
#[meta(bounds(for<VAR> Self: tagset::TagSetDiscriminant<VAR>))]
pub trait State: tagset::TagSet<Repr: Clone + Eq + std::hash::Hash> + Sized {
#[doc(hidden)]
#[meta(default {
match_by_discriminant!(index, T => item.cast::<Storage, T>(storage))
})]
fn apply_state<Storage>(
index: Self::Repr,
item: &item::Erased,
storage: &mut Storage,
) -> Result<(), common::error::Load>
where
Storage: item::Storage<State = Self>;
}