aboutsummaryrefslogtreecommitdiff
path: root/src/machine.rs
diff options
context:
space:
mode:
authordiogo464 <[email protected]>2025-07-10 22:05:59 +0100
committerdiogo464 <[email protected]>2025-07-10 22:05:59 +0100
commit66a0329b201a19d2a6d87b265b6fde3423a917c0 (patch)
tree62ad156e4c3e378dc64fec38542657eaa9ea0c9c /src/machine.rs
parent4fc26211fda53023f8ce703ccf4b1a2bbfbbe10a (diff)
clean enough for now
Diffstat (limited to 'src/machine.rs')
-rw-r--r--src/machine.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/machine.rs b/src/machine.rs
index f223e66..c4a5875 100644
--- a/src/machine.rs
+++ b/src/machine.rs
@@ -1,3 +1,6 @@
1use eyre::{Context as _, Result};
2use futures::{StreamExt as _, stream::FuturesUnordered};
3
1macro_rules! define_machines { 4macro_rules! define_machines {
2 ($(($name:ident, $idx:expr, $hostname:expr, $cpus:expr, $interface:expr)),*) => { 5 ($(($name:ident, $idx:expr, $hostname:expr, $cpus:expr, $interface:expr)),*) => {
3 #[derive(Debug)] 6 #[derive(Debug)]
@@ -137,3 +140,24 @@ define_machines!(
137 (Sudowoodo1, 55, "sudowoodo-1", 16, todo!()), 140 (Sudowoodo1, 55, "sudowoodo-1", 16, todo!()),
138 (Vulpix1, 56, "vulpix-1", 112, todo!()) 141 (Vulpix1, 56, "vulpix-1", 112, todo!())
139); 142);
143
144pub async fn for_each<F, FUT, RET>(machines: impl IntoIterator<Item = &Machine>, f: F) -> Result<()>
145where
146 F: Fn(Machine) -> FUT,
147 FUT: std::future::Future<Output = Result<RET>>,
148{
149 let mut futures = FuturesUnordered::new();
150
151 for &machine in machines {
152 let fut = f(machine);
153 let fut = async move { (machine, fut.await) };
154 futures.push(fut);
155 }
156
157 while let Some((machine, result)) = futures.next().await {
158 if let Err(err) = result {
159 return Err(err).with_context(|| format!("running task on machine {machine}"));
160 }
161 }
162 Ok(())
163}