diff options
Diffstat (limited to 'src/swarm')
| -rw-r--r-- | src/swarm/links.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/swarm/links.rs b/src/swarm/links.rs index 80def7a..cdbae67 100644 --- a/src/swarm/links.rs +++ b/src/swarm/links.rs @@ -131,6 +131,39 @@ impl Links { .collect() } + /// Who is subscribed to our links (not run out). + #[cfg(test)] + pub(crate) fn subscribers(&self) -> Vec<String> { + let now = Instant::now(); + self.inner + .lock_or_recover() + .subscribers + .iter() + .filter(|(_, (_, until))| now < *until) + .map(|(peer, _)| peer.clone()) + .collect() + } + + /// The members we ask on others' behalf (relayed, not run out), and who asked. + #[cfg(test)] + pub(crate) fn relaying(&self) -> Vec<(String, Vec<String>)> { + let now = Instant::now(); + self.inner + .lock_or_recover() + .relaying + .iter() + .map(|(member, askers)| { + let askers: Vec<String> = askers + .iter() + .filter(|(_, relaying)| now < relaying.until) + .map(|(asker, _)| asker.clone()) + .collect(); + (member.clone(), askers) + }) + .filter(|(_, askers)| !askers.is_empty()) + .collect() + } + /// The members our subscriptions are with, and the peers relaying for us (not run /// out). #[cfg_attr(not(feature = "dashboard"), allow(dead_code))] |
