pillow_http/response/
static_files.rs1use pillow_fs::FS;
2
3#[derive(Debug)]
4#[allow(dead_code)]
5pub struct StaticFiles {
6 pub files: Vec<StaticFile>,
7}
8
9#[derive(Debug, Clone)]
10pub struct StaticFile {
11 pub route_absolute: String,
13 pub path: String,
14 pub name_file: String,
15 pub content: Vec<u8>,
16 pub lenght: usize,
17 file_original: pillow_fs::File,
18}
19
20#[derive(Debug, Clone)]
21pub enum StaticFileType {
22 CSS,
23 JS,
24}
25
26impl Default for StaticFiles {
27 fn default() -> Self {
28 Self::new("resources")
29 }
30}
31
32impl StaticFiles {
33 #[allow(dead_code)]
34 pub fn new(directory: &str) -> StaticFiles {
35 let directory_files = FS::get_all_in_directories(directory);
36
37 let vec_files = Self::normalize(directory_files);
38
39 let mut files: Vec<StaticFile> = Vec::new();
40 for f in vec_files {
41 files.push(StaticFile::new(f.clone()));
42 }
43
44 StaticFiles { files }
45 }
46
47 pub fn normalize(directory: Vec<pillow_fs::File>) -> Vec<pillow_fs::File> {
48 let mut files: Vec<pillow_fs::File> = Vec::new();
49 let directories: Vec<pillow_fs::File> = directory.clone();
50
51 fn lop(directories: &[pillow_fs::File], files: &mut Vec<pillow_fs::File>) {
52 for f in directories {
53 if f.file_type.is_dir() {
54 let d = FS::get_all_in_directories(&f.path);
55 lop(&d, files);
56 }
57
58 if f.file_type.is_file() {
59 files.push(f.clone())
60 }
61 }
62 }
63
64 lop(&directories, &mut files);
65
66 files
67 }
68}
69
70impl StaticFile {
101 pub fn new(file: pillow_fs::File) -> StaticFile {
102 let route_absolute = format!("{}", &file.path);
106
107 let content = file.clone().content.unwrap();
108
109 let path = format!("/{}", &route_absolute);
110
111 StaticFile {
112 route_absolute: route_absolute.to_string(),
114 path,
115 name_file: route_absolute.to_string(),
116 content: content.clone(),
117 lenght: content.len(),
118 file_original: file.clone(),
119 }
120 }
121}
122
123impl StaticFile {
124 pub fn metadata(&self) -> std::fs::Metadata {
125 self.file_original.metadata.clone()
126 }
127
128 pub fn file_type(&self) -> std::fs::FileType {
129 self.file_original.file_type.clone()
130 }
131
132 pub fn content_type(&self) -> Option<String> {
133 self.file_original.clone().content_type
134 }
135}