aboutsummaryrefslogtreecommitdiff
path: root/server/protocol/src/helpers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/protocol/src/helpers.rs')
-rw-r--r--server/protocol/src/helpers.rs28
1 files changed, 16 insertions, 12 deletions
diff --git a/server/protocol/src/helpers.rs b/server/protocol/src/helpers.rs
index 90dfd6ff..679e6301 100644
--- a/server/protocol/src/helpers.rs
+++ b/server/protocol/src/helpers.rs
@@ -74,19 +74,23 @@ impl Recipe {
_ => false,
}
}
- pub fn inputs(&self) -> Vec<ItemIndex> {
- match self {
- Recipe::Passive { input, .. } => vec![*input],
- Recipe::Active { input, .. } => vec![*input],
- Recipe::Instant { inputs, .. } => inputs.iter().flat_map(|e| e.to_owned()).collect(),
- }
+ pub fn inputs(&self) -> impl Iterator<Item = ItemIndex> {
+ let (a, b) = match self {
+ Recipe::Passive { input, .. } | Recipe::Active { input, .. } => (Some(input), None),
+ Recipe::Instant { inputs, .. } => (inputs[0].as_ref(), inputs[1].as_ref()),
+ };
+
+ a.into_iter().chain(b).copied()
}
- pub fn outputs(&self) -> Vec<ItemIndex> {
- match self {
- Recipe::Passive { output, .. } => output.iter().copied().collect(),
- Recipe::Active { outputs, .. } => outputs.iter().flat_map(|e| e.to_owned()).collect(),
- Recipe::Instant { outputs, .. } => outputs.iter().flat_map(|e| e.to_owned()).collect(),
- }
+ pub fn outputs(&self) -> impl Iterator<Item = ItemIndex> {
+ let (a, b) = match self {
+ Recipe::Passive { output, .. } => (output, &None),
+ Recipe::Active { outputs, .. } | Recipe::Instant { outputs, .. } => {
+ (&outputs[0], &outputs[1])
+ }
+ };
+
+ a.iter().chain(b.iter()).copied()
}
pub fn supports_tile(&self, tile: Option<TileIndex>) -> bool {
if let Some(tile_constraint) = self.tile() {