Static site generator + my presonnal website written in rust for some reason.

removed unnecesary web server

+22 -178
+14 -45
Cargo.lock
··· 67 67 ] 68 68 69 69 [[package]] 70 - name = "ascii" 71 - version = "1.1.0" 72 - source = "registry+https://github.com/rust-lang/crates.io-index" 73 - checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" 74 - 75 - [[package]] 76 70 name = "askama" 77 71 version = "0.12.1" 78 72 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 98 92 "proc-macro2", 99 93 "quote", 100 94 "serde", 101 - "syn 2.0.76", 95 + "syn 2.0.77", 102 96 ] 103 97 104 98 [[package]] ··· 211 205 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 212 206 213 207 [[package]] 214 - name = "chunked_transfer" 215 - version = "1.5.0" 216 - source = "registry+https://github.com/rust-lang/crates.io-index" 217 - checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" 218 - 219 - [[package]] 220 208 name = "clap" 221 209 version = "4.5.16" 222 210 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 248 236 "heck", 249 237 "proc-macro2", 250 238 "quote", 251 - "syn 2.0.76", 239 + "syn 2.0.77", 252 240 ] 253 241 254 242 [[package]] ··· 314 302 "proc-macro2", 315 303 "quote", 316 304 "strsim", 317 - "syn 2.0.76", 305 + "syn 2.0.77", 318 306 ] 319 307 320 308 [[package]] ··· 325 313 dependencies = [ 326 314 "darling_core", 327 315 "quote", 328 - "syn 2.0.76", 316 + "syn 2.0.77", 329 317 ] 330 318 331 319 [[package]] ··· 355 343 "darling", 356 344 "proc-macro2", 357 345 "quote", 358 - "syn 2.0.76", 346 + "syn 2.0.77", 359 347 ] 360 348 361 349 [[package]] ··· 365 353 checksum = "4abae7035bf79b9877b779505d8cf3749285b80c43941eda66604841889451dc" 366 354 dependencies = [ 367 355 "derive_builder_core", 368 - "syn 2.0.76", 356 + "syn 2.0.77", 369 357 ] 370 358 371 359 [[package]] ··· 482 470 version = "0.5.0" 483 471 source = "registry+https://github.com/rust-lang/crates.io-index" 484 472 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 485 - 486 - [[package]] 487 - name = "httpdate" 488 - version = "1.0.3" 489 - source = "registry+https://github.com/rust-lang/crates.io-index" 490 - checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 491 473 492 474 [[package]] 493 475 name = "humansize" ··· 853 835 name = "rusty_duck" 854 836 version = "0.1.0" 855 837 dependencies = [ 856 - "ascii", 857 838 "askama", 858 839 "comrak", 859 840 "markdown-parser", 860 841 "rand", 861 842 "serde", 862 843 "serde_yaml 0.9.34+deprecated", 863 - "tiny_http", 844 + "syntect", 864 845 ] 865 846 866 847 [[package]] ··· 895 876 dependencies = [ 896 877 "proc-macro2", 897 878 "quote", 898 - "syn 2.0.76", 879 + "syn 2.0.77", 899 880 ] 900 881 901 882 [[package]] ··· 976 957 977 958 [[package]] 978 959 name = "syn" 979 - version = "2.0.76" 960 + version = "2.0.77" 980 961 source = "registry+https://github.com/rust-lang/crates.io-index" 981 - checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" 962 + checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" 982 963 dependencies = [ 983 964 "proc-macro2", 984 965 "quote", ··· 1035 1016 dependencies = [ 1036 1017 "proc-macro2", 1037 1018 "quote", 1038 - "syn 2.0.76", 1019 + "syn 2.0.77", 1039 1020 ] 1040 1021 1041 1022 [[package]] ··· 1070 1051 ] 1071 1052 1072 1053 [[package]] 1073 - name = "tiny_http" 1074 - version = "0.12.0" 1075 - source = "registry+https://github.com/rust-lang/crates.io-index" 1076 - checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" 1077 - dependencies = [ 1078 - "ascii", 1079 - "chunked_transfer", 1080 - "httpdate", 1081 - "log", 1082 - ] 1083 - 1084 - [[package]] 1085 1054 name = "tinyvec" 1086 1055 version = "1.8.0" 1087 1056 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1197 1166 "once_cell", 1198 1167 "proc-macro2", 1199 1168 "quote", 1200 - "syn 2.0.76", 1169 + "syn 2.0.77", 1201 1170 "wasm-bindgen-shared", 1202 1171 ] 1203 1172 ··· 1219 1188 dependencies = [ 1220 1189 "proc-macro2", 1221 1190 "quote", 1222 - "syn 2.0.76", 1191 + "syn 2.0.77", 1223 1192 "wasm-bindgen-backend", 1224 1193 "wasm-bindgen-shared", 1225 1194 ] ··· 1420 1389 dependencies = [ 1421 1390 "proc-macro2", 1422 1391 "quote", 1423 - "syn 2.0.76", 1392 + "syn 2.0.77", 1424 1393 ]
+1 -2
Cargo.toml
··· 11 11 strip = "symbols" # Strip symbols from binary 12 12 13 13 [dependencies] 14 - ascii = "1.1.0" 15 14 askama = { version = "0.12.1" } 16 15 comrak = "0.27.0" 17 16 markdown-parser = "0.1.2" 18 17 rand = "0.8.5" 19 18 serde = { version = "1.0.209", features = ["derive"] } 20 19 serde_yaml = "0.9.34" 21 - tiny_http = "0.12.0" 20 + syntect = "5.2.0"
+5 -5
src/handlers.rs
··· 40 40 41 41 options.extension.underline = true; 42 42 options.extension.strikethrough = true; 43 - let plugins = comrak::Plugins::default(); 44 - //let adapter = comrak::plugins::syntect::SyntectAdapterBuilder::new() 45 - // .theme("base16-ocean.dark") 46 - // .build(); 43 + let mut plugins = comrak::Plugins::default(); 44 + let adapter = comrak::plugins::syntect::SyntectAdapterBuilder::new() 45 + .theme("base16-ocean.dark") 46 + .build(); 47 47 48 - //plugins.render.codefence_syntax_highlighter = Some(&adapter); 48 + plugins.render.codefence_syntax_highlighter = Some(&adapter); 49 49 comrak::markdown_to_html_with_plugins(content, &options, &plugins) 50 50 }
+2 -126
src/main.rs
··· 1 - use std::{error::Error, fs::{self, read_dir, DirBuilder, File}, io::Write, path::Path}; 2 - 3 - use ascii::AsciiString; 4 - use tiny_http::{Response, Server}; 5 - 1 + use std::{fs::{self, read_dir, DirBuilder},path::Path}; 6 2 7 3 mod handlers; 8 4 mod structs; ··· 34 30 match DirBuilder::new() 35 31 .create(format!("{output_path}/blog")) { 36 32 Ok(_) => (), 37 - Err(_) => (), 33 + Err(err) => println!("Error detected: {err}"), 38 34 } 39 35 40 36 ··· 67 63 } 68 64 Ok(()) 69 65 } 70 - 71 - fn old_main() { 72 - 73 - // let app: axum::Router = Router::new() 74 - // .route("/", get(handlers::index)) 75 - // .route("/about", get(handlers::about)) 76 - // .route("/blog",get(handlers::index)) 77 - // .route("/blog/:blog_path",get(handlers::blog)) 78 - // .route_service("/robots.txt", ServeFile::new("assets/robots.txt")) 79 - // .fallback(get(handlers::not_found)) 80 - // .nest_service("/assets", ServeDir::new("assets")); 81 - // 82 - // 83 - // let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap(); 84 - // axum::serve(listener, app).await.unwrap(); 85 - // 86 - //----- 87 - // let server = Arc::new(Server::http("127.0.0.1:3001").unwrap()); 88 - // println!("started server on port 3001"); 89 - // 90 - // let mut handles = Vec::new(); 91 - // 92 - // for thread_num in 0..6 { 93 - // println!("starting thread {}",thread_num); 94 - // let server = server.clone(); 95 - // handles.push(thread::spawn(move || server_thread(server))); 96 - // 97 - // } 98 - // for h in handles { 99 - // h.join().unwrap(); 100 - // } 101 - // ------------ 102 - let server = Server::http("127.0.0.1:3000").unwrap(); 103 - println!("started server on port 3001"); 104 - server_thread(server); 105 - 106 - } 107 - 108 - fn server_thread(server: Server) { 109 - for request in server.incoming_requests() { 110 - println!("received request; method: {}, url: {}", 111 - request.method(),request.url()); 112 - 113 - match request.url() { 114 - "" | "/" => { 115 - let response = Response::from_string(handlers::index()); 116 - let response = response.with_header(tiny_http::Header { 117 - field: "Content-Type".parse().unwrap(), 118 - value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(), 119 - }); 120 - 121 - let _ = request.respond(response); 122 - 123 - } 124 - "/about" => { 125 - let response = Response::from_string(handlers::about()); 126 - let response = response.with_header(tiny_http::Header { 127 - field: "Content-Type".parse().unwrap(), 128 - value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(), 129 - }); 130 - 131 - let _ = request.respond(response); 132 - 133 - } 134 - asset_url @ _ if asset_url.starts_with("/assets/") => { 135 - println!("getting asset : {}",asset_url); 136 - if let Some(asset) = get_asset(&asset_url){ 137 - let _ = request.respond(asset); 138 - } 139 - 140 - } 141 - blog_url @ _ if blog_url.starts_with("/blog/") => { 142 - 143 - 144 - let response = Response::from_string(handlers::blog(blog_url[6..].to_string())); 145 - let response = response.with_header(tiny_http::Header { 146 - field: "Content-Type".parse().unwrap(), 147 - value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(), 148 - }); 149 - 150 - let _ = request.respond(response); 151 - 152 - } 153 - &_ => { 154 - 155 - let response = Response::from_string(handlers::not_found()); 156 - let response = response.with_header(tiny_http::Header { 157 - field: "Content-Type".parse().unwrap(), 158 - value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(), 159 - }); 160 - 161 - let _ = request.respond(response); 162 - } 163 - } 164 - } 165 - } 166 - 167 - 168 - 169 - fn get_asset(asset:&str)-> Option<Response<File>>{ 170 - 171 - match Path::new(&asset[1..]).exists() { 172 - true => { 173 - println!("found asset"); 174 - Some(Response::from_file(File::open(&asset[1..]).unwrap())) 175 - } 176 - false => None, 177 - } 178 - 179 - } 180 - 181 - 182 - 183 - 184 - 185 - 186 - 187 - 188 - 189 -