diff options
| author | diogo464 <[email protected]> | 2025-07-10 22:05:59 +0100 |
|---|---|---|
| committer | diogo464 <[email protected]> | 2025-07-10 22:05:59 +0100 |
| commit | 66a0329b201a19d2a6d87b265b6fde3423a917c0 (patch) | |
| tree | 62ad156e4c3e378dc64fec38542657eaa9ea0c9c /src/machine.rs | |
| parent | 4fc26211fda53023f8ce703ccf4b1a2bbfbbe10a (diff) | |
clean enough for now
Diffstat (limited to 'src/machine.rs')
| -rw-r--r-- | src/machine.rs | 24 |
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 @@ | |||
| 1 | use eyre::{Context as _, Result}; | ||
| 2 | use futures::{StreamExt as _, stream::FuturesUnordered}; | ||
| 3 | |||
| 1 | macro_rules! define_machines { | 4 | macro_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 | |||
| 144 | pub async fn for_each<F, FUT, RET>(machines: impl IntoIterator<Item = &Machine>, f: F) -> Result<()> | ||
| 145 | where | ||
| 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 | } | ||
