use core::fmt;
use eth_valkyoth_codec::{DecodeError, DecodeErrorCategory};
#[non_exhaustive]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TransactionEncodeError {
Codec(DecodeError),
}
impl TransactionEncodeError {
#[must_use]
pub const fn code(self) -> &'static str {
match self {
Self::Codec(error) => error.code(),
}
}
#[must_use]
pub const fn message(self) -> &'static str {
match self {
Self::Codec(error) => error.message(),
}
}
#[must_use]
pub const fn category(self) -> TransactionEncodeErrorCategory {
match self {
Self::Codec(error) => match error.category() {
DecodeErrorCategory::MalformedInput => {
TransactionEncodeErrorCategory::MalformedInput
}
DecodeErrorCategory::ResourceExhaustion => {
TransactionEncodeErrorCategory::ResourceExhaustion
}
_ => TransactionEncodeErrorCategory::MalformedInput,
},
}
}
}
impl From<DecodeError> for TransactionEncodeError {
fn from(error: DecodeError) -> Self {
Self::Codec(error)
}
}
impl fmt::Display for TransactionEncodeError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
formatter.write_str(self.message())
}
}
#[cfg(feature = "std")]
impl std::error::Error for TransactionEncodeError {}
#[non_exhaustive]
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum TransactionEncodeErrorCategory {
MalformedInput,
ResourceExhaustion,
}