add readable and writable futures to WasiFile trait

This commit is contained in:
Pat Hickey
2021-04-26 14:43:16 -07:00
parent fa44ec2da2
commit b307dce2ab
5 changed files with 39 additions and 0 deletions

View File

@@ -119,6 +119,12 @@ impl WasiFile for File {
async fn num_ready_bytes(&self) -> Result<u64, Error> { async fn num_ready_bytes(&self) -> Result<u64, Error> {
Ok(self.0.num_ready_bytes()?) Ok(self.0.num_ready_bytes()?)
} }
async fn readable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
async fn writable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
} }
pub fn filetype_from(ft: &cap_std::fs::FileType) -> FileType { pub fn filetype_from(ft: &cap_std::fs::FileType) -> FileType {

View File

@@ -103,6 +103,12 @@ impl WasiFile for Stdin {
async fn num_ready_bytes(&self) -> Result<u64, Error> { async fn num_ready_bytes(&self) -> Result<u64, Error> {
Ok(self.0.num_ready_bytes()?) Ok(self.0.num_ready_bytes()?)
} }
async fn readable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
async fn writable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
} }
#[cfg(windows)] #[cfg(windows)]
impl AsRawHandle for Stdin { impl AsRawHandle for Stdin {
@@ -203,6 +209,12 @@ macro_rules! wasi_file_write_impl {
async fn num_ready_bytes(&self) -> Result<u64, Error> { async fn num_ready_bytes(&self) -> Result<u64, Error> {
Ok(0) Ok(0)
} }
async fn readable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
async fn writable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
} }
#[cfg(windows)] #[cfg(windows)]
impl AsRawHandle for $ty { impl AsRawHandle for $ty {

View File

@@ -36,6 +36,9 @@ pub trait WasiFile {
async fn seek(&self, pos: std::io::SeekFrom) -> Result<u64, Error>; // file op that generates a new stream from a file will supercede this async fn seek(&self, pos: std::io::SeekFrom) -> Result<u64, Error>; // file op that generates a new stream from a file will supercede this
async fn peek(&self, buf: &mut [u8]) -> Result<u64, Error>; // read op async fn peek(&self, buf: &mut [u8]) -> Result<u64, Error>; // read op
async fn num_ready_bytes(&self) -> Result<u64, Error>; // read op async fn num_ready_bytes(&self) -> Result<u64, Error>; // read op
async fn readable(&mut self) -> Result<(), Error>;
async fn writable(&mut self) -> Result<(), Error>;
} }
#[derive(Debug, Copy, Clone, PartialEq, Eq)] #[derive(Debug, Copy, Clone, PartialEq, Eq)]

View File

@@ -183,6 +183,12 @@ impl<R: Read + Any> WasiFile for ReadPipe<R> {
async fn num_ready_bytes(&self) -> Result<u64, Error> { async fn num_ready_bytes(&self) -> Result<u64, Error> {
Ok(0) Ok(0)
} }
async fn readable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
async fn writable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
} }
/// A virtual pipe write end. /// A virtual pipe write end.
@@ -336,4 +342,10 @@ impl<W: Write + Any> WasiFile for WritePipe<W> {
async fn num_ready_bytes(&self) -> Result<u64, Error> { async fn num_ready_bytes(&self) -> Result<u64, Error> {
Ok(0) Ok(0)
} }
async fn readable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
async fn writable(&mut self) -> Result<(), Error> {
Err(Error::badf())
}
} }

View File

@@ -184,6 +184,12 @@ impl WasiFile for File {
use unsafe_io::AsUnsafeFile; use unsafe_io::AsUnsafeFile;
asyncify(|| self.0.as_file_view().num_ready_bytes()).await asyncify(|| self.0.as_file_view().num_ready_bytes()).await
} }
async fn readable(&mut self) -> Result<(), Error> {
todo!("implement this in terms of tokio::io::AsyncFd")
}
async fn writable(&mut self) -> Result<(), Error> {
todo!("implement this in terms of tokio::io::AsyncFd")
}
} }
pub fn filetype_from(ft: &cap_std::fs::FileType) -> FileType { pub fn filetype_from(ft: &cap_std::fs::FileType) -> FileType {
use cap_fs_ext::FileTypeExt; use cap_fs_ext::FileTypeExt;