use crate::PipelineResult;
use alloc::boxed::Box;
use alloy_eips::BlockNumHash;
use async_trait::async_trait;
use kona_protocol::{L2BlockInfo, OpAttributesWithParent, SingleBatch};
use op_alloy_rpc_types_engine::OpPayloadAttributes;
#[async_trait]
pub trait AttributesProvider {
async fn next_batch(&mut self, parent: L2BlockInfo) -> PipelineResult<SingleBatch>;
fn is_last_in_span(&self) -> bool;
}
#[async_trait]
pub trait NextAttributes {
async fn next_attributes(
&mut self,
parent: L2BlockInfo,
) -> PipelineResult<OpAttributesWithParent>;
}
#[async_trait]
pub trait AttributesBuilder {
async fn prepare_payload_attributes(
&mut self,
l2_parent: L2BlockInfo,
epoch: BlockNumHash,
) -> PipelineResult<OpPayloadAttributes>;
}