]> git.r.bdr.sh - rbdr/page/commitdiff
Handle layout error better
authorRuben Beltran del Rio <redacted>
Sun, 16 Apr 2023 14:56:10 +0000 (16:56 +0200)
committerRuben Beltran del Rio <redacted>
Sun, 16 Apr 2023 14:56:10 +0000 (16:56 +0200)
Makefile [new file with mode: 0644]
README.gmi
src/file_handler/mod.rs
src/main.rs

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..b64b6e2
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,8 @@
+profile = dev
+
+default: build
+
+build:
+       cargo build --profile $(profile)
+
+.PHONY: build
index ade3518936a0346be2c9788175f26d2edebe8bdc..d53a207988bc806446e520c671b3017668dfe6b9 100644 (file)
@@ -59,3 +59,11 @@ in the directory.
 ## What happens to files that aren't gemini?
 
 They're copied as-is.
 ## What happens to files that aren't gemini?
 
 They're copied as-is.
+
+# Building
+
+This project is built using cargo. A makefile is provided to run common tasks.
+
+Build dev version with `make` or `make build`.
+
+Build release with `make -e profile=release` or `make -e profile=release build`.
index a106c27745013db17b9941e640afee7040d44b86..4932ef17f567f70066e8ce480fd03b6ec1afc81a 100644 (file)
@@ -35,18 +35,18 @@ impl FileHandler {
         FileType::Unknown
     }
 
         FileType::Unknown
     }
 
-    pub fn get_layout_or_panic(&mut self, files: &Vec<File>) {
+    pub fn get_layout_or_panic(&mut self, files: &Vec<File>) -> Result<(), &str> {
         for file in files {
             match file.file_type {
                 FileType::Layout => {
                     let layout_text = read_to_string(&file.path).unwrap();
                     self.layout = Some(layout_text);
         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;
+                    return Ok(());
                 },
                 _ => {}
             }
         }
                 },
                 _ => {}
             }
         }
-        panic!("No layout found. Please ensure there's a _layout.html file at the root");
+        Err("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>) {
     }
 
     pub fn handle_all(&self, source: &PathBuf, destination: &PathBuf, files: &Vec<File>) {
index fdfe8630e51c4989c7749568c8101148c53b5193..c6de435878859cdfebf369748e292e9491c24142 100644 (file)
@@ -3,6 +3,7 @@ mod file_finder;
 mod file_handler;
 
 use std::io::Result;
 mod file_handler;
 
 use std::io::Result;
+use std::process::exit;
 use std::env::current_dir;
 use std::fs::{create_dir_all, remove_dir_all};
 
 use std::env::current_dir;
 use std::fs::{create_dir_all, remove_dir_all};
 
@@ -27,7 +28,13 @@ fn main() -> Result<()> {
 
     // Step 3. Load the layout
     let mut file_handler = FileHandler::default();
 
     // Step 3. Load the layout
     let mut file_handler = FileHandler::default();
-    file_handler.get_layout_or_panic(&files);
+    match file_handler.get_layout_or_panic(&files) {
+        Ok(_) => {},
+        Err(error) => {
+            eprintln!("{}", error);
+            exit(1);
+        }
+    }
 
     // Step 4. Process all files
     file_handler.handle_all(&source, &destination, &files);
 
     // Step 4. Process all files
     file_handler.handle_all(&source, &destination, &files);