use crate::proto_state_machine::TopState;
use crate::{sm_business_logic::SMBusinessLogic, StateMachine};
#[allow(unused_imports)]
use crate::state::State;
pub struct InitStateMachine<UserStateMachine: TopState> {
user_state_machine: UserStateMachine,
}
impl<UserStateMachine: TopState> InitStateMachine<UserStateMachine> {
pub fn from(user_state_machine: UserStateMachine) -> InitStateMachine<UserStateMachine> {
InitStateMachine { user_state_machine }
}
pub fn init(mut self) -> StateMachine<UserStateMachine> {
let init_result = self.user_state_machine.init();
unsafe {
let curr_state_fn = <Self as SMBusinessLogic>::init(
core::mem::transmute(&mut self.user_state_machine),
core::mem::transmute(&init_result),
);
StateMachine {
user_state_machine: self.user_state_machine,
curr_state: core::mem::transmute(curr_state_fn),
}
}
}
}
impl<UserStateMachine: TopState> SMBusinessLogic for InitStateMachine<UserStateMachine> {}