use crate::{
EngineTaskError, SynchronizeTaskError, task_queue::tasks::task::EngineTaskErrorSeverity,
};
use alloy_rpc_types_engine::PayloadStatusEnum;
use alloy_transport::{RpcError, TransportErrorKind};
use kona_protocol::FromBlockError;
use op_alloy_rpc_types_engine::OpPayloadError;
#[derive(Debug, thiserror::Error)]
pub enum InsertTaskError {
#[error(transparent)]
FromBlockError(#[from] OpPayloadError),
#[error("Failed to insert new payload: {0}")]
InsertFailed(RpcError<TransportErrorKind>),
#[error("Unexpected payload status: {0}")]
UnexpectedPayloadStatus(PayloadStatusEnum),
#[error("Inconsistent forkchoice state; Pipeline reset required")]
InconsistentForkchoiceState,
#[error(transparent)]
L2BlockInfoConstruction(#[from] FromBlockError),
#[error(transparent)]
ForkchoiceUpdateFailed(#[from] SynchronizeTaskError),
}
impl EngineTaskError for InsertTaskError {
fn severity(&self) -> EngineTaskErrorSeverity {
match self {
Self::FromBlockError(_) => EngineTaskErrorSeverity::Critical,
Self::InsertFailed(_) => EngineTaskErrorSeverity::Temporary,
Self::UnexpectedPayloadStatus(_) => EngineTaskErrorSeverity::Critical,
Self::L2BlockInfoConstruction(_) => EngineTaskErrorSeverity::Critical,
Self::InconsistentForkchoiceState => EngineTaskErrorSeverity::Reset,
Self::ForkchoiceUpdateFailed(inner) => inner.severity(),
}
}
}