Files
fomo-reducer/src/operator_ext.rs

33 lines
1.0 KiB
Rust

use extension_traits::extension;
use opendal::{Buffer, Error, ErrorKind, FuturesAsyncReader, Operator};
#[extension(pub trait OperatorExt)]
impl Operator {
fn read_if_exists(
&self,
path: &str,
) -> impl Future<Output = Result<Option<Buffer>, Error>> + Send {
async {
match self.read(path).await {
Ok(buffer) => Ok(Some(buffer)),
Err(error) if matches!(error.kind(), ErrorKind::NotFound) => Ok(None),
Err(error) => Err(error),
}
}
}
fn async_reader_if_exists(
&self,
path: &str,
) -> impl Future<Output = Result<Option<FuturesAsyncReader>, Error>> + Send {
async {
let reader = self.reader(path).await?;
match reader.into_futures_async_read(..).await {
Ok(reader) => Ok(Some(reader)),
Err(error) if matches!(error.kind(), ErrorKind::NotFound) => Ok(None),
Err(error) => Err(error),
}
}
}
}