aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorFuwn <[email protected]>2022-06-15 00:11:03 -0700
committerFuwn <[email protected]>2022-06-15 00:11:03 -0700
commitd9e383f3ef8990d2ff11d368ff825dfe6f18f98b (patch)
treefa2816f1611ec42c46edfc06d3b1e01a1ad32f00 /src/modules
parentfix(uptime): trigger uptime on module attach (diff)
downloadlocus-d9e383f3ef8990d2ff11d368ff825dfe6f18f98b.tar.xz
locus-d9e383f3ef8990d2ff11d368ff825dfe6f18f98b.zip
feat(skills): json skill tree
Diffstat (limited to 'src/modules')
-rw-r--r--src/modules/mod.rs3
-rw-r--r--src/modules/skills.rs70
-rw-r--r--src/modules/static.rs2
3 files changed, 73 insertions, 2 deletions
diff --git a/src/modules/mod.rs b/src/modules/mod.rs
index 79025ae..36f5e78 100644
--- a/src/modules/mod.rs
+++ b/src/modules/mod.rs
@@ -23,12 +23,13 @@ mod robots;
mod router;
pub mod search;
mod sitemap;
+mod skills;
mod r#static;
mod uptime;
pub fn module(router: &mut windmark::Router) {
crate::statelesses!(
router, uptime, sitemap, search, remarks, blog, random, r#static, router,
- robots,
+ robots, skills,
);
}
diff --git a/src/modules/skills.rs b/src/modules/skills.rs
new file mode 100644
index 0000000..011c876
--- /dev/null
+++ b/src/modules/skills.rs
@@ -0,0 +1,70 @@
+// This file is part of Locus <https://github.com/gemrest/locus>.
+// Copyright (C) 2022-2022 Fuwn <[email protected]>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 3.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+//
+// Copyright (C) 2022-2022 Fuwn <[email protected]>
+// SPDX-License-Identifier: GPL-3.0-only
+
+#![allow(unused)]
+
+use std::{collections::HashMap, lazy::SyncLazy};
+
+type SkillTree = HashMap<String, Vec<HashMap<String, Option<Vec<String>>>>>;
+
+static SKILL_TREE: SyncLazy<SkillTree> = SyncLazy::new(|| {
+ serde_json::from_str(include_str!("../../content/json/skills.json")).unwrap()
+});
+
+pub fn module(router: &mut windmark::Router) {
+ let mut skills = SKILL_TREE
+ .iter()
+ .map(|(category, skills)| {
+ format!(
+ "## {}\n\n{}",
+ category,
+ skills
+ .iter()
+ .map(|items| {
+ items
+ .iter()
+ .map(|(item, areas)| {
+ format!(
+ "* {}{}",
+ item,
+ areas.clone().map_or_else(
+ || "".to_string(),
+ |known_areas| format!(": {}", known_areas.join(", "))
+ )
+ )
+ })
+ .collect::<Vec<String>>()
+ .join("\n")
+ })
+ .collect::<Vec<String>>()
+ .join("\n")
+ )
+ })
+ .collect::<Vec<String>>();
+
+ skills.sort();
+
+ crate::route::track_mount(
+ router,
+ "/skills",
+ "A Few Skills of Fuwn",
+ Box::new(move |context| {
+ crate::success!(format!("# Skills\n\n{}", skills.join("\n")), context)
+ }),
+ );
+}
diff --git a/src/modules/static.rs b/src/modules/static.rs
index 13a63f3..ca2f9d8 100644
--- a/src/modules/static.rs
+++ b/src/modules/static.rs
@@ -42,7 +42,7 @@ pub fn module(router: &mut windmark::Router) {
"gopher"
),
("/interests", "A few interests of Fuwn", "interests"),
- ("/skills", "A few skills of Fuwn", "skills"),
+ // ("/skills", "A few skills of Fuwn", "skills"),
(
"/licensing",
"The licensing terms of this Gemini capsule",