aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs108
-rw-r--r--src/main.rs72
2 files changed, 180 insertions, 0 deletions
diff --git a/src/lib.rs b/src/lib.rs
new file mode 100644
index 0000000..3edd379
--- /dev/null
+++ b/src/lib.rs
@@ -0,0 +1,108 @@
+use std::{fs, path};
+use std::io::ErrorKind;
+use toml;
+
+pub struct Config {
+ config: toml::Value,
+ commands: toml::Value,
+}
+impl Config {
+ pub fn new() -> Config {
+ println!("Using built-in config");
+ Config {
+ config: toml::toml!{
+ source = "src"
+ build_dir = "build"
+
+ do_not_scan = []
+ exclude = []
+
+ file_delim = ":?"
+ command_delim = ":!"
+ commands_file = "commands.toml"
+ },
+ commands: toml::toml!{
+ empty = ""
+ }
+ }
+ }
+
+ pub fn import(config: &str) -> Config {
+ println!("Using found config");
+ let config: toml::Value = toml::from_str(config).expect("Could not load config");
+ let config = config.get("config").expect("Could not find \"[config]\" field");
+
+ // Attempt to read commands file
+ let commands: toml::Value = match config.get("commands_file") {
+ Some(n) => {
+ if n.is_str() {
+ let file_string = n.as_str().unwrap();
+ let file_string = match fs::read_to_string(file_string) {
+ Ok(n) => n,
+ Err(_) => {println!("Could not load commands from file"); String::from("[commands]")},
+ };
+ toml::from_str(file_string.as_str()).expect("Invalid toml")
+ } else {
+ panic!()
+ }
+ },
+ None => {println!("Could not load commands from file"); toml::toml!{[commands]}},
+ };
+ let commands = commands.get("commands").expect("Could not find \"[commands]\" field");
+
+ Config {
+ config: config.clone(),
+ commands: commands.clone(),
+ }
+ }
+
+ pub fn get_str(&self, string: &str) -> Option<&str> {
+ match self.config.get(string) {
+ Some(n) => n.as_str(),
+ None => None
+ }
+ }
+
+ pub fn get_cmd_str(&self, string: &str) -> Option<&str> {
+ match self.commands.get(string) {
+ Some(n) => n.as_str(),
+ None => None
+ }
+ }
+}
+
+
+pub fn create_dir(path: &str) -> Result<(), ()> {
+ match fs::create_dir(std::path::PathBuf::from(path)) {
+ Ok(_) => (),
+ Err(n) => match n.kind() {
+ ErrorKind::AlreadyExists => (),
+ _ => return Err(()),
+ }
+ }
+ return Ok(())
+}
+
+pub fn remove_path_head(path: &path::PathBuf) -> path::PathBuf {
+ let mut path = path.to_str().unwrap().split("/");
+ path.next();
+ let path: path::PathBuf = path.collect();
+
+ return path
+}
+
+pub fn append_path_head(path: &path::PathBuf, head: &str) -> path::PathBuf {
+ let mut head = path::PathBuf::from(head);
+ head.push(path);
+ return head
+}
+
+pub fn replace_path_head(path: &path::PathBuf, head: &str) -> path::PathBuf {
+ let path = remove_path_head(path);
+ append_path_head(&path, head)
+}
+
+pub fn remove_path_tail(path: &mut path::PathBuf) -> &path::PathBuf {
+ path.pop();
+ path
+} \ No newline at end of file
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..a6f8e1f
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,72 @@
+use std::fs;
+
+fn main() {
+
+ let config = match fs::read_to_string("settings.toml") {
+ Ok(n) => simple_static_site_generator::Config::import(&(n.as_str())),
+ Err(n) => {print!("\"settings.toml\": {}: ", n); simple_static_site_generator::Config::new()},
+ };
+
+ println!("{}", config.get_str("source").unwrap());
+
+ let mut path_vec = vec![];
+ let mut ex_path_vec = vec![];
+
+ let dirs = fs::read_dir("src").unwrap();
+ for dir in dirs {
+
+ let path = dir.as_ref().unwrap().path();
+ if path != std::path::PathBuf::from("assets") {
+ path_vec.push(path);
+ } else {
+ ex_path_vec.push(path);
+ }
+ }
+
+ println!("INCLUDED");
+ for x in &path_vec {
+ println!("{:?}", x)
+ }
+ println!("EXCLUDED");
+ for x in &ex_path_vec {
+ println!("{:?}", x)
+ }
+ println!();
+
+
+ // create build directory or panic
+ simple_static_site_generator::create_dir("build").unwrap();
+
+ for path in path_vec {
+ let mut file_string = String::new();
+
+ if path.is_dir() {
+ // RECURSE HERE
+ continue
+ }
+
+ for line in fs::read_to_string(&path).unwrap().lines() {
+ if line.contains(":?") {
+ let v: Vec<&str> = line.trim().split(":?").collect();
+ let v = v.get(1).unwrap();
+
+ println!("INSERTING {} into {:?}", v, path);
+
+ file_string.push_str(fs::read_to_string(v).unwrap().as_ref());
+ } else {
+ file_string.push_str(line);
+ file_string.push('\n')
+ }
+ }
+
+
+ let dest = simple_static_site_generator::replace_path_head(&path, "build/");
+
+ // NEEDS TO CREATE DIRECTORY STRUCTURE
+ fs::write(dest, file_string).expect("Could not write file");
+
+ }
+
+
+ // NEEDS TO COPY NOT SCANNED DIRECTORIES
+} \ No newline at end of file