diff --git a/src/operator_ext.rs b/src/operator_ext.rs index 5a21d29..3e2291d 100644 --- a/src/operator_ext.rs +++ b/src/operator_ext.rs @@ -3,23 +3,30 @@ use opendal::{Buffer, Error, ErrorKind, FuturesAsyncReader, Operator}; #[extension(pub trait OperatorExt)] impl Operator { - async fn read_if_exists(&self, path: &str) -> Result, 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), + fn read_if_exists( + &self, + path: &str, + ) -> impl Future, 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), + } } } - async fn async_reader_if_exists( + fn async_reader_if_exists( &self, path: &str, - ) -> Result, 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), + ) -> impl Future, 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), + } } } }