list warrens + explore nested folders

This commit is contained in:
2025-07-12 06:39:43 +02:00
parent f9f55895ed
commit 4d0765c53b
38 changed files with 1877 additions and 93 deletions

38
backend/src/fs/dir.rs Normal file
View 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
View 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 }
}
}