polkadot_node_network_protocol/request_response/incoming/error.rs
1// Copyright (C) Parity Technologies (UK) Ltd.
2// This file is part of Polkadot.
3
4// Polkadot is free software: you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation, either version 3 of the License, or
7// (at your option) any later version.
8
9// Polkadot is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13
14// You should have received a copy of the GNU General Public License
15// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
16
17//! Error handling related code and Error/Result definitions.
18
19use sc_network_types::PeerId;
20
21use codec::Error as DecodingError;
22
23#[allow(missing_docs)]
24#[fatality::fatality(splitable)]
25pub enum Error {
26 // Incoming request stream exhausted. Should only happen on shutdown.
27 #[fatal]
28 #[error("Incoming request channel got closed.")]
29 RequestChannelExhausted,
30
31 /// Decoding failed, we were able to change the peer's reputation accordingly.
32 #[error("Decoding request failed for peer {0}.")]
33 DecodingError(PeerId, #[source] DecodingError),
34
35 /// Decoding failed, but sending reputation change failed.
36 #[error("Decoding request failed for peer {0}, and changing reputation failed.")]
37 DecodingErrorNoReputationChange(PeerId, #[source] DecodingError),
38}
39
40/// General result based on above `Error`.
41pub type Result<T> = std::result::Result<T, Error>;