actually return file paths in FileSystem::save
This commit is contained in:
@@ -151,9 +151,21 @@ impl AsRef<Path> for FilePath {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl RelativeFilePath {
|
impl RelativeFilePath {
|
||||||
/* pub fn new(path: FilePath) -> Self {
|
pub fn new(path: FilePath) -> Result<Self, RelativeFilePathError> {
|
||||||
Self(path.0.trim_start_matches('/').to_owned())
|
Self::from_str(&path.0)
|
||||||
} */
|
}
|
||||||
|
|
||||||
|
pub fn from_str(raw: &str) -> Result<Self, RelativeFilePathError> {
|
||||||
|
if raw.starts_with("/") {
|
||||||
|
return Err(RelativeFilePathError::Absolute);
|
||||||
|
}
|
||||||
|
|
||||||
|
if raw.is_empty() {
|
||||||
|
return Err(RelativeFilePathError::Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Self(raw.to_owned()))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn join(mut self, other: &RelativeFilePath) -> Self {
|
pub fn join(mut self, other: &RelativeFilePath) -> Self {
|
||||||
self.0.push('/');
|
self.0.push('/');
|
||||||
@@ -197,6 +209,8 @@ pub enum FilePathError {
|
|||||||
|
|
||||||
#[derive(Clone, Debug, Error)]
|
#[derive(Clone, Debug, Error)]
|
||||||
pub enum RelativeFilePathError {
|
pub enum RelativeFilePathError {
|
||||||
|
#[error("The path is empty")]
|
||||||
|
Empty,
|
||||||
#[error("A relative file path must not with a slash")]
|
#[error("A relative file path must not with a slash")]
|
||||||
Absolute,
|
Absolute,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,12 +167,10 @@ impl FileSystem {
|
|||||||
) -> anyhow::Result<Vec<AbsoluteFilePath>> {
|
) -> anyhow::Result<Vec<AbsoluteFilePath>> {
|
||||||
let base_path = self.get_target_path(path);
|
let base_path = self.get_target_path(path);
|
||||||
|
|
||||||
let paths = Vec::new();
|
let mut paths = Vec::new();
|
||||||
|
|
||||||
while let Ok(Some(mut upload_file)) = stream.try_next().await {
|
while let Ok(Some(mut upload_file)) = stream.try_next().await {
|
||||||
// TODO: Refactor this result question mark chain thing
|
let file_name_as_path = RelativeFilePath::from_str(upload_file.file_name().as_str())?;
|
||||||
let file_name_as_path: RelativeFilePath =
|
|
||||||
FilePath::new(upload_file.file_name().as_str())?.try_into()?;
|
|
||||||
let file_path = base_path.join(&file_name_as_path);
|
let file_path = base_path.join(&file_name_as_path);
|
||||||
|
|
||||||
let mut file = fs::OpenOptions::new()
|
let mut file = fs::OpenOptions::new()
|
||||||
@@ -184,6 +182,8 @@ impl FileSystem {
|
|||||||
while let Ok(Some(chunk)) = upload_file.try_next().await {
|
while let Ok(Some(chunk)) = upload_file.try_next().await {
|
||||||
file.write(&chunk).await?;
|
file.write(&chunk).await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
paths.push(path.clone().join(&file_name_as_path));
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(paths)
|
Ok(paths)
|
||||||
|
|||||||
Reference in New Issue
Block a user