list warrens + explore nested folders
This commit is contained in:
38
backend/src/fs/dir.rs
Normal file
38
backend/src/fs/dir.rs
Normal file
@@ -0,0 +1,38 @@
|
||||
use std::path::Path;
|
||||
|
||||
use tokio::fs;
|
||||
|
||||
use crate::{Result, error::AppError};
|
||||
|
||||
use super::{DirectoryEntry, FileType};
|
||||
|
||||
pub async fn get_dir_entries<P>(path: P) -> Result<Vec<DirectoryEntry>>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
let mut dir = fs::read_dir(path).await?;
|
||||
|
||||
let mut files = Vec::new();
|
||||
|
||||
while let Ok(Some(entry)) = dir.next_entry().await {
|
||||
let name = entry
|
||||
.file_name()
|
||||
.into_string()
|
||||
.map_err(|_| AppError::FileName)?;
|
||||
let file_type = {
|
||||
let file_type = entry.file_type().await?;
|
||||
|
||||
if file_type.is_dir() {
|
||||
FileType::Directory
|
||||
} else if file_type.is_file() {
|
||||
FileType::File
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
files.push(DirectoryEntry::new(name, file_type));
|
||||
}
|
||||
|
||||
Ok(files)
|
||||
}
|
||||
24
backend/src/fs/mod.rs
Normal file
24
backend/src/fs/mod.rs
Normal file
@@ -0,0 +1,24 @@
|
||||
mod dir;
|
||||
pub use dir::*;
|
||||
|
||||
use serde::Serialize;
|
||||
|
||||
#[derive(Debug, Clone, Copy, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum FileType {
|
||||
File,
|
||||
Directory,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct DirectoryEntry {
|
||||
name: String,
|
||||
file_type: FileType,
|
||||
}
|
||||
|
||||
impl DirectoryEntry {
|
||||
pub fn new(name: String, file_type: FileType) -> Self {
|
||||
Self { name, file_type }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user