From bb2bcd604b13d15f7dcb7f7fc1d1cc2ae12dda8d Mon Sep 17 00:00:00 2001 From: Matan Kushner Date: Tue, 23 Apr 2019 14:51:08 -0400 Subject: Share dir_files between segments through Context (#16) --- src/context.rs | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'src/context.rs') diff --git a/src/context.rs b/src/context.rs index 32e9fab11..71662fe06 100644 --- a/src/context.rs +++ b/src/context.rs @@ -1,30 +1,52 @@ use clap::ArgMatches; use std::env; +use std::fs; use std::path::PathBuf; pub struct Context<'a> { pub current_dir: PathBuf, + pub dir_files: Vec, pub arguments: ArgMatches<'a>, } impl<'a> Context<'a> { pub fn new(arguments: ArgMatches) -> Context { - // TODO: Currently gets the physical directory. Get the logical directory. let current_dir = env::current_dir().expect("Unable to identify current directory."); - - Context { - current_dir, - arguments, - } + Context::new_with_dir(arguments, current_dir) } + #[allow(dead_code)] pub fn new_with_dir(arguments: ArgMatches, dir: T) -> Context where T: Into, { + // TODO: Currently gets the physical directory. Get the logical directory. + let current_dir = Context::expand_tilde(dir.into()); + + let dir_files = fs::read_dir(¤t_dir) + .unwrap_or_else(|_| { + panic!( + "Unable to read current directory: {}", + current_dir.to_string_lossy() + ) + }) + .filter_map(Result::ok) + .map(|entry| entry.path()) + .collect::>(); + Context { - current_dir: dir.into(), + current_dir, arguments, + dir_files, + } + } + + /// Convert a `~` in a path to the home directory + fn expand_tilde(dir: PathBuf) -> PathBuf { + if dir.starts_with("~") { + let without_home = dir.strip_prefix("~").unwrap(); + return dirs::home_dir().unwrap().join(without_home); } + dir } } -- cgit v1.2.3