diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 108 | ||||
-rw-r--r-- | src/main.rs | 72 |
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 |