use crate::error::{AppError, AppResult};
pub trait ComponentState {
fn mount(&mut self) -> AppResult<()>;
}
pub trait ComponentStateMount {
fn mount_with_state<C>(
&mut self,
id: crate::components::common::ComponentId,
component: C,
subs: Vec<tuirealm::Sub<crate::components::common::ComponentId, tuirealm::NoUserEvent>>,
) -> AppResult<()>
where
C: ComponentState
+ tuirealm::MockComponent
+ tuirealm::Component<crate::components::common::Msg, tuirealm::NoUserEvent>
+ 'static;
fn remount_with_state<C>(
&mut self,
id: crate::components::common::ComponentId,
component: C,
subs: Vec<tuirealm::Sub<crate::components::common::ComponentId, tuirealm::NoUserEvent>>,
) -> AppResult<()>
where
C: ComponentState
+ tuirealm::MockComponent
+ tuirealm::Component<crate::components::common::Msg, tuirealm::NoUserEvent>
+ 'static;
}
impl ComponentStateMount
for tuirealm::Application<
crate::components::common::ComponentId,
crate::components::common::Msg,
tuirealm::NoUserEvent,
>
{
fn mount_with_state<C>(
&mut self,
id: crate::components::common::ComponentId,
mut component: C,
subs: Vec<tuirealm::Sub<crate::components::common::ComponentId, tuirealm::NoUserEvent>>,
) -> AppResult<()>
where
C: ComponentState
+ tuirealm::MockComponent
+ tuirealm::Component<crate::components::common::Msg, tuirealm::NoUserEvent>
+ 'static,
{
component.mount()?;
self.mount(id, Box::new(component), subs)
.map_err(|e| AppError::Component(e.to_string()))?;
Ok(())
}
fn remount_with_state<C>(
&mut self,
id: crate::components::common::ComponentId,
mut component: C,
subs: Vec<tuirealm::Sub<crate::components::common::ComponentId, tuirealm::NoUserEvent>>,
) -> AppResult<()>
where
C: ComponentState
+ tuirealm::MockComponent
+ tuirealm::Component<crate::components::common::Msg, tuirealm::NoUserEvent>
+ 'static,
{
component.mount()?;
self.remount(id, Box::new(component), subs)
.map_err(|e| AppError::Component(e.to_string()))?;
Ok(())
}
}