add Display impl for ethcore::Error, UtilError
This commit is contained in:
parent
b0452cf309
commit
a7d7cb9ecb
@ -60,6 +60,43 @@ pub enum TransactionError {
|
|||||||
InvalidGasLimit(OutOfBounds<U256>),
|
InvalidGasLimit(OutOfBounds<U256>),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for TransactionError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
use self::TransactionError::*;
|
||||||
|
let msg = match *self {
|
||||||
|
AlreadyImported => {
|
||||||
|
"Already imported".into()
|
||||||
|
}
|
||||||
|
Old => {
|
||||||
|
"No longer valid".into()
|
||||||
|
}
|
||||||
|
TooCheapToReplace => {
|
||||||
|
"Gas price too low to replace".into()
|
||||||
|
}
|
||||||
|
LimitReached => {
|
||||||
|
"Transaction limit reached".into()
|
||||||
|
}
|
||||||
|
InsufficientGasPrice { minimal, got } => {
|
||||||
|
format!("Insufficient gas price. Min={}, Given={}",
|
||||||
|
minimal, got)
|
||||||
|
}
|
||||||
|
InsufficientBalance { balance, cost } => {
|
||||||
|
format!("Insufficient balance for transaction. Balance={}, Cost={}",
|
||||||
|
balance, cost)
|
||||||
|
}
|
||||||
|
GasLimitExceeded { limit, got } => {
|
||||||
|
format!("Gas limit exceeded. Limit={}, Given={}",
|
||||||
|
limit, got)
|
||||||
|
}
|
||||||
|
InvalidGasLimit(ref err) => {
|
||||||
|
format!("Invalid gas limit. {}", err)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
f.write_fmt(format_args!("Transaction error ({})", msg))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
/// Errors concerning block processing.
|
/// Errors concerning block processing.
|
||||||
pub enum BlockError {
|
pub enum BlockError {
|
||||||
@ -98,7 +135,7 @@ pub enum BlockError {
|
|||||||
MismatchedH256SealElement(Mismatch<H256>),
|
MismatchedH256SealElement(Mismatch<H256>),
|
||||||
/// Proof-of-work aspect of seal, which we assume is a 256-bit value, is invalid.
|
/// Proof-of-work aspect of seal, which we assume is a 256-bit value, is invalid.
|
||||||
InvalidProofOfWork(OutOfBounds<U256>),
|
InvalidProofOfWork(OutOfBounds<U256>),
|
||||||
/// Some low-level aspect of the seal in incorrect.
|
/// Some low-level aspect of the seal is incorrect.
|
||||||
InvalidSeal,
|
InvalidSeal,
|
||||||
/// Gas limit header field is invalid.
|
/// Gas limit header field is invalid.
|
||||||
InvalidGasLimit(OutOfBounds<U256>),
|
InvalidGasLimit(OutOfBounds<U256>),
|
||||||
@ -121,6 +158,95 @@ pub enum BlockError {
|
|||||||
UnknownUncleParent(H256),
|
UnknownUncleParent(H256),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for BlockError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
use self::BlockError::*;
|
||||||
|
|
||||||
|
let msg = match *self {
|
||||||
|
TooManyUncles(ref oob) => {
|
||||||
|
format!("Block has too many uncles. {}", oob)
|
||||||
|
}
|
||||||
|
ExtraDataOutOfBounds(ref oob) => {
|
||||||
|
format!("Extra block data too long. {}", oob)
|
||||||
|
}
|
||||||
|
InvalidSealArity(ref mis) => {
|
||||||
|
format!("Block seal in incorrect format: {}", mis)
|
||||||
|
}
|
||||||
|
TooMuchGasUsed(ref oob) => {
|
||||||
|
format!("Block has too much gas used. {}", oob)
|
||||||
|
}
|
||||||
|
InvalidUnclesHash(ref mis) => {
|
||||||
|
format!("Block has invalid uncles hash: {}", mis)
|
||||||
|
}
|
||||||
|
UncleTooOld(ref oob) => {
|
||||||
|
format!("Uncle block is too old. {}", oob)
|
||||||
|
}
|
||||||
|
UncleIsBrother(ref oob) => {
|
||||||
|
format!("Uncle from same generation as block. {}", oob)
|
||||||
|
}
|
||||||
|
UncleInChain(ref hash) => {
|
||||||
|
format!("Uncle {} already in chain", hash)
|
||||||
|
}
|
||||||
|
UncleParentNotInChain(ref hash) => {
|
||||||
|
format!("Uncle {} has a parent not in the chain", hash)
|
||||||
|
}
|
||||||
|
InvalidStateRoot(ref mis) => {
|
||||||
|
format!("Invalid state root in header: {}", mis)
|
||||||
|
}
|
||||||
|
InvalidGasUsed(ref mis) => {
|
||||||
|
format!("Invalid gas used in header: {}", mis)
|
||||||
|
}
|
||||||
|
InvalidTransactionsRoot(ref mis) => {
|
||||||
|
format!("Invalid transactions root in header: {}", mis)
|
||||||
|
}
|
||||||
|
DifficultyOutOfBounds(ref oob) => {
|
||||||
|
format!("Invalid block difficulty: {}", oob)
|
||||||
|
}
|
||||||
|
InvalidDifficulty(ref mis) => {
|
||||||
|
format!("Invalid block difficulty: {}", mis)
|
||||||
|
}
|
||||||
|
MismatchedH256SealElement(ref mis) => {
|
||||||
|
format!("Seal element out of bounds: {}", mis)
|
||||||
|
}
|
||||||
|
InvalidProofOfWork(ref oob) => {
|
||||||
|
format!("Block has invalid PoW: {}", oob)
|
||||||
|
}
|
||||||
|
InvalidSeal => {
|
||||||
|
"Block has invalid seal.".into()
|
||||||
|
}
|
||||||
|
InvalidGasLimit(ref oob) => {
|
||||||
|
format!("Invalid gas limit: {}", oob)
|
||||||
|
}
|
||||||
|
InvalidReceiptsRoot(ref mis) => {
|
||||||
|
format!("Invalid receipts trie root in header: {}", mis)
|
||||||
|
}
|
||||||
|
InvalidTimestamp(ref oob) => {
|
||||||
|
format!("Invalid timestamp in header: {}", oob)
|
||||||
|
}
|
||||||
|
InvalidLogBloom(ref oob) => {
|
||||||
|
format!("Invalid log bloom in header: {}", oob)
|
||||||
|
}
|
||||||
|
InvalidParentHash(ref mis) => {
|
||||||
|
format!("Invalid parent hash: {}", mis)
|
||||||
|
}
|
||||||
|
InvalidNumber(ref mis) => {
|
||||||
|
format!("Invalid number in header: {}", mis)
|
||||||
|
}
|
||||||
|
RidiculousNumber(ref oob) => {
|
||||||
|
format!("Implausible block number. {}", oob)
|
||||||
|
}
|
||||||
|
UnknownParent(ref hash) => {
|
||||||
|
format!("Unknown parent: {}", hash)
|
||||||
|
}
|
||||||
|
UnknownUncleParent(ref hash) => {
|
||||||
|
format!("Unknown uncle parent: {}", hash)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
f.write_fmt(format_args!("Block error ({})", msg))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
/// Import to the block queue result
|
/// Import to the block queue result
|
||||||
pub enum ImportError {
|
pub enum ImportError {
|
||||||
@ -132,6 +258,24 @@ pub enum ImportError {
|
|||||||
KnownBad,
|
KnownBad,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for ImportError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
let msg = match self {
|
||||||
|
&ImportError::AlreadyInChain => {
|
||||||
|
"block already in chain"
|
||||||
|
}
|
||||||
|
&ImportError::AlreadyQueued => {
|
||||||
|
"block already in the block queue"
|
||||||
|
}
|
||||||
|
&ImportError::KnownBad => {
|
||||||
|
"block known to be bad"
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
f.write_fmt(format_args!("Block import error ({})", msg))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
/// General error type which should be capable of representing all errors in ethcore.
|
/// General error type which should be capable of representing all errors in ethcore.
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
@ -155,6 +299,28 @@ pub enum Error {
|
|||||||
PowInvalid,
|
PowInvalid,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Error {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
match *self {
|
||||||
|
Error::Client(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
Error::Util(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
Error::Block(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
Error::Execution(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
Error::Transaction(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
Error::Import(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
Error::UnknownEngineName(ref name) => {
|
||||||
|
f.write_fmt(format_args!("Unknown engine name ({})", name))
|
||||||
|
}
|
||||||
|
Error::PowHashInvalid => {
|
||||||
|
f.write_str("Invalid or out of date PoW hash.")
|
||||||
|
}
|
||||||
|
Error::PowInvalid => {
|
||||||
|
f.write_str("Invalid nonce or mishash")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Result of import block operation.
|
/// Result of import block operation.
|
||||||
pub type ImportResult = Result<H256, Error>;
|
pub type ImportResult = Result<H256, Error>;
|
||||||
|
|
||||||
|
@ -30,6 +30,17 @@ pub enum BaseDataError {
|
|||||||
NegativelyReferencedHash(H256),
|
NegativelyReferencedHash(H256),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for BaseDataError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
match *self {
|
||||||
|
BaseDataError::NegativelyReferencedHash(hash) => {
|
||||||
|
f.write_fmt(format_args!("Entry {} removed from database more times \
|
||||||
|
than it was added.", hash))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
/// General error type which should be capable of representing all errors in ethcore.
|
/// General error type which should be capable of representing all errors in ethcore.
|
||||||
pub enum UtilError {
|
pub enum UtilError {
|
||||||
@ -57,6 +68,25 @@ pub enum UtilError {
|
|||||||
BadSize,
|
BadSize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for UtilError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
|
match *self {
|
||||||
|
UtilError::Crypto(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::StdIo(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::Io(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::AddressParse(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::AddressResolve(Some(ref err)) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::AddressResolve(_) => f.write_str("Failed to resolve network address."),
|
||||||
|
UtilError::FromHex(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::BaseData(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::Network(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::Decoder(ref err) => f.write_fmt(format_args!("{}", err)),
|
||||||
|
UtilError::SimpleString(ref msg) => f.write_str(&msg),
|
||||||
|
UtilError::BadSize => f.write_str("Bad input size."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq)]
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
/// Error indicating an expected value was not found.
|
/// Error indicating an expected value was not found.
|
||||||
pub struct Mismatch<T: fmt::Debug> {
|
pub struct Mismatch<T: fmt::Debug> {
|
||||||
|
Loading…
Reference in New Issue
Block a user