#![deny(missing_docs)]
use sov_rollup_interface::da::{BlobReaderTrait, DaSpec};
use sov_state::WorkingSet;
use crate::{Context, Spec};
pub enum BlobRefOrOwned<'a, B: BlobReaderTrait> {
Ref(&'a mut B),
Owned(B),
}
impl<'a, B: BlobReaderTrait> BlobRefOrOwned<'a, B> {
pub fn as_mut_ref(&mut self) -> &mut B {
match self {
BlobRefOrOwned::Ref(r) => r,
BlobRefOrOwned::Owned(ref mut blob) => blob,
}
}
}
impl<'a, B: BlobReaderTrait> From<B> for BlobRefOrOwned<'a, B> {
fn from(value: B) -> Self {
BlobRefOrOwned::Owned(value)
}
}
impl<'a, B: BlobReaderTrait> From<&'a mut B> for BlobRefOrOwned<'a, B> {
fn from(value: &'a mut B) -> Self {
BlobRefOrOwned::Ref(value)
}
}
pub trait BlobSelector<Da: DaSpec> {
type Context: Context;
fn get_blobs_for_this_slot<'a, I>(
&self,
current_blobs: I,
working_set: &mut WorkingSet<<Self::Context as Spec>::Storage>,
) -> anyhow::Result<Vec<BlobRefOrOwned<'a, Da::BlobTransaction>>>
where
I: IntoIterator<Item = &'a mut Da::BlobTransaction>;
}