aboutsummaryrefslogtreecommitdiff
path: root/src/router.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/router.rs')
-rw-r--r--src/router.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/router.rs b/src/router.rs
index 35fdf3e..c196ab8 100644
--- a/src/router.rs
+++ b/src/router.rs
@@ -1,3 +1,6 @@
+use std::borrow::Borrow;
+
+use crate::assets::PostAsset;
use regex::Regex;
const ACTION_REGEX: &str = r"/{0,1}(?P<action>\w*)/(?P<id>.+)";
@@ -8,6 +11,10 @@ pub enum Router {
Post { page: String },
}
+pub fn blog_post_exists(name: &str) -> bool {
+ PostAsset::iter().any(|x| name.eq(&x.to_string()))
+}
+
impl Router {
pub fn new(path: &str) -> Router {
let re = Regex::new(ACTION_REGEX).unwrap();
@@ -17,6 +24,13 @@ impl Router {
None => "index",
};
+
+ // this 7 means the "/posts/" from the full path
+ let trimmed_path: String = path.chars().skip(7).collect();
+ if action.eq("posts") && !blog_post_exists(&trimmed_path) {
+ return Router::NotFound;
+ }
+
match action {
"posts" => Router::Post {
page: caps.unwrap()["id"].to_string(),