Implement From trait for generic Error impls
Also add 'Other' RejectCode variant.
This commit is contained in:
parent
49c5265d41
commit
9cdef4acf0
|
|
@ -1,5 +1,6 @@
|
||||||
//! Definitions of network messages.
|
//! Definitions of network messages.
|
||||||
|
|
||||||
|
use std::error::Error;
|
||||||
use std::net;
|
use std::net;
|
||||||
|
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
|
|
@ -7,10 +8,9 @@ use chrono::{DateTime, Utc};
|
||||||
use zebra_chain::block::{Block, BlockHeader, BlockHeaderHash};
|
use zebra_chain::block::{Block, BlockHeader, BlockHeaderHash};
|
||||||
use zebra_chain::{transaction::Transaction, types::BlockHeight};
|
use zebra_chain::{transaction::Transaction, types::BlockHeight};
|
||||||
|
|
||||||
use crate::meta_addr::MetaAddr;
|
|
||||||
|
|
||||||
use super::inv::InventoryHash;
|
use super::inv::InventoryHash;
|
||||||
use super::types::*;
|
use super::types::*;
|
||||||
|
use crate::meta_addr::MetaAddr;
|
||||||
|
|
||||||
/// A Bitcoin-like network message for the Zcash protocol.
|
/// A Bitcoin-like network message for the Zcash protocol.
|
||||||
///
|
///
|
||||||
|
|
@ -308,6 +308,26 @@ pub enum Message {
|
||||||
MerkleBlock {/* XXX add fields */},
|
MerkleBlock {/* XXX add fields */},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<E> From<E> for Message
|
||||||
|
where
|
||||||
|
E: Error,
|
||||||
|
{
|
||||||
|
fn from(e: E) -> Self {
|
||||||
|
Message::Reject {
|
||||||
|
message: e.to_string(),
|
||||||
|
|
||||||
|
// The generic case, impls for specific error types should
|
||||||
|
// use specific varieties of `RejectReason`.
|
||||||
|
ccode: RejectReason::Other,
|
||||||
|
|
||||||
|
reason: e.source().unwrap().to_string(),
|
||||||
|
|
||||||
|
// Allow this to be overriden but not populated by default, methinks.
|
||||||
|
data: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Reject Reason CCodes
|
/// Reject Reason CCodes
|
||||||
///
|
///
|
||||||
/// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#reject)
|
/// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#reject)
|
||||||
|
|
@ -323,4 +343,5 @@ pub enum RejectReason {
|
||||||
Dust = 0x41,
|
Dust = 0x41,
|
||||||
InsufficientFee = 0x42,
|
InsufficientFee = 0x42,
|
||||||
Checkpoint = 0x43,
|
Checkpoint = 0x43,
|
||||||
|
Other = 0x50,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue