use std::sync::Arc;
use crate::{
CopyOptions,
CopyOutcome,
CreateDirOptions,
DeleteOptions,
DirectoryStream,
FileMetadata,
FileReader,
FileSystem,
FileSystemExt,
FileWriter,
FsPath,
FsResult,
ListOptions,
ReadOptions,
RenameOptions,
WriteOptions,
WriteOutcome,
};
#[derive(Debug, Clone)]
pub struct FileResource {
fs: Arc<dyn FileSystem>,
path: FsPath,
}
impl FileResource {
#[must_use]
pub fn new(fs: Arc<dyn FileSystem>, path: FsPath) -> Self {
Self { fs, path }
}
#[must_use]
pub fn fs(&self) -> &dyn FileSystem {
self.fs.as_ref()
}
#[must_use]
pub fn path(&self) -> &FsPath {
&self.path
}
pub fn metadata(&self) -> FsResult<FileMetadata> {
self.fs.path_metadata(&self.path)
}
pub fn exists(&self) -> FsResult<bool> {
self.fs.exists(&self.path)
}
pub fn list(&self, options: &ListOptions) -> FsResult<Box<dyn DirectoryStream>> {
self.fs.list(&self.path, options)
}
pub fn open_reader(&self, options: &ReadOptions) -> FsResult<Box<dyn FileReader>> {
self.fs.open_reader(&self.path, options)
}
pub fn open_writer(&self, options: &WriteOptions) -> FsResult<Box<dyn FileWriter>> {
self.fs.open_writer(&self.path, options)
}
pub fn read_all(&self) -> FsResult<Vec<u8>> {
self.fs.read_all(&self.path)
}
pub fn write_all(&self, bytes: &[u8]) -> FsResult<WriteOutcome> {
self.fs.write_all(&self.path, bytes)
}
pub fn create_dir(&self, options: &CreateDirOptions) -> FsResult<()> {
self.fs.create_dir(&self.path, options)
}
pub fn delete(&self, options: &DeleteOptions) -> FsResult<()> {
self.fs.delete(&self.path, options)
}
pub fn rename_to(&self, target: &FsPath, options: &RenameOptions) -> FsResult<()> {
self.fs.rename(&self.path, target, options)
}
pub fn copy_to(&self, target: &FsPath, options: &CopyOptions) -> FsResult<CopyOutcome> {
self.fs.copy(&self.path, target, options)
}
}