summaryrefslogtreecommitdiffstats
path: root/third_party/rust/fs-err/src/tokio/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/fs-err/src/tokio/mod.rs')
-rw-r--r--third_party/rust/fs-err/src/tokio/mod.rs189
1 files changed, 189 insertions, 0 deletions
diff --git a/third_party/rust/fs-err/src/tokio/mod.rs b/third_party/rust/fs-err/src/tokio/mod.rs
new file mode 100644
index 0000000000..bf4ac94ad2
--- /dev/null
+++ b/third_party/rust/fs-err/src/tokio/mod.rs
@@ -0,0 +1,189 @@
+//! Tokio-specific wrappers that use `fs_err` error messages.
+
+use crate::errors::{Error, ErrorKind, SourceDestError, SourceDestErrorKind};
+use std::fs::{Metadata, Permissions};
+use std::path::{Path, PathBuf};
+use tokio::io;
+mod dir_builder;
+mod file;
+mod open_options;
+mod read_dir;
+
+pub use self::open_options::OpenOptions;
+pub use self::read_dir::{read_dir, DirEntry, ReadDir};
+pub use dir_builder::DirBuilder;
+pub use file::File;
+
+/// Wrapper for [`tokio::fs::canonicalize`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn canonicalize(path: impl AsRef<Path>) -> io::Result<PathBuf> {
+ let path = path.as_ref();
+ tokio::fs::canonicalize(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::Canonicalize, path))
+}
+
+/// Wrapper for [`tokio::fs::copy`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn copy(from: impl AsRef<Path>, to: impl AsRef<Path>) -> Result<u64, io::Error> {
+ let (from, to) = (from.as_ref(), to.as_ref());
+ tokio::fs::copy(from, to)
+ .await
+ .map_err(|err| SourceDestError::build(err, SourceDestErrorKind::Copy, from, to))
+}
+
+/// Wrapper for [`tokio::fs::create_dir`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn create_dir(path: impl AsRef<Path>) -> io::Result<()> {
+ let path = path.as_ref();
+ tokio::fs::create_dir(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::CreateDir, path))
+}
+
+/// Wrapper for [`tokio::fs::create_dir_all`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn create_dir_all(path: impl AsRef<Path>) -> io::Result<()> {
+ let path = path.as_ref();
+ tokio::fs::create_dir_all(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::CreateDir, path))
+}
+
+/// Wrapper for [`tokio::fs::hard_link`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn hard_link(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> io::Result<()> {
+ let (src, dst) = (src.as_ref(), dst.as_ref());
+ tokio::fs::hard_link(src, dst)
+ .await
+ .map_err(|err| SourceDestError::build(err, SourceDestErrorKind::HardLink, src, dst))
+}
+
+/// Wrapper for [`tokio::fs::metadata`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn metadata(path: impl AsRef<Path>) -> io::Result<Metadata> {
+ let path = path.as_ref();
+ tokio::fs::metadata(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::Metadata, path))
+}
+
+/// Wrapper for [`tokio::fs::read`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn read(path: impl AsRef<Path>) -> io::Result<Vec<u8>> {
+ let path = path.as_ref();
+ tokio::fs::read(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::Read, path))
+}
+
+/// Wrapper for [`tokio::fs::read_link`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn read_link(path: impl AsRef<Path>) -> io::Result<PathBuf> {
+ let path = path.as_ref();
+ tokio::fs::read_link(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::ReadLink, path))
+}
+
+/// Wrapper for [`tokio::fs::read_to_string`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn read_to_string(path: impl AsRef<Path>) -> io::Result<String> {
+ let path = path.as_ref();
+ tokio::fs::read_to_string(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::Read, path))
+}
+
+/// Wrapper for [`tokio::fs::remove_dir`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn remove_dir(path: impl AsRef<Path>) -> io::Result<()> {
+ let path = path.as_ref();
+ tokio::fs::remove_dir(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::RemoveDir, path))
+}
+
+/// Wrapper for [`tokio::fs::remove_dir_all`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn remove_dir_all(path: impl AsRef<Path>) -> io::Result<()> {
+ let path = path.as_ref();
+ tokio::fs::remove_dir_all(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::RemoveDir, path))
+}
+
+/// Wrapper for [`tokio::fs::remove_file`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn remove_file(path: impl AsRef<Path>) -> io::Result<()> {
+ let path = path.as_ref();
+ tokio::fs::remove_file(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::RemoveFile, path))
+}
+
+/// Wrapper for [`tokio::fs::rename`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn rename(from: impl AsRef<Path>, to: impl AsRef<Path>) -> io::Result<()> {
+ let (from, to) = (from.as_ref(), to.as_ref());
+ tokio::fs::rename(from, to)
+ .await
+ .map_err(|err| SourceDestError::build(err, SourceDestErrorKind::Rename, from, to))
+}
+
+/// Wrapper for [`tokio::fs::set_permissions`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn set_permissions(path: impl AsRef<Path>, perm: Permissions) -> io::Result<()> {
+ let path = path.as_ref();
+ tokio::fs::set_permissions(path, perm)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::SetPermissions, path))
+}
+
+/// Wrapper for [`tokio::fs::symlink_metadata`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn symlink_metadata(path: impl AsRef<Path>) -> io::Result<Metadata> {
+ let path = path.as_ref();
+ tokio::fs::symlink_metadata(path)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::SymlinkMetadata, path))
+}
+
+/// Wrapper for [`tokio::fs::symlink`].
+#[cfg(unix)]
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn symlink(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> io::Result<()> {
+ let (src, dst) = (src.as_ref(), dst.as_ref());
+ tokio::fs::symlink(src, dst)
+ .await
+ .map_err(|err| SourceDestError::build(err, SourceDestErrorKind::Symlink, src, dst))
+}
+
+/// Wrapper for [`tokio::fs::symlink_dir`].
+#[cfg(windows)]
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn symlink(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> io::Result<()> {
+ let (src, dst) = (src.as_ref(), dst.as_ref());
+ tokio::fs::symlink_dir(src, dst)
+ .await
+ .map_err(|err| SourceDestError::build(err, SourceDestErrorKind::SymlinkDir, src, dst))
+}
+
+/// Wrapper for [`tokio::fs::symlink_file`].
+#[cfg(windows)]
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn symlink_file(src: impl AsRef<Path>, dst: impl AsRef<Path>) -> io::Result<()> {
+ let (src, dst) = (src.as_ref(), dst.as_ref());
+ tokio::fs::symlink_file(src, dst)
+ .await
+ .map_err(|err| SourceDestError::build(err, SourceDestErrorKind::SymlinkFile, src, dst))
+}
+
+/// Wrapper for [`tokio::fs::write`].
+#[cfg_attr(docsrs, doc(cfg(feature = "tokio")))]
+pub async fn write(path: impl AsRef<Path>, contents: impl AsRef<[u8]>) -> io::Result<()> {
+ let (path, contents) = (path.as_ref(), contents.as_ref());
+ tokio::fs::write(path, contents)
+ .await
+ .map_err(|err| Error::build(err, ErrorKind::Write, path))
+}