From c30298fb8a9617a38013a91ce4ba433392b90f16 Mon Sep 17 00:00:00 2001 From: Fintan Halpenny Date: Fri, 4 Jul 2025 13:49:26 +0100 Subject: [PATCH] radicle: implement std::error::Error for AnnouncerError --- crates/radicle/src/node/sync/announce.rs | 30 ++++++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/crates/radicle/src/node/sync/announce.rs b/crates/radicle/src/node/sync/announce.rs index 8dc1d282..ece81884 100644 --- a/crates/radicle/src/node/sync/announce.rs +++ b/crates/radicle/src/node/sync/announce.rs @@ -1,8 +1,7 @@ -use std::{ - collections::{BTreeMap, BTreeSet}, - ops::ControlFlow, - time, -}; +use std::collections::{BTreeMap, BTreeSet}; +use std::fmt; +use std::ops::ControlFlow; +use std::time; use crate::node::NodeId; @@ -394,6 +393,23 @@ pub enum AnnouncerError { Target(TargetError), } +impl fmt::Display for AnnouncerError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + AnnouncerError::AlreadySynced(AlreadySynced { preferred, synced }) => write!( + f, + "already synchronized with {synced} nodes ({preferred} preferred nodes)" + ), + AnnouncerError::NoSeeds => { + f.write_str("no more nodes are available for synchronizing with") + } + AnnouncerError::Target(target_error) => target_error.fmt(f), + } + } +} + +impl std::error::Error for AnnouncerError {} + impl From for AnnouncerError { fn from(value: AlreadySynced) -> Self { Self::AlreadySynced(value) @@ -402,7 +418,11 @@ impl From for AnnouncerError { #[derive(Debug)] pub struct AlreadySynced { + /// The number of preferred nodes that are synchronized. preferred: usize, + /// Total number nodes that are synchronized. + /// + /// Note that this includes [`AlreadySynced::preferred`]. synced: usize, }