card_stack/
lib.rs

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}