M Cargo.lock => Cargo.lock +32 -8
                    
                    
@@ 151,7 151,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "scratch",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
@@ 168,7 168,7 @@ checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
@@ 390,7 390,7 @@ dependencies = [
  "pest_meta",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
@@ 629,9 629,20 @@ checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
 
 [[package]]
 name = "serde"
-version = "1.0.156"
+version = "1.0.157"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
+checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca"
+
+[[package]]
+name = "serde_derive"
+version = "1.0.157"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.0",
+]
 
 [[package]]
 name = "serde_json"
@@ 682,6 693,17 @@ dependencies = [
 ]
 
 [[package]]
+name = "syn"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cff13bb1732bccfe3b246f3fdb09edfd51c01d6f5299b7ccd9457c2e4e37774"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
 name = "termcolor"
 version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ 707,7 729,7 @@ checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
 ]
 
 [[package]]
@@ 856,7 878,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
  "wasm-bindgen-shared",
 ]
 
@@ 878,7 900,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.109",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ 897,6 919,8 @@ dependencies = [
  "emojicons",
  "handlebars",
  "pulldown-cmark",
+ "serde",
+ "serde_derive",
  "toml",
  "walkdir",
 ]
                     
                    M Cargo.toml => Cargo.toml +2 -0
                    
                    
@@ 10,5 10,7 @@ chrono = "0.4.24"
 emojicons = "1.0.1"
 handlebars = "4.3.6"
 pulldown-cmark = "0.9.2"
+serde = "1.0.157"
+serde_derive = "1.0.157"
 toml = "0.7.3"
 walkdir = "2.3.3"
                     
                    M src/main.rs => src/main.rs +75 -1
                    
                    
@@ 1,9 1,25 @@
 use walkdir::WalkDir;
 use std::fs::{self, File};
-use std::path::Path;
+use std::path::{Path, PathBuf};
 use handlebars::Handlebars;
 use std::io::Write;
 use toml::{Table, Value};
+use chrono::NaiveDate;
+use serde_derive::Serialize;
+
+#[derive(Clone, Serialize)]
+struct Blog {
+    config: Table,
+    path: PathBuf
+}
+
+#[derive(Clone, Serialize)]
+struct BlogPage {
+    title: String,
+    blogs: Vec<Blog>,
+    before: Option<usize>,
+    after: Option<usize>
+}
 
 fn main() {
     // make public folder
@@ 37,6 53,64 @@ fn main() {
             file.write_all(reg.render("main", &config).expect(&format!("Cant render {}", path.display())).as_bytes()).expect(&format!("Cant write to file {}", path.display()))
         }
     }
+
+    //do the blogs
+    match fs::read_dir("blogs") {
+        Ok(blogs) => {
+            fs::create_dir("public/blogs").expect("could not make the folder \"public/blogs\"");
+            let mut all_blogs:Vec<Blog> = Vec::new();
+            for i in blogs {
+                if let Ok(i) = i {
+                let path = i.path();
+                    let contents = fs::read_to_string(path.clone()).expect(&format!("Cant read file {}", path.display()));
+                    let mut config = format!("{}\ncontent = \"\"", contents.split("+++").nth(1).expect(&format!("{} does not have a +++ section", path.display()))).parse::<Table>().unwrap();
+                    let content = contents.split("+++").nth(2).expect(&format!("{} does not have a +++ section", path.display()));
+                    let config_content = config.get_mut("content").unwrap();
+                    *config_content = Value::try_from(md_to_html(content)).unwrap();
+                    let path = path.strip_prefix("blogs").unwrap().with_extension("html");
+                    let mut file = File::create(Path::new("public/blogs").join(path.clone())).expect(&format!("Cant make file public/blogs/{}", path.display()));
+                    file.write_all(reg.render("main", &config).expect(&format!("Cant render public/blogs/{}", path.display())).as_bytes()).expect(&format!("Cant write to file public/blogs/{}", path.display()));
+                    all_blogs.push(Blog {
+                        config: config,
+                        path: path.to_path_buf()
+                    });
+                }
+            }
+            all_blogs.sort_by(|a,b| NaiveDate::parse_from_str(b.config["date"].as_str().expect(&format!("{} does not have a date", b.path.display())), "%Y-%m-%d").expect(&format!("Cant convert {} date", b.path.display())).cmp(&NaiveDate::parse_from_str(a.config["date"].as_str().expect(&format!("{} does not have a date", a.path.display())), "%Y-%m-%d").expect(&format!("Cant convert {} date", a.path.display()))));
+            let mut i = 0;
+            let blog_pages = all_blogs.chunks(10).map(|x| {
+                let before = if i > 0 {
+                    Some(i-1)
+                }
+                else {
+                    None
+                };
+                let after = if i < all_blogs.len()/10 {
+                    Some(i+1)
+                }
+                else {
+                    None
+                };
+                i+=1;
+                BlogPage {
+                    title: "Blogs".to_string(),
+                    blogs: x.to_vec(),
+                    before,
+                    after
+                }
+            }).collect::<Vec<BlogPage>>();
+            let mut x = 0;
+            for i in blog_pages {
+                let path_name = format!("public/blogs-{}.html", x);
+                let path = Path::new(&path_name);
+                let mut file = File::create(path.clone()).expect(&format!("Cant make file {}", path.display()));
+                file.write_all(reg.render("main", &i).expect(&format!("Cant render {}", path.display())).as_bytes()).expect(&format!("Cant write to file {}", path.display()));
+                x+=1;
+            }
+
+        },
+        Err(_) => {}
+    }
 }
 
 use emojicons::EmojiFormatter;