From 4b9e4520ce5d35f193a16f89d9cc97a1db80e488 Mon Sep 17 00:00:00 2001 From: Jane Lusby Date: Fri, 12 Jun 2020 11:29:42 -0700 Subject: [PATCH] cleanup API for arc based error type (#469) Co-authored-by: Jane Lusby --- zebra-network/src/peer/connection.rs | 6 +++--- zebra-network/src/peer/error.rs | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/zebra-network/src/peer/connection.rs b/zebra-network/src/peer/connection.rs index 44821fb8..c7b68868 100644 --- a/zebra-network/src/peer/connection.rs +++ b/zebra-network/src/peer/connection.rs @@ -79,7 +79,7 @@ impl Handler { GetBlocksByHash { hashes, blocks } } } else { - Finished(Err(Arc::new(PeerError::WrongBlock).into())) + Finished(Err(PeerError::WrongBlock.into())) } } (FindBlocks, Message::Inv(inv_hashes)) => Finished(Ok(Response::BlockHeaderHashes( @@ -227,7 +227,7 @@ where } // Other request timeouts fail the request. State::AwaitingResponse(_, tx) => { - let _ = tx.send(Err(Arc::new(e).into())); + let _ = tx.send(Err(e.into())); State::AwaitingRequest } _ => unreachable!(), @@ -267,7 +267,7 @@ where if guard.is_some() { panic!("called fail_with on already-failed connection state"); } else { - *guard = Some(Arc::new(e).into()); + *guard = Some(e.into()); } // Drop the guard immediately to release the mutex. std::mem::drop(guard); diff --git a/zebra-network/src/peer/error.rs b/zebra-network/src/peer/error.rs index adf83393..53dca602 100644 --- a/zebra-network/src/peer/error.rs +++ b/zebra-network/src/peer/error.rs @@ -7,7 +7,16 @@ use zebra_chain::serialization::SerializationError; /// A wrapper around `Arc` that implements `Error`. #[derive(Error, Debug, Clone)] #[error("{0}")] -pub struct SharedPeerError(#[from] Arc); +pub struct SharedPeerError(Arc); + +impl From for SharedPeerError +where + PeerError: From, +{ + fn from(source: E) -> Self { + Self(Arc::new(PeerError::from(source))) + } +} /// An error related to peer connection handling. #[derive(Error, Debug)]