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:
parent
5a0c14cf61
commit
aa7dcd92db
|
|
@ -153,7 +153,7 @@ impl Announcer {
|
||||||
|
|
||||||
/// Get the [`Progress`] of the [`Announcer`].
|
/// Get the [`Progress`] of the [`Announcer`].
|
||||||
pub fn progress(&self) -> Progress {
|
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);
|
let unsynced = self.to_sync.len().saturating_sub(synced);
|
||||||
Progress {
|
Progress {
|
||||||
preferred,
|
preferred,
|
||||||
|
|
@ -174,7 +174,7 @@ impl Announcer {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_target_reached(&self) -> Option<SuccessfulOutcome> {
|
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()
|
let reached_preferred = self.target.preferred_seeds.is_empty()
|
||||||
|| preferred >= self.target.preferred_seeds.len();
|
|| 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
|
self.synced
|
||||||
.keys()
|
.keys()
|
||||||
.fold((0, 0), |(mut preferred, mut succeeded), nid| {
|
.fold(SuccessCounts::default(), |counts, nid| {
|
||||||
succeeded += 1;
|
|
||||||
if self.target.preferred_seeds.contains(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`].
|
/// Configuration of the [`Announcer`].
|
||||||
pub struct AnnouncerConfig {
|
pub struct AnnouncerConfig {
|
||||||
local_node: NodeId,
|
local_node: NodeId,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue