From d4c97679e2ee10f96269e64ff8be14e9938d2327 Mon Sep 17 00:00:00 2001 From: steven-omaha <35634100+steven-omaha@users.noreply.github.com> Date: Tue, 10 Jan 2023 18:33:51 +0100 Subject: [PATCH] refactor backend iterator --- src/backend/mod.rs | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/backend/mod.rs b/src/backend/mod.rs index dc7d1af..5ef5ce5 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -26,27 +26,42 @@ pub(crate) enum Backends { impl Backends { pub fn iter() -> BackendIter { - BackendIter(Some(Self::Pacman)) + BackendIter { + next: Some(Backends::Pacman), + } + } + + fn next(&self) -> Option { + match self { + Self::Pacman => Some(Self::Rust), + Self::Rust => None, + } + } + + fn get_backend(&self) -> Box { + match self { + Self::Pacman => Box::new(Pacman::new()), + Self::Rust => Box::new(Rust::new()), + } } } #[derive(Debug)] -pub(crate) struct BackendIter(Option); +pub(crate) struct BackendIter { + next: Option, +} impl Iterator for BackendIter { type Item = Box; fn next(&mut self) -> Option { - match self.0 { - Some(Backends::Pacman) => { - self.0 = Some(Backends::Rust); - Some(Box::new(Pacman::new())) - } - Some(Backends::Rust) => { - self.0 = None; - Some(Box::new(Rust::new())) - } + match &self.next { None => None, + Some(b) => { + let result = b.get_backend(); + self.next = b.next(); + Some(result) + } } } }