26 lines
871 B
Rust
26 lines
871 B
Rust
use extension_traits::extension;
|
|
use opendal::{Buffer, Error, ErrorKind, FuturesAsyncReader, Operator};
|
|
|
|
#[extension(pub trait OperatorExt)]
|
|
impl Operator {
|
|
async fn read_if_exists(&self, path: &str) -> Result<Option<Buffer>, Error> {
|
|
match self.read(path).await {
|
|
Ok(buffer) => Ok(Some(buffer)),
|
|
Err(error) if matches!(error.kind(), ErrorKind::NotFound) => Ok(None),
|
|
Err(error) => Err(error),
|
|
}
|
|
}
|
|
|
|
async fn async_reader_if_exists(
|
|
&self,
|
|
path: &str,
|
|
) -> Result<Option<FuturesAsyncReader>, Error> {
|
|
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),
|
|
}
|
|
}
|
|
}
|