aboutsummaryrefslogtreecommitdiff
path: root/src/modules/skills.rs
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/skills.rs
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/skills.rs')
-rw-r--r--src/modules/skills.rs70
1 files changed, 70 insertions, 0 deletions
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)
+ }),
+ );
+}