1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
use super::{Action, Booster, Character, DequeueChoice}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum BatchChoice { Characters(Vec<Character>), Boosters(Vec<Booster>), DequeueChoices(Vec<DequeueChoice>), Actions(Vec<Action>), } impl BatchChoice { pub fn len(&self) -> usize { match self { BatchChoice::Characters(characters) => characters.len(), BatchChoice::Boosters(boosters) => boosters.len(), BatchChoice::DequeueChoices(dequeue_choices) => dequeue_choices.len(), BatchChoice::Actions(actions) => actions.len(), } } pub fn is_empty(&self) -> bool { match self { BatchChoice::Characters(characters) => characters.is_empty(), BatchChoice::Boosters(boosters) => boosters.is_empty(), BatchChoice::DequeueChoices(dequeue_choices) => dequeue_choices.is_empty(), BatchChoice::Actions(actions) => actions.is_empty(), } } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum BatchChoices { Characters(Vec<Vec<Character>>), Boosters(Vec<Vec<Booster>>), DequeueChoices(Vec<Vec<DequeueChoice>>), Actions(Vec<Vec<Action>>), None, } impl BatchChoices { pub fn characters(self) -> Option<Vec<Vec<Character>>> { if let BatchChoices::Characters(characters) = self { Some(characters) } else { None } } pub fn boosters(self) -> Option<Vec<Vec<Booster>>> { if let BatchChoices::Boosters(boosters) = self { Some(boosters) } else { None } } pub fn dequeue_choices(self) -> Option<Vec<Vec<DequeueChoice>>> { if let BatchChoices::DequeueChoices(dequeue_choices) = self { Some(dequeue_choices) } else { None } } pub fn actions(self) -> Option<Vec<Vec<Action>>> { if let BatchChoices::Actions(actions) = self { Some(actions) } else { None } } } #[cfg(test)] mod tests { use super::*; #[test] fn characters_returns_some_if_variant_is_characters() { let choices = BatchChoices::Characters(vec![]); assert!(choices.characters().is_some()); } #[test] fn characters_returns_none_if_variant_is_not_characters() { let choices = BatchChoices::Boosters(vec![]); assert!(choices.characters().is_none()); } #[test] fn boosters_returns_some_if_variant_is_boosters() { let choices = BatchChoices::Boosters(vec![]); assert!(choices.boosters().is_some()); } #[test] fn boosters_returns_none_if_variant_is_not_boosters() { let choices = BatchChoices::Characters(vec![]); assert!(choices.boosters().is_none()); } #[test] fn dequeue_choices_returns_some_if_variant_is_dequeue_choices() { let choices = BatchChoices::DequeueChoices(vec![]); assert!(choices.dequeue_choices().is_some()); } #[test] fn dequeue_choices_returns_none_if_variant_is_not_dequeue_choices() { let choices = BatchChoices::Actions(vec![]); assert!(choices.dequeue_choices().is_none()); } #[test] fn actions_returns_some_if_variant_is_actions() { let choices = BatchChoices::Actions(vec![]); assert!(choices.actions().is_some()); } #[test] fn actions_returns_none_if_variant_is_not_actions() { let choices = BatchChoices::None; assert!(choices.actions().is_none()); } }