summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAshelyn Rose <git@ashen.earth>2025-03-26 18:52:05 -0600
committerAshelyn Rose <git@ashen.earth>2025-03-26 18:52:05 -0600
commit14ad60a6d77f40fdd0b23e60e11ace8c52449c01 (patch)
tree9f3d873b035f91fb5d643071d097d69d6fcac9b3 /src
parent671d8bee2676efe1058d082290993c4bba3c8029 (diff)
rough config setup
Diffstat (limited to 'src')
-rw-r--r--src/components/editor/mod.rs0
-rw-r--r--src/components/mod.rs2
-rw-r--r--src/components/renderer/mod.rs0
-rw-r--r--src/data/config.rs45
-rw-r--r--src/data/mod.rs3
-rw-r--r--src/data/pages.rs0
-rw-r--r--src/data/users.rs0
-rw-r--r--src/main.rs2
8 files changed, 52 insertions, 0 deletions
diff --git a/src/components/editor/mod.rs b/src/components/editor/mod.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/editor/mod.rs
diff --git a/src/components/mod.rs b/src/components/mod.rs
index 62ca08a..2015a2e 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -1,4 +1,6 @@
+pub mod editor;
 pub mod layout;
+pub mod renderer;
 
 pub mod app;
 
diff --git a/src/components/renderer/mod.rs b/src/components/renderer/mod.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/renderer/mod.rs
diff --git a/src/data/config.rs b/src/data/config.rs
new file mode 100644
index 0000000..bce5c94
--- /dev/null
+++ b/src/data/config.rs
@@ -0,0 +1,45 @@
+use std::fs;
+use std::path::{Path, PathBuf};
+
+use serde::Deserialize;
+
+#[derive(Deserialize)]
+struct ConfigFile {
+    site_title: Option<String>,
+    data_dir: Option<PathBuf>,
+    external_root: Option<String>,
+    listen_port: Option<u16>,
+    footer_copyright: Option<String>,
+}
+
+pub struct Config {
+    site_title: String,
+    data_dir: PathBuf,
+    external_root: String,
+    listen_port: u16,
+    footer_copyright: Option<String>
+}
+
+impl Config {
+    pub fn read_from_file<P: AsRef<Path>>(path: P) -> Result<Self, String> {
+        let config_contents = fs::read_to_string(&path)
+            .map_err(|_| "Unable to open config file".to_string())?;
+
+        let file : ConfigFile = toml::from_str(&config_contents)
+            .map_err(|err| err.to_string())?;
+
+        let port = file.listen_port.unwrap_or(3000);
+
+        Ok(Self {
+            site_title: file.site_title
+                .unwrap_or("Untitled StormScribe Site".to_string()),
+            data_dir: file.data_dir.unwrap_or(path.as_ref()
+                .canonicalize().map_err(|_| "Cannot resolve config file location".to_string())?
+                .parent().ok_or("Cannot resolve data dir".to_string())?.to_path_buf()),
+            external_root: file.external_root
+                .unwrap_or(format!("http://localhost:{port}/")),
+            listen_port: port,
+            footer_copyright: file.footer_copyright,
+        })
+    }
+}
diff --git a/src/data/mod.rs b/src/data/mod.rs
new file mode 100644
index 0000000..bfe8b48
--- /dev/null
+++ b/src/data/mod.rs
@@ -0,0 +1,3 @@
+pub mod config;
+
+struct DirState
diff --git a/src/data/pages.rs b/src/data/pages.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/data/pages.rs
diff --git a/src/data/users.rs b/src/data/users.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/data/users.rs
diff --git a/src/main.rs b/src/main.rs
index ea22824..a9e3f1d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,3 +1,5 @@
+pub mod data;
+
 use tokio::signal;
 
 #[cfg(feature = "ssr")]