awesome pawsome
This commit is contained in:
14
Cargo.lock
generated
14
Cargo.lock
generated
@@ -416,12 +416,20 @@ version = "0.2.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30"
|
checksum = "670fdfda89751bc4a84ac13eaa63e205cf0fd22b4c9a5fbfa085b63c1f1d3a30"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memo-map"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "minijinja"
|
name = "minijinja"
|
||||||
version = "2.14.0"
|
version = "2.14.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "12ea9ac0a51fb5112607099560fdf0f90366ab088a2a9e6e8ae176794e9806aa"
|
checksum = "12ea9ac0a51fb5112607099560fdf0f90366ab088a2a9e6e8ae176794e9806aa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"memo-map",
|
||||||
|
"self_cell",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -511,6 +519,12 @@ dependencies = [
|
|||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "self_cell"
|
||||||
|
version = "1.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "16c2f82143577edb4921b71ede051dac62ca3c16084e918bf7b40c96ae10eb33"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.228"
|
version = "1.0.228"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ bytes = "1.11.0"
|
|||||||
http-body-util = "0.1.3"
|
http-body-util = "0.1.3"
|
||||||
hyper = { version = "1.8.1", features = ["http1", "http2", "server"] }
|
hyper = { version = "1.8.1", features = ["http1", "http2", "server"] }
|
||||||
macro_rules_attribute = "0.2.2"
|
macro_rules_attribute = "0.2.2"
|
||||||
minijinja = { version = "2.14.0", features = ["loop_controls"] }
|
minijinja = { version = "2.14.0", features = ["loop_controls", "loader"] }
|
||||||
serde = { version = "1.0.228", features = ["derive"] }
|
serde = { version = "1.0.228", features = ["derive"] }
|
||||||
smol = "2.0.2"
|
smol = "2.0.2"
|
||||||
smol-hyper = "0.1.1"
|
smol-hyper = "0.1.1"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use std::future::IntoFuture;
|
use std::future::IntoFuture;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
use crate::AppState;
|
use crate::AppState;
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
@@ -11,8 +12,8 @@ use smol::{
|
|||||||
use toml::Table;
|
use toml::Table;
|
||||||
|
|
||||||
pub struct Page {
|
pub struct Page {
|
||||||
header: Header,
|
pub header: Header,
|
||||||
content: String,
|
// content: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug)]
|
||||||
@@ -26,13 +27,13 @@ pub enum PageType {
|
|||||||
Base,
|
Base,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Deserialize, Debug)]
|
#[derive(Deserialize, Debug, Clone)]
|
||||||
pub struct Header {
|
pub struct Header {
|
||||||
id: String,
|
pub id: String,
|
||||||
// r#type: PageType,
|
// r#type: PageType,
|
||||||
r#type: String,
|
r#type: String,
|
||||||
title: Option<String>,
|
title: Option<String>,
|
||||||
path: Option<String>,
|
pub path: Option<String>,
|
||||||
// TODO impl this later
|
// TODO impl this later
|
||||||
// extras: Table,
|
// extras: Table,
|
||||||
}
|
}
|
||||||
@@ -41,8 +42,8 @@ pub struct Root {
|
|||||||
id: String,
|
id: String,
|
||||||
// r#type: PageType,
|
// r#type: PageType,
|
||||||
r#type: String,
|
r#type: String,
|
||||||
title: Option<String>,
|
pub title: Option<String>,
|
||||||
path: Option<String>,
|
pub path: Option<String>,
|
||||||
// TODO impl this later
|
// TODO impl this later
|
||||||
// extras: Table,
|
// extras: Table,
|
||||||
}
|
}
|
||||||
@@ -61,6 +62,25 @@ impl AppState<'_> {
|
|||||||
if entry.file_type().await?.is_dir() {
|
if entry.file_type().await?.is_dir() {
|
||||||
let entry_opened = fs::read_dir(entry.path()).await?;
|
let entry_opened = fs::read_dir(entry.path()).await?;
|
||||||
println!("Opened {}", entry.file_name().to_str().unwrap());
|
println!("Opened {}", entry.file_name().to_str().unwrap());
|
||||||
|
let mut config_path = entry.path();
|
||||||
|
config_path.push("config.toml");
|
||||||
|
|
||||||
|
let config_file = fs::read_to_string(config_path).await?;
|
||||||
|
let header: Header = toml::from_str(&config_file)?;
|
||||||
|
|
||||||
|
let mut index = entry.path();
|
||||||
|
index.push("index.html");
|
||||||
|
if let Ok(mreoww) = fs::read_to_string(index).await {
|
||||||
|
self.env.add_template_owned(header.id.clone(), mreoww)?;
|
||||||
|
} else {
|
||||||
|
println!(
|
||||||
|
"{}, doesn't have a index.html ??",
|
||||||
|
entry.file_name().to_str().unwrap()
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let page = Page { header: header };
|
||||||
|
self.pages.push(page);
|
||||||
} else {
|
} else {
|
||||||
println!("Not parsing {}", entry.file_name().to_str().unwrap());
|
println!("Not parsing {}", entry.file_name().to_str().unwrap());
|
||||||
}
|
}
|
||||||
|
|||||||
33
src/main.rs
33
src/main.rs
@@ -20,7 +20,7 @@ mod loader;
|
|||||||
use crate::loader::*;
|
use crate::loader::*;
|
||||||
|
|
||||||
struct AppState<'a> {
|
struct AppState<'a> {
|
||||||
pages: Vec<Page>,
|
pub pages: Vec<Page>,
|
||||||
env: Environment<'a>,
|
env: Environment<'a>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,18 +28,29 @@ struct AppState<'a> {
|
|||||||
async fn serve(req: Request<Incoming>, state: Arc<AppState<'_>>) -> Result<Response<Full<Bytes>>> {
|
async fn serve(req: Request<Incoming>, state: Arc<AppState<'_>>) -> Result<Response<Full<Bytes>>> {
|
||||||
println!("Serving {}", req.uri());
|
println!("Serving {}", req.uri());
|
||||||
|
|
||||||
let tmpl = state.env.get_template("hello").unwrap();
|
|
||||||
let guh = tmpl.render(context!(name => "meowmeowmeowmeow!")).unwrap();
|
|
||||||
let guh2 = state.env.get_template("meow").unwrap();
|
|
||||||
let guh3 = guh2.render(context!(meow => "meow")).unwrap();
|
|
||||||
|
|
||||||
let path = req.uri().path();
|
let path = req.uri().path();
|
||||||
let reply: Bytes = match path {
|
let mreow = state.pages.iter().find(|&x| {
|
||||||
"/" => guh.into(),
|
if let Some(path_x) = &x.header.path {
|
||||||
"/mreow" => guh3.into(),
|
println!("{},{}", path_x, path);
|
||||||
_ => "Invalid path!".into(),
|
if path_x == path {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let reply = match mreow {
|
||||||
|
Some(x) => state
|
||||||
|
.env
|
||||||
|
.get_template(&x.header.id)
|
||||||
|
.unwrap()
|
||||||
|
.render(context! {})
|
||||||
|
.unwrap(),
|
||||||
|
None => "?".to_string(),
|
||||||
};
|
};
|
||||||
Ok(Response::new(Full::new(reply)))
|
Ok(Response::new(Full::new(reply.into())))
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_client(client: Async<TcpStream>, state: Arc<AppState<'_>>) -> Result<()> {
|
async fn handle_client(client: Async<TcpStream>, state: Arc<AppState<'_>>) -> Result<()> {
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
id = "meowOne"
|
||||||
|
type = "Root"
|
||||||
|
path = "/"
|
||||||
|
|||||||
1
template-serve/home/index.html
Normal file
1
template-serve/home/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MREOW
|
||||||
3
template-serve/second/config.toml
Normal file
3
template-serve/second/config.toml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
id = "meow"
|
||||||
|
type = "Root"
|
||||||
|
path = "/2"
|
||||||
1
template-serve/second/index.html
Normal file
1
template-serve/second/index.html
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MREOW2
|
||||||
Reference in New Issue
Block a user