tangled
alpha
login
or
join now
technoduck.me
/
staticrustator
0
fork
atom
Static site generator + my presonnal website written in rust for some reason.
0
fork
atom
overview
issues
pulls
pipelines
removed unnecesary web server
technoduck.me
2 years ago
5af7ec29
fc3a2abc
+22
-178
4 changed files
expand all
collapse all
unified
split
Cargo.lock
Cargo.toml
src
handlers.rs
main.rs
+14
-45
Cargo.lock
···
67
67
]
68
68
69
69
[[package]]
70
70
-
name = "ascii"
71
71
-
version = "1.1.0"
72
72
-
source = "registry+https://github.com/rust-lang/crates.io-index"
73
73
-
checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
74
74
-
75
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
101
-
"syn 2.0.76",
95
95
+
"syn 2.0.77",
102
96
]
103
97
104
98
[[package]]
···
211
205
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
212
206
213
207
[[package]]
214
214
-
name = "chunked_transfer"
215
215
-
version = "1.5.0"
216
216
-
source = "registry+https://github.com/rust-lang/crates.io-index"
217
217
-
checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901"
218
218
-
219
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
251
-
"syn 2.0.76",
239
239
+
"syn 2.0.77",
252
240
]
253
241
254
242
[[package]]
···
314
302
"proc-macro2",
315
303
"quote",
316
304
"strsim",
317
317
-
"syn 2.0.76",
305
305
+
"syn 2.0.77",
318
306
]
319
307
320
308
[[package]]
···
325
313
dependencies = [
326
314
"darling_core",
327
315
"quote",
328
328
-
"syn 2.0.76",
316
316
+
"syn 2.0.77",
329
317
]
330
318
331
319
[[package]]
···
355
343
"darling",
356
344
"proc-macro2",
357
345
"quote",
358
358
-
"syn 2.0.76",
346
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
368
-
"syn 2.0.76",
356
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
485
-
486
486
-
[[package]]
487
487
-
name = "httpdate"
488
488
-
version = "1.0.3"
489
489
-
source = "registry+https://github.com/rust-lang/crates.io-index"
490
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
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
863
-
"tiny_http",
844
844
+
"syntect",
864
845
]
865
846
866
847
[[package]]
···
895
876
dependencies = [
896
877
"proc-macro2",
897
878
"quote",
898
898
-
"syn 2.0.76",
879
879
+
"syn 2.0.77",
899
880
]
900
881
901
882
[[package]]
···
976
957
977
958
[[package]]
978
959
name = "syn"
979
979
-
version = "2.0.76"
960
960
+
version = "2.0.77"
980
961
source = "registry+https://github.com/rust-lang/crates.io-index"
981
981
-
checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525"
962
962
+
checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
982
963
dependencies = [
983
964
"proc-macro2",
984
965
"quote",
···
1035
1016
dependencies = [
1036
1017
"proc-macro2",
1037
1018
"quote",
1038
1038
-
"syn 2.0.76",
1019
1019
+
"syn 2.0.77",
1039
1020
]
1040
1021
1041
1022
[[package]]
···
1070
1051
]
1071
1052
1072
1053
[[package]]
1073
1073
-
name = "tiny_http"
1074
1074
-
version = "0.12.0"
1075
1075
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1076
1076
-
checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82"
1077
1077
-
dependencies = [
1078
1078
-
"ascii",
1079
1079
-
"chunked_transfer",
1080
1080
-
"httpdate",
1081
1081
-
"log",
1082
1082
-
]
1083
1083
-
1084
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
1200
-
"syn 2.0.76",
1169
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
1222
-
"syn 2.0.76",
1191
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
1423
-
"syn 2.0.76",
1392
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
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
21
-
tiny_http = "0.12.0"
20
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
43
-
let plugins = comrak::Plugins::default();
44
44
-
//let adapter = comrak::plugins::syntect::SyntectAdapterBuilder::new()
45
45
-
// .theme("base16-ocean.dark")
46
46
-
// .build();
43
43
+
let mut plugins = comrak::Plugins::default();
44
44
+
let adapter = comrak::plugins::syntect::SyntectAdapterBuilder::new()
45
45
+
.theme("base16-ocean.dark")
46
46
+
.build();
47
47
48
48
-
//plugins.render.codefence_syntax_highlighter = Some(&adapter);
48
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
1
-
use std::{error::Error, fs::{self, read_dir, DirBuilder, File}, io::Write, path::Path};
2
2
-
3
3
-
use ascii::AsciiString;
4
4
-
use tiny_http::{Response, Server};
5
5
-
1
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
37
-
Err(_) => (),
33
33
+
Err(err) => println!("Error detected: {err}"),
38
34
}
39
35
40
36
···
67
63
}
68
64
Ok(())
69
65
}
70
70
-
71
71
-
fn old_main() {
72
72
-
73
73
-
// let app: axum::Router = Router::new()
74
74
-
// .route("/", get(handlers::index))
75
75
-
// .route("/about", get(handlers::about))
76
76
-
// .route("/blog",get(handlers::index))
77
77
-
// .route("/blog/:blog_path",get(handlers::blog))
78
78
-
// .route_service("/robots.txt", ServeFile::new("assets/robots.txt"))
79
79
-
// .fallback(get(handlers::not_found))
80
80
-
// .nest_service("/assets", ServeDir::new("assets"));
81
81
-
//
82
82
-
//
83
83
-
// let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await.unwrap();
84
84
-
// axum::serve(listener, app).await.unwrap();
85
85
-
//
86
86
-
//-----
87
87
-
// let server = Arc::new(Server::http("127.0.0.1:3001").unwrap());
88
88
-
// println!("started server on port 3001");
89
89
-
//
90
90
-
// let mut handles = Vec::new();
91
91
-
//
92
92
-
// for thread_num in 0..6 {
93
93
-
// println!("starting thread {}",thread_num);
94
94
-
// let server = server.clone();
95
95
-
// handles.push(thread::spawn(move || server_thread(server)));
96
96
-
//
97
97
-
// }
98
98
-
// for h in handles {
99
99
-
// h.join().unwrap();
100
100
-
// }
101
101
-
// ------------
102
102
-
let server = Server::http("127.0.0.1:3000").unwrap();
103
103
-
println!("started server on port 3001");
104
104
-
server_thread(server);
105
105
-
106
106
-
}
107
107
-
108
108
-
fn server_thread(server: Server) {
109
109
-
for request in server.incoming_requests() {
110
110
-
println!("received request; method: {}, url: {}",
111
111
-
request.method(),request.url());
112
112
-
113
113
-
match request.url() {
114
114
-
"" | "/" => {
115
115
-
let response = Response::from_string(handlers::index());
116
116
-
let response = response.with_header(tiny_http::Header {
117
117
-
field: "Content-Type".parse().unwrap(),
118
118
-
value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(),
119
119
-
});
120
120
-
121
121
-
let _ = request.respond(response);
122
122
-
123
123
-
}
124
124
-
"/about" => {
125
125
-
let response = Response::from_string(handlers::about());
126
126
-
let response = response.with_header(tiny_http::Header {
127
127
-
field: "Content-Type".parse().unwrap(),
128
128
-
value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(),
129
129
-
});
130
130
-
131
131
-
let _ = request.respond(response);
132
132
-
133
133
-
}
134
134
-
asset_url @ _ if asset_url.starts_with("/assets/") => {
135
135
-
println!("getting asset : {}",asset_url);
136
136
-
if let Some(asset) = get_asset(&asset_url){
137
137
-
let _ = request.respond(asset);
138
138
-
}
139
139
-
140
140
-
}
141
141
-
blog_url @ _ if blog_url.starts_with("/blog/") => {
142
142
-
143
143
-
144
144
-
let response = Response::from_string(handlers::blog(blog_url[6..].to_string()));
145
145
-
let response = response.with_header(tiny_http::Header {
146
146
-
field: "Content-Type".parse().unwrap(),
147
147
-
value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(),
148
148
-
});
149
149
-
150
150
-
let _ = request.respond(response);
151
151
-
152
152
-
}
153
153
-
&_ => {
154
154
-
155
155
-
let response = Response::from_string(handlers::not_found());
156
156
-
let response = response.with_header(tiny_http::Header {
157
157
-
field: "Content-Type".parse().unwrap(),
158
158
-
value: AsciiString::from_ascii("text/html;charset=utf8").unwrap(),
159
159
-
});
160
160
-
161
161
-
let _ = request.respond(response);
162
162
-
}
163
163
-
}
164
164
-
}
165
165
-
}
166
166
-
167
167
-
168
168
-
169
169
-
fn get_asset(asset:&str)-> Option<Response<File>>{
170
170
-
171
171
-
match Path::new(&asset[1..]).exists() {
172
172
-
true => {
173
173
-
println!("found asset");
174
174
-
Some(Response::from_file(File::open(&asset[1..]).unwrap()))
175
175
-
}
176
176
-
false => None,
177
177
-
}
178
178
-
179
179
-
}
180
180
-
181
181
-
182
182
-
183
183
-
184
184
-
185
185
-
186
186
-
187
187
-
188
188
-
189
189
-