use pillow_fs::FS;
#[derive(Debug)]
#[allow(dead_code)]
pub struct StaticFiles {
pub files: Vec<StaticFile>,
}
#[derive(Debug, Clone)]
pub struct StaticFile {
pub route_absolute: String,
pub path: String,
pub name_file: String,
pub content: Vec<u8>,
pub lenght: usize,
file_original: pillow_fs::File,
}
#[derive(Debug, Clone)]
pub enum StaticFileType {
CSS,
JS,
}
impl Default for StaticFiles {
fn default() -> Self {
Self::new("resources")
}
}
impl StaticFiles {
#[allow(dead_code)]
pub fn new(directory: &str) -> StaticFiles {
let directory_files = FS::get_all_in_directories(directory);
let vec_files = Self::normalize(directory_files);
let mut files: Vec<StaticFile> = Vec::new();
for f in vec_files {
files.push(StaticFile::new(f.clone()));
}
StaticFiles { files }
}
pub fn normalize(directory: Vec<pillow_fs::File>) -> Vec<pillow_fs::File> {
let mut files: Vec<pillow_fs::File> = Vec::new();
let directories: Vec<pillow_fs::File> = directory.clone();
fn lop(directories: &[pillow_fs::File], files: &mut Vec<pillow_fs::File>) {
for f in directories {
if f.file_type.is_dir() {
let d = FS::get_all_in_directories(&f.path);
lop(&d, files);
}
if f.file_type.is_file() {
files.push(f.clone())
}
}
}
lop(&directories, &mut files);
files
}
}
impl StaticFile {
pub fn new(file: pillow_fs::File) -> StaticFile {
let route_absolute = format!("{}", &file.path);
let content = file.clone().content.unwrap();
let path = format!("/{}", &route_absolute);
StaticFile {
route_absolute: route_absolute.to_string(),
path,
name_file: route_absolute.to_string(),
content: content.clone(),
lenght: content.len(),
file_original: file.clone(),
}
}
}
impl StaticFile {
pub fn metadata(&self) -> std::fs::Metadata {
self.file_original.metadata.clone()
}
pub fn file_type(&self) -> std::fs::FileType {
self.file_original.file_type.clone()
}
pub fn content_type(&self) -> Option<String> {
self.file_original.clone().content_type
}
}