refactor(fs): reorder trait methods
This commit is contained in:
parent
9c76ddc3e1
commit
a77ed422eb
2 changed files with 16 additions and 12 deletions
|
@ -4,9 +4,11 @@ use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
pub trait FileSystemLike {
|
pub trait FileSystemLike {
|
||||||
fn base(&self) -> &Path;
|
fn base(&self) -> &Path;
|
||||||
fn path_of(&self, path: PathBuf) -> Result<PathBuf>;
|
|
||||||
fn file_write(&self, path: &Path, contents: &str) -> Result<()>;
|
|
||||||
fn file_read_to_string(&self, path: &Path) -> Result<String>;
|
fn file_read_to_string(&self, path: &Path) -> Result<String>;
|
||||||
|
fn file_write(&self, path: &Path, contents: &str) -> Result<()>;
|
||||||
|
|
||||||
fn path_exists(&self, path: &Path) -> Result<bool>;
|
fn path_exists(&self, path: &Path) -> Result<bool>;
|
||||||
fn path_is_file(&self, path: &Path) -> Result<bool>;
|
fn path_is_file(&self, path: &Path) -> Result<bool>;
|
||||||
|
fn path_of(&self, path: PathBuf) -> Result<PathBuf>;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,10 +12,11 @@ impl super::FileSystemLike for RealFileSystem {
|
||||||
fn base(&self) -> &Path {
|
fn base(&self) -> &Path {
|
||||||
&self.base
|
&self.base
|
||||||
}
|
}
|
||||||
fn path_of(&self, path: PathBuf) -> super::Result<PathBuf> {
|
|
||||||
let path_of = self.base.as_path().join(path);
|
|
||||||
self.validate(&path_of)?;
|
fn file_read_to_string(&self, path: &Path) -> super::Result<String> {
|
||||||
Ok(path_of)
|
self.validate(path)?;
|
||||||
|
std::fs::read_to_string(path).map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_write(&self, path: &Path, contents: &str) -> super::Result<()> {
|
fn file_write(&self, path: &Path, contents: &str) -> super::Result<()> {
|
||||||
|
@ -23,9 +24,9 @@ impl super::FileSystemLike for RealFileSystem {
|
||||||
std::fs::write(path, contents).map_err(Into::into)
|
std::fs::write(path, contents).map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_read_to_string(&self, path: &Path) -> super::Result<String> {
|
fn path_exists(&self, path: &Path) -> super::Result<bool> {
|
||||||
self.validate(path)?;
|
self.validate(path)?;
|
||||||
std::fs::read_to_string(path).map_err(Into::into)
|
Ok(path.exists())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn path_is_file(&self, path: &Path) -> super::Result<bool> {
|
fn path_is_file(&self, path: &Path) -> super::Result<bool> {
|
||||||
|
@ -33,14 +34,15 @@ impl super::FileSystemLike for RealFileSystem {
|
||||||
Ok(path.is_file())
|
Ok(path.is_file())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn path_exists(&self, path: &Path) -> super::Result<bool> {
|
fn path_of(&self, path: PathBuf) -> super::Result<PathBuf> {
|
||||||
self.validate(path)?;
|
let path_of = self.base.as_path().join(path);
|
||||||
Ok(path.exists())
|
self.validate(&path_of)?;
|
||||||
|
Ok(path_of)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RealFileSystem {
|
impl RealFileSystem {
|
||||||
fn validate(&self, path: &std::path::Path) -> super::Result<()> {
|
fn validate(&self, path: &Path) -> super::Result<()> {
|
||||||
if !path.starts_with(&self.base) {
|
if !path.starts_with(&self.base) {
|
||||||
return Err(super::Error::PathTraversal {
|
return Err(super::Error::PathTraversal {
|
||||||
base: self.base.clone(),
|
base: self.base.clone(),
|
||||||
|
|
Loading…
Reference in a new issue