radicle: use a struct to help announce success counts

It is easy to mix up the order of a tuple, so a struct is introduced instead to
ensure that the correct counts are used.
This commit is contained in:
Fintan Halpenny 2025-05-30 09:41:49 +02:00
parent 5a0c14cf61
commit aa7dcd92db
1 changed files with 29 additions and 7 deletions

View File

@ -153,7 +153,7 @@ impl Announcer {
/// Get the [`Progress`] of the [`Announcer`].
pub fn progress(&self) -> Progress {
let (synced, preferred) = self.success_counts();
let SuccessCounts { preferred, synced } = self.success_counts();
let unsynced = self.to_sync.len().saturating_sub(synced);
Progress {
preferred,
@ -174,7 +174,7 @@ impl Announcer {
}
fn is_target_reached(&self) -> Option<SuccessfulOutcome> {
let (preferred, synced) = self.success_counts();
let SuccessCounts { preferred, synced } = self.success_counts();
let reached_preferred = self.target.preferred_seeds.is_empty()
|| preferred >= self.target.preferred_seeds.len();
@ -188,19 +188,41 @@ impl Announcer {
}
}
fn success_counts(&self) -> (usize, usize) {
fn success_counts(&self) -> SuccessCounts {
self.synced
.keys()
.fold((0, 0), |(mut preferred, mut succeeded), nid| {
succeeded += 1;
.fold(SuccessCounts::default(), |counts, nid| {
if self.target.preferred_seeds.contains(nid) {
preferred += 1;
counts.preferred().synced()
} else {
counts.synced()
}
(preferred, succeeded)
})
}
}
#[derive(Default)]
struct SuccessCounts {
preferred: usize,
synced: usize,
}
impl SuccessCounts {
fn synced(self) -> Self {
Self {
synced: self.synced + 1,
..self
}
}
fn preferred(self) -> Self {
Self {
preferred: self.preferred + 1,
..self
}
}
}
/// Configuration of the [`Announcer`].
pub struct AnnouncerConfig {
local_node: NodeId,