1pub mod actions;
2pub mod priority;
3pub mod requirements;
4
5pub struct Stack<State, IncitingAction: crate::actions::IncitingAction<State>> {
6 inciting_action: IncitingAction,
7 stack: Vec<IncitingAction::Stackable>,
8}
9
10impl<State, IncitingAction: crate::actions::IncitingAction<State>> Stack<State, IncitingAction> {
11 pub(crate) fn new(inciting_action: IncitingAction) -> Self {
12 Stack {
13 inciting_action,
14 stack: Vec::new(),
15 }
16 }
17 pub fn inciting_action(&self) -> &IncitingAction {
18 &self.inciting_action
19 }
20 pub fn full_stack(&self) -> &[IncitingAction::Stackable] {
21 &self.stack
22 }
23 pub fn take_inciting_action(self) -> IncitingAction {
24 self.inciting_action
25 }
26 pub fn stack(&mut self, stack: IncitingAction::Stackable) {
27 self.stack.push(stack)
28 }
29 pub fn pop(&mut self) -> Option<IncitingAction::Stackable> {
30 self.stack.pop()
31 }
32}