use ahash::HashMap;
use crate::{ViewClass, ViewId, ViewState};
#[derive(Default)]
pub struct ViewStates {
states: HashMap<ViewId, Box<dyn ViewState>>,
}
impl ViewStates {
pub fn get(&self, view_id: ViewId) -> Option<&dyn ViewState> {
self.states.get(&view_id).map(|s| s.as_ref())
}
pub fn get_mut_or_create(
&mut self,
view_id: ViewId,
view_class: &dyn ViewClass,
) -> &mut dyn ViewState {
self.states
.entry(view_id)
.or_insert_with(|| view_class.new_state())
.as_mut()
}
pub fn ensure_state_exists(&mut self, view_id: ViewId, view_class: &dyn ViewClass) {
self.states
.entry(view_id)
.or_insert_with(|| view_class.new_state());
}
}