diff options
| author | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-04-16 13:11:39 +0200 |
|---|---|---|
| committer | Ruben Beltran del Rio <ruben@unlimited.pizza> | 2023-04-16 13:11:45 +0200 |
| commit | 4fd89b808cabc8afb0d75b9700be1da96989c4b7 (patch) | |
| tree | 4083f1c1c58b827a85a10b0b412e291cfc650133 /src/file_handler/mod.rs | |
| parent | 5643a0416ded5e5135a968cb57a279568b471248 (diff) | |
Add logic to read and assign files / layout
Diffstat (limited to 'src/file_handler/mod.rs')
| -rw-r--r-- | src/file_handler/mod.rs | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/file_handler/mod.rs b/src/file_handler/mod.rs index 44fec6d..53aaba9 100644 --- a/src/file_handler/mod.rs +++ b/src/file_handler/mod.rs @@ -5,9 +5,11 @@ use file_strategies::gemini::Strategy as GeminiStrategy; use file_strategies::layout::Strategy as LayoutStrategy; use std::path::PathBuf; +use std::fs::read_to_string; pub struct FileHandler { - pub strategies: Vec<Box<dyn FileHandlerStrategy>> + pub strategies: Vec<Box<dyn FileHandlerStrategy>>, + pub layout: Option<String> } impl Default for FileHandler { @@ -17,7 +19,8 @@ impl Default for FileHandler { Box::new(GeminiStrategy{}), Box::new(LayoutStrategy{}), Box::new(FileStrategy{}), - ] + ], + layout: None } } } @@ -32,10 +35,30 @@ impl FileHandler { FileType::Unknown } - pub fn handle(&self, path: &PathBuf) { + pub fn get_layout_or_panic(&mut self, files: &Vec<File>) { + for file in files { + match file.file_type { + FileType::Layout => { + let layout_text = read_to_string(&file.path).unwrap(); + self.layout = Some(layout_text); + return; + }, + _ => {} + } + } + panic!("No layout found. Please ensure there's a _layout.html file at the root"); + } + + pub fn handle_all(&self, source: &PathBuf, destination: &PathBuf, files: &Vec<File>) { + for file in files { + self.handle(source, destination, file); + } + } + + pub fn handle(&self, source: &PathBuf, destination: &PathBuf, file: &File) { for strategy in self.strategies.iter() { - if strategy.can_handle(path) { - return strategy.handle(path); + if strategy.can_handle(&file.file_type) { + return strategy.handle(file); } } } @@ -44,8 +67,8 @@ impl FileHandler { pub trait FileHandlerStrategy { fn is(&self, path: &PathBuf) -> bool; fn identify(&self) -> FileType; - fn can_handle(&self, path: &PathBuf) -> bool; - fn handle(&self, path: &PathBuf); + fn can_handle(&self, file_type: &FileType) -> bool; + fn handle(&self, file: &File); } pub enum FileType { |