From f538932fc51928eb05a16fdc148245860c14b10d Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Wed, 12 Jun 2019 15:06:04 +0200 Subject: [PATCH] Accept -p/--path as command line argument --- src/client.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/src/client.rs b/src/client.rs index 87448dc..b869dca 100644 --- a/src/client.rs +++ b/src/client.rs @@ -15,7 +15,59 @@ fn main() { beautylog::init(log::LevelFilter::Info).ok(); - let current_dir = match env::current_dir() { + let mut args = vec![]; + let mut iter = env::args().skip(1); + + let current_dir = { + + let mut current_dir = None; + + loop { + + match iter.next() { + + Some(ref x) if (x == "-p" || x == "--path") && current_dir.is_some() => { + error!("path is specified multiple times"); + exit(1); + }, + + Some(ref x) if x == "-p" || x == "--path" => { + match iter.next() { + Some(v) => current_dir = Some(v.clone()), + None => { + error!("expecting a path after -p"); + exit(1); + } + } + }, + Some(ref x) => { + args.push(x.clone()); + }, + None => break current_dir, + } + } + + }; + + let current_dir = current_dir.map(|x| { + if ! x.starts_with("/") { + let current_dir = match env::current_dir() { + Err(e) => { + error!("couldn't find current directory: {}", e); + exit(1); + }, + Ok(path) => { + let p = path.to_str(); + p.unwrap().to_owned() + }, + }; + format!("{}/{}", current_dir, x) + } else { + x + } + }); + + let current_dir = current_dir.unwrap_or_else(|| match env::current_dir() { Err(e) => { error!("couldn't find current directory: {}", e); exit(1); @@ -24,9 +76,9 @@ fn main() { let p = path.to_str(); p.unwrap().to_owned() }, - }; + }); - let args = env::args().skip(1).collect::>().join("&"); + let args = args.join("&"); let url = if args.is_empty() { format!("http://localhost:1500{}", current_dir) @@ -34,6 +86,8 @@ fn main() { format!("http://localhost:1500{}?{}", current_dir, args) }; + println!("{}", url); + let url = percent_encode(url.as_bytes(), DEFAULT_ENCODE_SET).to_string(); let url = url.parse::().unwrap(); rt::run(fetch_url(url));