summaryrefslogtreecommitdiffstats
path: root/src/recite
diff options
context:
space:
mode:
Diffstat (limited to 'src/recite')
-rw-r--r--src/recite/path.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/recite/path.rs b/src/recite/path.rs
new file mode 100644
index 0000000..28eb45b
--- /dev/null
+++ b/src/recite/path.rs
@@ -0,0 +1,42 @@
+use std::fs;
+use std::path::Path;
+
+/// Refresh the shell's $PATH
+///
+/// This function caches all valid paths within within the directories
+/// specified.
+///
+/// # Arguments
+/// * `paths` - A reference to a vector that holds a list to the shell $PATHs
+///
+/// # Returns
+/// * `bins: Vec<String>` - A new cache of all valid file paths in $PATH
+///
+/// # Examples
+/// ```
+/// let path = vec!["/bin"];
+/// let path = path.into_iter().map(Path::new).collect();
+/// let mut bins = prefresh(&path);
+/// ...
+/// // A situation occurs where the $PATH needs to be refreshed
+/// bins = prefresh(&path)
+/// ```
+pub fn prefresh(path: &Vec<&Path>) -> Vec<String> {
+ let mut bins: Vec<String> = Vec::new();
+
+ for p in path {
+ let files = fs::read_dir(p).expect(
+ format!(
+ "dwvsh: error: unable to read the contents of {}",
+ p.display().to_string()
+ )
+ .as_str(),
+ );
+
+ for file in files {
+ bins.push(file.unwrap().path().display().to_string());
+ }
+ }
+
+ bins
+}