aboutsummaryrefslogtreecommitdiff
path: root/src/file_handler
diff options
context:
space:
mode:
authorRuben Beltran del Rio <ruben@unlimited.pizza>2023-04-15 16:39:12 +0200
committerRuben Beltran del Rio <ruben@unlimited.pizza>2023-04-15 16:39:12 +0200
commit102a4884c3d7d26817fefb38c675be07047f5ee2 (patch)
tree6187c05ac190c210310a4b0f18e37d0ea82ca423 /src/file_handler
parent1e2d00b62ecce95f71d4bfd60a043c8e86631eee (diff)
Add basic strategies
Diffstat (limited to 'src/file_handler')
-rw-r--r--src/file_handler/file_strategies/file.rs2
-rw-r--r--src/file_handler/file_strategies/gemini.rs26
-rw-r--r--src/file_handler/file_strategies/layout.rs24
-rw-r--r--src/file_handler/file_strategies/mod.rs2
-rw-r--r--src/file_handler/mod.rs9
5 files changed, 61 insertions, 2 deletions
diff --git a/src/file_handler/file_strategies/file.rs b/src/file_handler/file_strategies/file.rs
index 530bbd6..c9e8c96 100644
--- a/src/file_handler/file_strategies/file.rs
+++ b/src/file_handler/file_strategies/file.rs
@@ -14,7 +14,7 @@ impl FileHandlerStrategy for Strategy {
}
fn can_handle(&self, path: &PathBuf) -> bool {
- !path.is_dir()
+ self.is(path)
}
fn handle(&self, path: &PathBuf) {
diff --git a/src/file_handler/file_strategies/gemini.rs b/src/file_handler/file_strategies/gemini.rs
index e69de29..ffa2a9f 100644
--- a/src/file_handler/file_strategies/gemini.rs
+++ b/src/file_handler/file_strategies/gemini.rs
@@ -0,0 +1,26 @@
+pub struct Strategy {}
+
+use std::path::PathBuf;
+
+use crate::file_handler::{FileType, FileHandlerStrategy};
+
+impl FileHandlerStrategy for Strategy {
+ fn is(&self, path: &PathBuf) -> bool {
+ if let Some(extension) = path.extension() {
+ return !path.is_dir() && extension == "gmi"
+ }
+ false
+ }
+
+ fn identify(&self) -> FileType {
+ FileType::Gemini
+ }
+
+ fn can_handle(&self, path: &PathBuf) -> bool {
+ self.is(path)
+ }
+
+ fn handle(&self, path: &PathBuf) {
+ println!("Should convert {}", path.display())
+ }
+}
diff --git a/src/file_handler/file_strategies/layout.rs b/src/file_handler/file_strategies/layout.rs
index e69de29..cf1bb9f 100644
--- a/src/file_handler/file_strategies/layout.rs
+++ b/src/file_handler/file_strategies/layout.rs
@@ -0,0 +1,24 @@
+pub struct Strategy {}
+
+use std::path::PathBuf;
+
+use crate::file_handler::{FileType, FileHandlerStrategy};
+
+impl FileHandlerStrategy for Strategy {
+ fn is(&self, path: &PathBuf) -> bool {
+ return !path.is_dir() && path.ends_with("_layout.html");
+ }
+
+ fn identify(&self) -> FileType {
+ FileType::Layout
+ }
+
+ fn can_handle(&self, path: &PathBuf) -> bool {
+ self.is(path)
+ }
+
+ fn handle(&self, path: &PathBuf) {
+ println!("Should convert {}", path.display())
+ }
+}
+
diff --git a/src/file_handler/file_strategies/mod.rs b/src/file_handler/file_strategies/mod.rs
index 2e172cd..c4b17b6 100644
--- a/src/file_handler/file_strategies/mod.rs
+++ b/src/file_handler/file_strategies/mod.rs
@@ -1 +1,3 @@
pub mod file;
+pub mod gemini;
+pub mod layout;
diff --git a/src/file_handler/mod.rs b/src/file_handler/mod.rs
index 8038b3c..44fec6d 100644
--- a/src/file_handler/mod.rs
+++ b/src/file_handler/mod.rs
@@ -1,6 +1,9 @@
mod file_strategies;
use file_strategies::file::Strategy as FileStrategy;
+use file_strategies::gemini::Strategy as GeminiStrategy;
+use file_strategies::layout::Strategy as LayoutStrategy;
+
use std::path::PathBuf;
pub struct FileHandler {
@@ -10,7 +13,11 @@ pub struct FileHandler {
impl Default for FileHandler {
fn default() -> FileHandler {
FileHandler {
- strategies: vec![Box::new(FileStrategy{})]
+ strategies: vec![
+ Box::new(GeminiStrategy{}),
+ Box::new(LayoutStrategy{}),
+ Box::new(FileStrategy{}),
+ ]
}
}
}