use automato::statemachine;
statemachine! {
TxMachine {
Pending {
submit => Submitting,
cancel => Cancelled
},
Submitting {
await_result => Submitted,
accept => Accepted,
decline => Declined
},
Submitted {
accept => Accepted,
decline => Declined
},
Accepted {
decline => Declined
},
Declined {},
Cancelled {}
}
}
#[derive(Debug)]
pub enum TxErr {
Timeout(i32, String),
InvalidInput(i32, String)
}
pub struct Tx {
state: State
}
impl Tx {
pub fn new() -> Self {
Tx {
state: State::Pending(TxMachine::<Pending>::new())
}
}
pub fn submit(&mut self) -> Result<(), TxErr> {
self.state = match self.state {
State::Pending(m) => {
m.submit()
},
_ => self.state
};
Ok(())
}
}