diff --git a/src/scheme.rs b/src/scheme.rs index 6434df4ecc71646fd43247a7911f83c254a12027..2ababf9a9b4c20d5f383382878c0f05bdf14f6aa 100644 --- a/src/scheme.rs +++ b/src/scheme.rs @@ -361,18 +361,18 @@ impl CallRequest { None => Err(self), } } - pub async fn handle_async(self, s: &mut impl SchemeAsync) -> Result<Response> { + pub async fn handle_async(self, s: &mut impl SchemeAsync) -> Response { let caller = self.caller(); let op = match self.op() { Ok(op) => op, - Err(this) => return Ok(Response::new(Err(Error::new(ENOSYS)), this)), + Err(this) => return Response::new(Err(Error::new(ENOSYS)), this), }; let (res, tag) = match op { Op::Open(req) => { let res = s.open(req.path(), req.flags, &caller).await; - return Ok(Response::open_dup_like(res, req)); + return Response::open_dup_like(res, req); } Op::Rmdir(req) => ( s.rmdir(req.path(), &caller).await.map(|()| 0), @@ -385,7 +385,7 @@ impl CallRequest { Op::Dup(req) => { let res = s.dup(req.fd, req.buf(), &caller).await; - return Ok(Response::open_dup_like(res, req)); + return Response::open_dup_like(res, req); } Op::Read(mut req) => { let OpRead { @@ -469,34 +469,35 @@ impl CallRequest { let OpGetdents { fd, opaque_offset, .. } = req; - let buf = s - .getdents(fd, req.buf().ok_or(Error::new(EINVAL))?, opaque_offset) - .await?; - (Ok(buf.finalize()), req.into_tag()) + let Some(buf) = req.buf() else { + return Response::err(EINVAL, req); + }; + let buf_res = s.getdents(fd, buf, opaque_offset).await; + (buf_res.map(|b| b.finalize()), req.into_tag()) } }; - Ok(Response::new(res, tag)) + Response::new(res, tag) } // TODO: Fix function coloring, this is just s/.await//g - pub fn handle_sync(self, s: &mut impl SchemeSync) -> Result<Response> { + pub fn handle_sync(self, s: &mut impl SchemeSync) -> Response { let caller = self.caller(); let op = match self.op() { Ok(op) => op, - Err(this) => return Ok(Response::new(Err(Error::new(ENOSYS)), this)), + Err(this) => return Response::new(Err(Error::new(ENOSYS)), this), }; let (res, tag) = match op { Op::Open(req) => { let res = s.open(req.path(), req.flags, &caller); - return Ok(Response::open_dup_like(res, req)); + return Response::open_dup_like(res, req); } Op::Rmdir(req) => (s.rmdir(req.path(), &caller).map(|()| 0), req.into_tag()), Op::Unlink(req) => (s.unlink(req.path(), &caller).map(|()| 0), req.into_tag()), Op::Dup(req) => { let res = s.dup(req.fd, req.buf(), &caller); - return Ok(Response::open_dup_like(res, req)); + return Response::open_dup_like(res, req); } Op::Read(mut req) => { let OpRead { @@ -570,11 +571,14 @@ impl CallRequest { let OpGetdents { fd, opaque_offset, .. } = req; - let buf = s.getdents(fd, req.buf().ok_or(Error::new(EINVAL))?, opaque_offset)?; - (Ok(buf.finalize()), req.into_tag()) + let Some(buf) = req.buf() else { + return Response::err(EINVAL, req); + }; + let buf_res = s.getdents(fd, buf, opaque_offset); + (buf_res.map(|b| b.finalize()), req.into_tag()) } }; - Ok(Response::new(res, tag)) + Response::new(res, tag) } }