Handle no relays condition without panicking

This commit is contained in:
Mike Dilger 2023-02-23 17:43:36 +13:00
parent 4bb845c67d
commit 237e8b8bb2

View File

@ -30,6 +30,9 @@ impl RelayAssignment {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[allow(clippy::enum_variant_names)]
pub enum RelayPickFailure {
/// No relays to pick from
NoRelays,
/// No people left to assign. A good result.
NoPeopleLeft,
@ -40,6 +43,7 @@ pub enum RelayPickFailure {
impl fmt::Display for RelayPickFailure {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self {
RelayPickFailure::NoRelays => write!(f, "No relays to pick from."),
RelayPickFailure::NoPeopleLeft => write!(f, "All people accounted for."),
RelayPickFailure::NoProgress => write!(f, "Unable to make further progress."),
}
@ -199,6 +203,10 @@ impl RelayTracker {
return Err(RelayPickFailure::NoPeopleLeft);
}
if self.all_relays.is_empty() {
return Err(RelayPickFailure::NoRelays);
}
// Keep score for each relay
let scoreboard: DashMap<RelayUrl, u64> = self
.all_relays