summaryrefslogtreecommitdiffstats
path: root/src/compose.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/compose.rs')
-rw-r--r--src/compose.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/compose.rs b/src/compose.rs
new file mode 100644
index 0000000..8c4b3ea
--- /dev/null
+++ b/src/compose.rs
@@ -0,0 +1,58 @@
+use crate::poem::{read::Readable, recite::Reciteable, Poem};
+use std::fs;
+use std::path::PathBuf;
+
+pub fn env() {
+ // Use local repo path if running the debug target
+ let global_rc = if cfg!(debug_assertions) {
+ let mut base = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
+ base.push("dist/etc/dwvshrc");
+ base
+ } else {
+ PathBuf::from("/etc/dwvshrc")
+ };
+
+ // User defined rc file in ~
+ let mut local_rc = PathBuf::from(env!("HOME"));
+ local_rc.push(".dwvshrc");
+
+ // Read, read, and recite
+ rrr(global_rc);
+ rrr(local_rc);
+}
+
+fn rrr(path: PathBuf) {
+ let poetry = match fs::read_to_string(&path) {
+ Ok(poetry) => poetry,
+ Err(e) => {
+ if path.to_string_lossy().contains("etc/dwvshrc") {
+ eprintln!(
+ "dwvsh: unable to read global dwvshrc file: {}",
+ e.to_string().to_lowercase()
+ );
+ }
+ return;
+ }
+ };
+
+ let poem = match Poem::read(poetry) {
+ Ok(poem) => poem,
+ Err(e) => {
+ eprintln!(
+ "dwvsh: error in {}: {}",
+ path.display(),
+ e.to_string().to_lowercase()
+ );
+ return;
+ }
+ };
+
+ let mut bins = vec![];
+ match poem.recite(&mut bins, None) {
+ Ok(_) => {}
+ Err(e) => {
+ eprintln!("dwvsh: {}", e.to_string().to_lowercase());
+ return;
+ }
+ }
+}