Compare commits

..

No commits in common. "b9271ad47d564b35e9eef6e34740c55e46d3d906" and "0af5adec5abd41d75295e317912fbf2130feaa89" have entirely different histories.

2 changed files with 14 additions and 29 deletions

2
Cargo.lock generated
View file

@ -815,7 +815,7 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
[[package]] [[package]]
name = "postwoman" name = "postwoman"
version = "0.3.2" version = "0.3.1"
dependencies = [ dependencies = [
"base64", "base64",
"chrono", "chrono",

View file

@ -2,11 +2,10 @@ mod model;
mod errors; mod errors;
mod ext; mod ext;
use std::str::FromStr; use std::{collections::HashMap, str::FromStr};
use clap::{Parser, Subcommand}; use clap::{Parser, Subcommand};
use indexmap::IndexMap;
pub use model::PostWomanCollection; pub use model::PostWomanCollection;
pub use errors::PostWomanError; pub use errors::PostWomanError;
@ -25,7 +24,7 @@ struct PostWomanArgs {
action: Option<PostWomanActions>, action: Option<PostWomanActions>,
/// start a multi-thread runtime, with multiple worker threads /// start a multi-thread runtime, with multiple worker threads
#[arg(short = 'M', long, default_value_t = false)] #[arg(long, default_value_t = false)]
multi_threaded: bool, multi_threaded: bool,
} }
@ -43,10 +42,6 @@ pub enum PostWomanActions {
/// force debug extractor on all routes /// force debug extractor on all routes
#[arg(long, default_value_t = false)] #[arg(long, default_value_t = false)]
debug: bool, debug: bool,
/// print matched routes but don't perform requests
#[arg(long, default_value_t = false)]
dry_run: bool,
}, },
/// show all registered routes in current collection /// show all registered routes in current collection
@ -71,7 +66,7 @@ fn main() {
} }
} }
let mut collections = IndexMap::new(); let mut collections = HashMap::new();
if !load_collections(&mut collections, args.collection.clone()) { if !load_collections(&mut collections, args.collection.clone()) {
return; return;
@ -109,7 +104,7 @@ fn main() {
} }
} }
fn load_collections(store: &mut IndexMap<String, PostWomanCollection>, mut path: std::path::PathBuf) -> bool { fn load_collections(store: &mut HashMap<String, PostWomanCollection>, mut path: std::path::PathBuf) -> bool {
let collection_raw = match std::fs::read_to_string(&path) { let collection_raw = match std::fs::read_to_string(&path) {
Ok(x) => x, Ok(x) => x,
Err(e) => { Err(e) => {
@ -127,7 +122,6 @@ fn load_collections(store: &mut IndexMap<String, PostWomanCollection>, mut path:
}; };
let name = path.to_string_lossy().to_string(); let name = path.to_string_lossy().to_string();
let mut to_include = Vec::new();
if let Some(ref includes) = collection.include { if let Some(ref includes) = collection.include {
path.pop(); path.pop();
@ -135,18 +129,14 @@ fn load_collections(store: &mut IndexMap<String, PostWomanCollection>, mut path:
let mut base = path.clone(); let mut base = path.clone();
let new = std::path::PathBuf::from_str(include).expect("infallible"); let new = std::path::PathBuf::from_str(include).expect("infallible");
base.push(new); base.push(new);
to_include.push(base); if !load_collections(store, base) {
return false;
}
} }
} }
store.insert(name, collection); store.insert(name, collection);
for base in to_include {
if !load_collections(store, base) {
return false;
}
}
true true
} }
@ -189,7 +179,7 @@ async fn run_postwoman(args: &PostWomanArgs, namespace: String, collection: Post
println!(); println!();
}, },
PostWomanActions::Run { query, parallel, debug, dry_run } => { PostWomanActions::Run { query, parallel, debug } => {
// this is always safe to compile because we tested it beforehand // this is always safe to compile because we tested it beforehand
let pattern = regex::Regex::new(query).expect("tested it before and still failed here???"); let pattern = regex::Regex::new(query).expect("tested it before and still failed here???");
let client = std::sync::Arc::new(collection.client.unwrap_or_default()); let client = std::sync::Arc::new(collection.client.unwrap_or_default());
@ -200,21 +190,16 @@ async fn run_postwoman(args: &PostWomanArgs, namespace: String, collection: Post
let _client = client.clone(); let _client = client.clone();
let _env = env.clone(); let _env = env.clone();
let _endpoint = endpoint.clone(); let _endpoint = endpoint.clone();
let _dry_run = *dry_run;
let _name = name.clone(); let _name = name.clone();
let _namespace = namespace.clone(); let _namespace = namespace.clone();
let task = async move { let task = async move {
let before = chrono::Local::now(); let before = chrono::Local::now();
eprintln!(" : [{}] {_namespace}::{_name} \tsending request...", before.format(TIMESTAMP_FMT)); eprintln!(" : [{}] {_namespace}::{_name} \tsending request...", before.format(TIMESTAMP_FMT));
if _dry_run { let res = _endpoint
(Ok("".to_string()), _namespace, _name, before) .fill(&_env)
} else { .execute(&_client)
let res = _endpoint .await;
.fill(&_env) (res, _namespace, _name, before)
.execute(&_client)
.await;
(res, _namespace, _name, before)
}
}; };
if *parallel { if *parallel {
pool.spawn(task); pool.spawn(task);