From a17b61ee91bfe00ee3460416a334d47cd66751a3 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 25 Oct 2025 09:44:39 +0200 Subject: [PATCH 1/2] Add impl Extend for RelayMap Signed-off-by: Matthias Beyer --- iroh-relay/src/relay_map.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/iroh-relay/src/relay_map.rs b/iroh-relay/src/relay_map.rs index 355c3dc8f2..2854ecb54b 100644 --- a/iroh-relay/src/relay_map.rs +++ b/iroh-relay/src/relay_map.rs @@ -120,6 +120,26 @@ impl RelayMap { } } +impl Extend<(RelayUrl, Arc)> for RelayMap { + /// Extends this `RelayMap` with another one. + /// + /// You can use this like this: + /// + /// ```rust + /// # let relay_map_a: RelayMap = { unimplemented!() }; + /// # let relay_map_b: RelayMap = { unimplemented!() }; + /// + /// relay_map_a.extend(relay_map_b.relays::>()); + /// ``` + fn extend(&mut self, iter: I) + where + I: IntoIterator)>, + { + let mut a = self.relays.write().expect("poisoned"); + a.extend(iter); + } +} + impl FromIterator for RelayMap { fn from_iter>(iter: T) -> Self { Self::from_iter(iter.into_iter().map(Arc::new)) From 6edd6dc243113231424f15349196e49f38e93a18 Mon Sep 17 00:00:00 2001 From: Matthias Beyer Date: Sat, 25 Oct 2025 09:45:50 +0200 Subject: [PATCH 2/2] Replace RelayMap::extend() member fn with RelayMap::join Signed-off-by: Matthias Beyer --- iroh-relay/src/relay_map.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/iroh-relay/src/relay_map.rs b/iroh-relay/src/relay_map.rs index 2854ecb54b..3a01f99e64 100644 --- a/iroh-relay/src/relay_map.rs +++ b/iroh-relay/src/relay_map.rs @@ -112,11 +112,14 @@ impl RelayMap { self.relays.write().expect("poisoned").remove(url) } - /// Extends this `RelayMap` with another one. - pub fn extend(&self, other: &RelayMap) { - let mut a = self.relays.write().expect("poisoned"); - let b = other.relays.read().expect("poisoned"); - a.extend(b.iter().map(|(a, b)| (a.clone(), b.clone()))); + /// Joins this `RelayMap` with another one into a new one + pub fn join(self, other: RelayMap) -> RelayMap { + { + let mut a = self.relays.write().expect("poisoned"); + let b = other.relays.read().expect("poisoned"); + a.extend(b.iter().map(|(a, b)| (a.clone(), b.clone()))); + } + self } }