aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs108
1 files changed, 108 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