From 18d3d1b530309e4ffefc9b9f135fd7fc8ff21b20 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 9 Jul 2022 08:06:39 +0000 Subject: [PATCH 01/64] Add status code in response assignations It is really interesting to hold the request status codes to be able to interact with them. For example assertion but it can be nice for other flow paths. --- README.md | 5 +++++ example/benchmark.yml | 6 ++++++ src/actions/assert.rs | 6 +++--- src/actions/assign.rs | 6 +++--- src/actions/delay.rs | 2 +- src/actions/exec.rs | 6 +++--- src/actions/mod.rs | 12 +++++++----- src/actions/request.rs | 14 +++++++++----- 8 files changed, 37 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index f5d9ff2..f9fcc57 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,11 @@ plan: request: url: /api/users/{{ foo.body.manager_id }} + - name: Assert request response code + assert: + key: foo.status + value: 200 + - name: Assign values assign: key: bar diff --git a/example/benchmark.yml b/example/benchmark.yml index d5abce4..cf4f1ff 100644 --- a/example/benchmark.yml +++ b/example/benchmark.yml @@ -55,6 +55,7 @@ plan: - 75 - name: Fetch some users by hash + assign: fetchuser request: url: /api/users/{{ item.id }} shuffle: true @@ -63,6 +64,11 @@ plan: - { id: 73 } - { id: 75 } + - name: Assert request response code + assert: + key: fetchuser.status + value: 200 + - name: Assert values assert: key: bar diff --git a/src/actions/assert.rs b/src/actions/assert.rs index 57d8062..584a62e 100644 --- a/src/actions/assert.rs +++ b/src/actions/assert.rs @@ -27,9 +27,9 @@ impl Assert { let value = extract(&item["assert"], "value"); Assert { - name: name.to_string(), - key: key.to_string(), - value: value.to_string(), + name, + key, + value, } } } diff --git a/src/actions/assign.rs b/src/actions/assign.rs index 2486684..7588485 100644 --- a/src/actions/assign.rs +++ b/src/actions/assign.rs @@ -26,9 +26,9 @@ impl Assign { let value = extract(&item["assign"], "value"); Assign { - name: name.to_string(), - key: key.to_string(), - value: value.to_string(), + name, + key, + value, } } } diff --git a/src/actions/delay.rs b/src/actions/delay.rs index d53e99b..dbae034 100644 --- a/src/actions/delay.rs +++ b/src/actions/delay.rs @@ -27,7 +27,7 @@ impl Delay { let seconds = u64::try_from(item["delay"]["seconds"].as_i64().unwrap()).expect("Invalid number of seconds"); Delay { - name: name.to_string(), + name, seconds, } } diff --git a/src/actions/exec.rs b/src/actions/exec.rs index c4df3b2..9aec911 100644 --- a/src/actions/exec.rs +++ b/src/actions/exec.rs @@ -28,9 +28,9 @@ impl Exec { let assign = extract_optional(item, "assign"); Exec { - name: name.to_string(), - command: command.to_string(), - assign: assign.map(str::to_string), + name, + command, + assign, } } } diff --git a/src/actions/mod.rs b/src/actions/mod.rs index 8c7a50e..592f586 100644 --- a/src/actions/mod.rs +++ b/src/actions/mod.rs @@ -42,9 +42,9 @@ impl fmt::Display for Report { } } -pub fn extract_optional<'a>(item: &'a Yaml, attr: &'a str) -> Option<&'a str> { +pub fn extract_optional<'a>(item: &'a Yaml, attr: &'a str) -> Option { if let Some(s) = item[attr].as_str() { - Some(s) + Some(s.to_string()) } else { if item[attr].as_hash().is_some() { panic!("`{}` needs to be a string. Try adding quotes", attr); @@ -54,9 +54,11 @@ pub fn extract_optional<'a>(item: &'a Yaml, attr: &'a str) -> Option<&'a str> { } } -pub fn extract<'a>(item: &'a Yaml, attr: &'a str) -> &'a str { - if let Some(s) = item[attr].as_str() { - s +pub fn extract<'a>(item: &'a Yaml, attr: &'a str) -> String { + if let Some(s) = item[attr].as_i64() { + s.to_string() + } else if let Some(s) = item[attr].as_str() { + s.to_string() } else { if item[attr].as_hash().is_some() { panic!("`{}` is required needs to be a string. Try adding quotes", attr); diff --git a/src/actions/request.rs b/src/actions/request.rs index 8151fda..0811307 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -38,6 +38,7 @@ pub struct Request { #[derive(Serialize, Deserialize)] struct AssignedRequest { + status: u16, body: Value, headers: Map, } @@ -78,15 +79,15 @@ impl Request { } Request { - name: name.to_string(), - url: url.to_string(), + name, + url, time: 0.0, method, headers, - body: body.map(str::to_string), + body, with_item, index, - assign: assign.map(str::to_string), + assign, } } @@ -274,10 +275,12 @@ impl Runnable for Request { status: 520u16, }), Some(response) => { + let status = response.status().as_u16(); + reports.push(Report { name: self.name.to_owned(), duration: duration_ms, - status: response.status().as_u16(), + status, }); if response.cookies().count() > 0 { @@ -302,6 +305,7 @@ impl Runnable for Request { let body: Value = serde_json::from_str(&data).unwrap_or(serde_json::Value::Null); let assigned = AssignedRequest { + status, body, headers, }; From cc81817eb43b3f73ee6974e30083080b8568170e Mon Sep 17 00:00:00 2001 From: Serhii Ivashchenko <26857105+IvashchenkoSerhii@users.noreply.github.com> Date: Wed, 1 Jun 2022 22:01:50 +0300 Subject: [PATCH 02/64] Setting tags for skipping and selecting task --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 13 +- SYNTAX.md | 15 +- example/benchmark.yml | 6 + src/benchmark.rs | 10 +- src/expandable/include.rs | 40 ++--- src/expandable/multi_file_request.rs | 2 +- src/main.rs | 24 ++- src/reader.rs | 22 ++- src/tags.rs | 227 +++++++++++++++++++++++++++ 11 files changed, 328 insertions(+), 35 deletions(-) create mode 100644 src/tags.rs diff --git a/Cargo.lock b/Cargo.lock index ae4ac5e..82beab1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -284,7 +284,7 @@ checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" [[package]] name = "drill" -version = "0.7.2" +version = "0.7.3" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index e3b6310..218d317 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drill" -version = "0.7.2" +version = "0.7.3" authors = ["Ferran Basora "] description = "Drill is a HTTP load testing application written in Rust inspired by Ansible syntax" repository = "https://github.com/fcsonline/drill" diff --git a/README.md b/README.md index f9fcc57..7b7cf83 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,12 @@ plan: - 73 - 75 + - name: Tagged user request + request: + url: /api/users/70 + tags: + - tag_user + - name: Fetch some users by hash request: url: /api/users/{{ item.id }} @@ -226,6 +232,7 @@ This is the list of all features supported by the current version of `drill`: - **Cookie support:** create benchmarks with sessions because cookies are propagates between requests. - **Stats:** get nice statistics about all the requests. Example: [cookies.yml](./example/cookies.yml) - **Thresholds:** compare the current benchmark performance against a stored one session and fail if a threshold is exceeded. +- **Tags:** specify test plan items by tags. ## Test it @@ -240,7 +247,7 @@ production environments. Full list of cli options, which is available under `drill --help` ``` -drill 0.7.1 +drill 0.7.3 HTTP load testing application written in Rust inspired by Ansible syntax USAGE: @@ -248,6 +255,8 @@ USAGE: FLAGS: -h, --help Prints help information + --list-tags List all benchmark tags + --list-tasks List benchmark tasks (executes --tags/--skip-tags filter) -n, --nanosec Shows statistics in nanoseconds --no-check-certificate Disables SSL certification check. (Not recommended) -q, --quiet Disables output @@ -260,6 +269,8 @@ OPTIONS: -b, --benchmark Sets the benchmark file -c, --compare Sets a compare file -r, --report Sets a report file + --skip-tags Tags to exclude + --tags Tags to include -t, --threshold Sets a threshold value in ms amongst the compared file -o, --timeout Set timeout in seconds for all requests ``` diff --git a/SYNTAX.md b/SYNTAX.md index 361068a..bb48617 100644 --- a/SYNTAX.md +++ b/SYNTAX.md @@ -48,7 +48,8 @@ All those three items can be combined with `name` property to be show in logs. - `with_items`: List of items to be interpolated in the given request url. - `with_items_range`: Generates items from an iterator from start, step, stop. - `with_items_from_csv`: Read the given CSV values and go through all of them as items. -- `assign`: save the response in the context to be interpolated later. +- `assign`: Save the response in the context to be interpolated later. +- `tags`: List of tags for that item. #### with_items_from_csv item properties @@ -58,3 +59,15 @@ Second, it can be a hash with the following properties: - `file_name`: csv file containing the records to be used as items - `quote_char`: character to use as quote in csv parsing. Defaults to `"\""`, but can be set to `"\'"`. If your csv file has quoted strings that contain commas and that causes parse errors, make sure this value is set correctly. + +#### tags item properties + +[Ansible](https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html#special-tags-always-and-never)-like tags. + +If you assing list of tags, e.g `[tag1, tag2]`, this item will be executed if `tag1` **OR** `tag2` is passed. + +Special tags: `always` and `never`. + +If you assign the `always` tag, `drill` will always run that item, unless you specifically skip it (`--skip-tags always`). + +If you assign the `never` tag to item, `drill` will skip that item unless you specifically request it (`--tags never`). diff --git a/example/benchmark.yml b/example/benchmark.yml index cf4f1ff..505c88c 100644 --- a/example/benchmark.yml +++ b/example/benchmark.yml @@ -54,6 +54,12 @@ plan: - 73 - 75 + - name: Tagged user request + request: + url: /api/users/70 + tags: + - tag_user + - name: Fetch some users by hash assign: fetchuser request: diff --git a/src/benchmark.rs b/src/benchmark.rs index 94f6fee..2d48f26 100644 --- a/src/benchmark.rs +++ b/src/benchmark.rs @@ -10,6 +10,7 @@ use tokio::{runtime, time::delay_for}; use crate::actions::{Report, Runnable}; use crate::config::Config; use crate::expandable::include; +use crate::tags::Tags; use crate::writer; use reqwest::Client; @@ -53,7 +54,7 @@ fn join(l: Vec, sep: &str) -> String { ) } -pub fn execute(benchmark_path: &str, report_path_option: Option<&str>, relaxed_interpolations: bool, no_check_certificate: bool, quiet: bool, nanosec: bool, timeout: Option<&str>, verbose: bool) -> BenchmarkResult { +pub fn execute(benchmark_path: &str, report_path_option: Option<&str>, relaxed_interpolations: bool, no_check_certificate: bool, quiet: bool, nanosec: bool, timeout: Option<&str>, verbose: bool, tags: &Tags) -> BenchmarkResult { let config = Arc::new(Config::new(benchmark_path, relaxed_interpolations, no_check_certificate, quiet, nanosec, timeout.map_or(10, |t| t.parse().unwrap_or(10)), verbose)); if report_path_option.is_some() { @@ -73,7 +74,12 @@ pub fn execute(benchmark_path: &str, report_path_option: Option<&str>, relaxed_i let mut benchmark: Benchmark = Benchmark::new(); let pool_store: PoolStore = PoolStore::new(); - include::expand_from_filepath(benchmark_path, &mut benchmark, Some("plan")); + include::expand_from_filepath(benchmark_path, &mut benchmark, Some("plan"), tags); + + if benchmark.is_empty() { + eprintln!("Empty benchmark. Exiting."); + std::process::exit(1); + } let benchmark = Arc::new(benchmark); let pool = Arc::new(Mutex::new(pool_store)); diff --git a/src/expandable/include.rs b/src/expandable/include.rs index e2f5232..cc15762 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -1,12 +1,12 @@ use std::path::Path; -use std::process; -use yaml_rust::{Yaml, YamlEmitter, YamlLoader}; +use yaml_rust::{Yaml, YamlEmitter}; use crate::interpolator::INTERPOLATION_REGEX; use crate::actions; use crate::benchmark::Benchmark; use crate::expandable::{include, multi_csv_request, multi_file_request, multi_iter_request, multi_request}; +use crate::tags::Tags; use crate::reader; @@ -14,7 +14,7 @@ pub fn is_that_you(item: &Yaml) -> bool { item["include"].as_str().is_some() } -pub fn expand(parent_path: &str, item: &Yaml, mut benchmark: &mut Benchmark) { +pub fn expand(parent_path: &str, item: &Yaml, mut benchmark: &mut Benchmark, tags: &Tags) { let include_path = item["include"].as_str().unwrap(); if INTERPOLATION_REGEX.is_match(&include_path) { @@ -24,30 +24,18 @@ pub fn expand(parent_path: &str, item: &Yaml, mut benchmark: &mut Benchmark) { let include_filepath = Path::new(parent_path).with_file_name(include_path); let final_path = include_filepath.to_str().unwrap(); - expand_from_filepath(final_path, &mut benchmark, None); + expand_from_filepath(final_path, &mut benchmark, None, tags); } -pub fn expand_from_filepath(parent_path: &str, mut benchmark: &mut Benchmark, accessor: Option<&str>) { - let benchmark_file = reader::read_file(parent_path); - - let docs = YamlLoader::load_from_str(benchmark_file.as_str()).unwrap(); - let doc = &docs[0]; - let items; - - if let Some(accessor_id) = accessor { - items = match doc[accessor_id].as_vec() { - Some(items) => items, - None => { - println!("Node missing on config: {}", accessor_id); - println!("Exiting."); - process::exit(1) - } - } - } else { - items = doc.as_vec().unwrap(); - } +pub fn expand_from_filepath(parent_path: &str, mut benchmark: &mut Benchmark, accessor: Option<&str>, tags: &Tags) { + let docs = reader::read_file_as_yml(parent_path); + let items = reader::read_yaml_doc_accessor(&docs[0], accessor); for item in items { + if tags.should_skip_item(item) { + continue; + } + if multi_request::is_that_you(item) { multi_request::expand(item, &mut benchmark); } else if multi_iter_request::is_that_you(item) { @@ -57,7 +45,7 @@ pub fn expand_from_filepath(parent_path: &str, mut benchmark: &mut Benchmark, ac } else if multi_file_request::is_that_you(item) { multi_file_request::expand(parent_path, item, &mut benchmark); } else if include::is_that_you(item) { - include::expand(parent_path, item, &mut benchmark); + include::expand(parent_path, item, &mut benchmark, tags); } else if actions::Delay::is_that_you(item) { benchmark.push(Box::new(actions::Delay::new(item, None))); } else if actions::Exec::is_that_you(item) { @@ -87,7 +75,7 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark); + expand("example/benchmark.yml", &doc, &mut benchmark, &Tags::new(None, None)); assert_eq!(is_that_you(&doc), true); assert_eq!(benchmark.len(), 2); @@ -101,6 +89,6 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark); + expand("example/benchmark.yml", &doc, &mut benchmark, &Tags::new(None, None)); } } diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 420bf7d..9c7c24a 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -26,7 +26,7 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { let with_items_filepath = Path::new(parent_path).with_file_name(with_items_path); let final_path = with_items_filepath.to_str().unwrap(); - let mut with_items_file = reader::read_file_as_yml(final_path); + let mut with_items_file = reader::read_file_as_yml_array(final_path); if let Some(shuffle) = item["shuffle"].as_bool() { if shuffle { diff --git a/src/main.rs b/src/main.rs index ec0b687..35490c7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod config; mod expandable; mod interpolator; mod reader; +mod tags; mod writer; use crate::actions::Report; @@ -29,10 +30,27 @@ fn main() { let nanosec = matches.is_present("nanosec"); let timeout = matches.value_of("timeout"); let verbose = matches.is_present("verbose"); + let tags_option = matches.value_of("tags"); + let skip_tags_option = matches.value_of("skip-tags"); + let list_tags = matches.is_present("list-tags"); + let list_tasks = matches.is_present("list-tasks"); + #[cfg(windows)] let _ = control::set_virtual_terminal(true); - let benchmark_result = benchmark::execute(benchmark_file, report_path_option, relaxed_interpolations, no_check_certificate, quiet, nanosec, timeout, verbose); + if list_tags { + tags::list_benchmark_file_tags(benchmark_file); + process::exit(0); + }; + + let tags = tags::Tags::new(tags_option, skip_tags_option); + + if list_tasks { + tags::list_benchmark_file_tasks(benchmark_file, &tags); + process::exit(0); + }; + + let benchmark_result = benchmark::execute(benchmark_file, report_path_option, relaxed_interpolations, no_check_certificate, quiet, nanosec, timeout, verbose, &tags); let list_reports = benchmark_result.reports; let duration = benchmark_result.duration; @@ -53,6 +71,10 @@ fn app_args<'a>() -> clap::ArgMatches<'a> { .arg(Arg::with_name("threshold").short("t").long("threshold").help("Sets a threshold value in ms amongst the compared file").takes_value(true).conflicts_with("report")) .arg(Arg::with_name("relaxed-interpolations").long("relaxed-interpolations").help("Do not panic if an interpolation is not present. (Not recommended)").takes_value(false)) .arg(Arg::with_name("no-check-certificate").long("no-check-certificate").help("Disables SSL certification check. (Not recommended)").takes_value(false)) + .arg(Arg::with_name("tags").long("tags").help("Tags to include").takes_value(true)) + .arg(Arg::with_name("skip-tags").long("skip-tags").help("Tags to exclude").takes_value(true)) + .arg(Arg::with_name("list-tags").long("list-tags").help("List all benchmark tags").takes_value(false).conflicts_with_all(&["tags", "skip-tags"])) + .arg(Arg::with_name("list-tasks").long("list-tasks").help("List benchmark tasks (executes --tags/--skip-tags filter)").takes_value(false)) .arg(Arg::with_name("quiet").short("q").long("quiet").help("Disables output").takes_value(false)) .arg(Arg::with_name("timeout").short("o").long("timeout").help("Set timeout in seconds for all requests").takes_value(true)) .arg(Arg::with_name("nanosec").short("n").long("nanosec").help("Shows statistics in nanoseconds").takes_value(false)) diff --git a/src/reader.rs b/src/reader.rs index b2ab826..6e2f2d0 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -22,7 +22,27 @@ pub fn read_file(filepath: &str) -> String { content } -pub fn read_file_as_yml(filepath: &str) -> yaml_rust::yaml::Array { +pub fn read_file_as_yml(filepath: &str) -> Vec { + let content = read_file(filepath); + yaml_rust::YamlLoader::load_from_str(content.as_str()).unwrap() +} + +pub fn read_yaml_doc_accessor<'a>(doc: &'a yaml_rust::Yaml, accessor: Option<&str>) -> &'a Vec { + if let Some(accessor_id) = accessor { + match doc[accessor_id].as_vec() { + Some(items) => items, + None => { + println!("Node missing on config: {}", accessor_id); + println!("Exiting."); + std::process::exit(1) + } + } + } else { + doc.as_vec().unwrap() + } +} + +pub fn read_file_as_yml_array(filepath: &str) -> yaml_rust::yaml::Array { let path = Path::new(filepath); let display = path.display(); diff --git a/src/tags.rs b/src/tags.rs new file mode 100644 index 0000000..3351295 --- /dev/null +++ b/src/tags.rs @@ -0,0 +1,227 @@ +use crate::reader; +use colored::*; +use std::collections::HashSet; +use yaml_rust::{Yaml, YamlEmitter}; + +#[derive(Debug)] +pub struct Tags<'a> { + pub tags: Option>, + pub skip_tags: Option>, +} + +impl<'a> Tags<'a> { + pub fn new(tags_option: Option<&'a str>, skip_tags_option: Option<&'a str>) -> Self { + let tags: Option> = tags_option.map(|m| m.split(',').into_iter().map(|s| s.trim()).collect()); + let skip_tags: Option> = skip_tags_option.map(|m| m.split(',').into_iter().map(|s| s.trim()).collect()); + + if let (Some(t), Some(s)) = (&tags, &skip_tags) { + if !t.is_disjoint(s) { + panic!("`tags` and `skip-tags` must not contain the same values!"); + } + } + + Tags { + tags, + skip_tags, + } + } + + pub fn should_skip_item(&self, item: &Yaml) -> bool { + match item["tags"].as_vec() { + Some(item_tags_raw) => { + let item_tags: HashSet<&str> = item_tags_raw.iter().map(|t| t.as_str().unwrap()).collect(); + if let Some(s) = &self.skip_tags { + if !s.is_disjoint(&item_tags) { + return true; + } + } + if let Some(t) = &self.tags { + if item_tags.contains("never") && !t.contains("never") { + return true; + } + if !t.is_disjoint(&item_tags) { + return false; + } + } + if item_tags.contains("always") { + return false; + } + if item_tags.contains("never") { + return true; + } + self.tags.is_some() + } + None => self.tags.is_some(), + } + } +} + +pub fn list_benchmark_file_tasks(benchmark_file: &str, tags: &Tags) { + let docs = reader::read_file_as_yml(benchmark_file); + let items = reader::read_yaml_doc_accessor(&docs[0], Some("plan")); + + println!(); + + if let Some(tags) = &tags.tags { + let mut tags: Vec<_> = tags.into_iter().collect(); + tags.sort(); + println!("{:width$} {:width2$?}", "Tags".green(), &tags, width = 15, width2 = 25); + } + if let Some(tags) = &tags.skip_tags { + let mut tags: Vec<_> = tags.into_iter().collect(); + tags.sort(); + println!("{:width$} {:width2$?}", "Skip-Tags".green(), &tags, width = 15, width2 = 25); + } + + let items: Vec<_> = items.iter().filter(|item| !tags.should_skip_item(item)).collect(); + + if items.is_empty() { + println!("{}", "No items".red()); + std::process::exit(1) + } + + for item in items { + let mut out_str = String::new(); + let mut emitter = YamlEmitter::new(&mut out_str); + emitter.dump(item).unwrap(); + println!("{}", out_str); + } +} + +pub fn list_benchmark_file_tags(benchmark_file: &str) { + let docs = reader::read_file_as_yml(benchmark_file); + let items = reader::read_yaml_doc_accessor(&docs[0], Some("plan")); + + println!(); + + if items.is_empty() { + println!("{}", "No items".red()); + std::process::exit(1) + } + let mut tags: HashSet<&str> = HashSet::new(); + for item in items { + if let Some(item_tags_raw) = item["tags"].as_vec() { + tags.extend(item_tags_raw.iter().map(|t| t.as_str().unwrap())); + } + } + + let mut tags: Vec<_> = tags.into_iter().collect(); + tags.sort(); + println!("{:width$} {:?}", "Tags".green(), &tags, width = 15); +} + +#[cfg(test)] +mod tests { + use super::*; + + fn str_to_yaml(text: &str) -> Yaml { + let mut docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + docs.remove(0) + } + + fn prepare_default_item() -> Yaml { + str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - tag1\n - tag2") + } + + #[test] + #[should_panic] + fn same_tags_and_skip_tags() { + let _ = Tags::new(Some("tag1"), Some("tag1")); + } + + #[test] + fn empty_tags_both() { + let item = str_to_yaml("---\nname: foo\nrequest:\n url: /"); + let tags = Tags::new(None, None); + assert!(!tags.should_skip_item(&item)); + } + + #[test] + fn empty_tags() { + let tags = Tags::new(None, None); + assert!(!tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn tags_contains() { + let tags = Tags::new(Some("tag1"), None); + assert!(!tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn tags_contains_second() { + let tags = Tags::new(Some("tag2"), None); + assert!(!tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn tags_contains_both() { + let tags = Tags::new(Some("tag1,tag2"), None); + assert!(!tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn tags_not_contains() { + let tags = Tags::new(Some("tag99"), None); + assert!(tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn skip_tags_not_contains() { + let tags = Tags::new(None, Some("tag99")); + assert!(!tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn skip_tags_contains() { + let tags = Tags::new(None, Some("tag1")); + assert!(tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn skip_tags_contains_second() { + let tags = Tags::new(None, Some("tag2")); + assert!(tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn tags_contains_but_also_skip_tags_contains() { + let tags = Tags::new(Some("tag1"), Some("tag2")); + assert!(tags.should_skip_item(&prepare_default_item())); + } + + #[test] + fn never_skipped_by_default() { + let item = str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - never\n - tag2"); + let tags = Tags::new(None, None); + assert!(tags.should_skip_item(&item)); + } + + #[test] + fn never_tag_skipped_even_when_other_tag_included() { + let item = str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - never\n - tag2"); + let tags = Tags::new(Some("tag2"), None); + assert!(tags.should_skip_item(&item)); + } + + #[test] + fn include_never_tag() { + let item = str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - never\n - tag2"); + let tags = Tags::new(Some("never"), None); + assert!(!tags.should_skip_item(&item)); + } + + #[test] + fn always_tag_included_by_default() { + let item = str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - always\n - tag2"); + let tags = Tags::new(Some("tag99"), None); + assert!(!tags.should_skip_item(&item)); + } + + #[test] + fn skip_always_tag() { + let item = str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - always\n - tag2"); + let tags = Tags::new(None, Some("always")); + assert!(tags.should_skip_item(&item)); + } +} From 1915f64c61d2a343b369f7d20a15ec0a2255ada0 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 9 Jul 2022 15:12:54 +0000 Subject: [PATCH 03/64] Move from Travis to Github Actions --- .github/workflows/audit.yml | 16 ++++++++ .github/workflows/general.yml | 69 +++++++++++++++++++++++++++++++++++ .travis.yml | 22 ----------- 3 files changed, 85 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/audit.yml create mode 100644 .github/workflows/general.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml new file mode 100644 index 0000000..abcbbff --- /dev/null +++ b/.github/workflows/audit.yml @@ -0,0 +1,16 @@ +name: Security audit +on: + push: + paths: + - '**/Cargo.toml' + - '**/Cargo.lock' + schedule: + - cron: '0 0 * * *' +jobs: + security_audit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: actions-rs/audit-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml new file mode 100644 index 0000000..8d32d10 --- /dev/null +++ b/.github/workflows/general.yml @@ -0,0 +1,69 @@ +name: Rust + +on: [push] + +env: + CARGO_TERM_COLOR: always + +jobs: + test: + name: Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + - uses: actions-rs/cargo@v1 + with: + command: test + + fmt: + name: Rustfmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + components: rustfmt + - uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + # clippy: + # name: Clippy + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v2 + # - uses: actions-rs/toolchain@v1 + # with: + # toolchain: stable + # override: true + # components: clippy + # - uses: actions-rs/clippy-check@v1 + # with: + # token: ${{ secrets.GITHUB_TOKEN }} + # args: -- -D warnings + + coverage: + name: Code coverage + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Run cargo-tarpaulin + uses: actions-rs/tarpaulin@v0.1 + with: + args: '--ignore-tests' diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 9eda9d2..0000000 --- a/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -language: rust -cache: cargo -dist: trusty -os: - - linux - - osx - -rust: - # FIXME: Enable again when rustfmt is available on nightly - # - nightly - - stable - -before_script: - - rustup component add rustfmt - - cargo install --force cargo-audit - - cargo generate-lockfile - -script: - - cargo fmt --all -- --check - - cargo build - - cargo test - - cargo audit From 51238db8d5df918957d5d26c05a4665505888cb9 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 9 Jul 2022 16:15:11 +0000 Subject: [PATCH 04/64] Fix clippy offenses and enable GH action Fix clippy offenses in the source code and enable GH action check for clippy. --- .github/workflows/general.yml | 28 +++++++++++++-------------- src/actions/exec.rs | 2 +- src/actions/mod.rs | 16 ++++++--------- src/actions/request.rs | 25 ++++++++++++++---------- src/benchmark.rs | 1 + src/config.rs | 4 ++-- src/expandable/include.rs | 29 +++++++++++++++------------- src/expandable/multi_csv_request.rs | 8 ++++---- src/expandable/multi_file_request.rs | 6 +++--- src/expandable/multi_iter_request.rs | 14 +++++++------- src/expandable/multi_request.rs | 6 +++--- src/interpolator.rs | 4 ++-- src/main.rs | 2 +- src/tags.rs | 6 +++--- 14 files changed, 78 insertions(+), 73 deletions(-) diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml index 8d32d10..22105fa 100644 --- a/.github/workflows/general.yml +++ b/.github/workflows/general.yml @@ -35,20 +35,20 @@ jobs: command: fmt args: --all -- --check - # clippy: - # name: Clippy - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v2 - # - uses: actions-rs/toolchain@v1 - # with: - # toolchain: stable - # override: true - # components: clippy - # - uses: actions-rs/clippy-check@v1 - # with: - # token: ${{ secrets.GITHUB_TOKEN }} - # args: -- -D warnings + clippy: + name: Clippy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + components: clippy + - uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: -- -D warnings coverage: name: Code coverage diff --git a/src/actions/exec.rs b/src/actions/exec.rs index 9aec911..2c32e03 100644 --- a/src/actions/exec.rs +++ b/src/actions/exec.rs @@ -49,7 +49,7 @@ impl Runnable for Exec { let execution = Command::new(args[0]).args(&args[1..]).output().expect("Couldn't run it"); let output: String = String::from_utf8_lossy(&execution.stdout).into(); - let output = output.trim_end().to_string().to_owned(); + let output = output.trim_end().to_string(); if let Some(ref key) = self.assign { context.insert(key.to_owned(), json!(output)); diff --git a/src/actions/mod.rs b/src/actions/mod.rs index 592f586..46c9d9e 100644 --- a/src/actions/mod.rs +++ b/src/actions/mod.rs @@ -45,12 +45,10 @@ impl fmt::Display for Report { pub fn extract_optional<'a>(item: &'a Yaml, attr: &'a str) -> Option { if let Some(s) = item[attr].as_str() { Some(s.to_string()) + } else if item[attr].as_hash().is_some() { + panic!("`{}` needs to be a string. Try adding quotes", attr); } else { - if item[attr].as_hash().is_some() { - panic!("`{}` needs to be a string. Try adding quotes", attr); - } else { - None - } + None } } @@ -59,11 +57,9 @@ pub fn extract<'a>(item: &'a Yaml, attr: &'a str) -> String { s.to_string() } else if let Some(s) = item[attr].as_str() { s.to_string() + } else if item[attr].as_hash().is_some() { + panic!("`{}` is required needs to be a string. Try adding quotes", attr); } else { - if item[attr].as_hash().is_some() { - panic!("`{}` is required needs to be a string. Try adding quotes", attr); - } else { - panic!("Unknown node `{}` => {:?}", attr, item[attr]); - } + panic!("Unknown node `{}` => {:?}", attr, item[attr]); } } diff --git a/src/actions/request.rs b/src/actions/request.rs index 0811307..108f19b 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -24,6 +24,7 @@ use crate::actions::{Report, Runnable}; static USER_AGENT: &str = "drill"; #[derive(Clone)] +#[allow(dead_code)] pub struct Request { name: String, url: String, @@ -54,7 +55,7 @@ impl Request { let assign = extract_optional(item, "assign"); let method = if let Some(v) = extract_optional(&item["request"], "method") { - v.to_string().to_uppercase() + v.to_uppercase() } else { "GET".to_string() }; @@ -121,7 +122,7 @@ impl Request { match context.get("base") { Some(value) => { if let Some(vs) = value.as_str() { - format!("{}{}", vs.to_string(), interpolated_url) + format!("{}{}", vs, interpolated_url) } else { panic!("{} Wrong type 'base' variable!", "WARNING!".yellow().bold()); } @@ -257,7 +258,7 @@ impl Runnable for Request { } if self.index.is_some() { - context.insert("index".to_string(), json!(self.index.clone().unwrap())); + context.insert("index".to_string(), json!(self.index.unwrap())); } let (res, duration_ms) = self.send_request(context, pool, config).await; @@ -319,7 +320,9 @@ impl Runnable for Request { None }; - log_message_response.map(|msg| log_response(msg, &data)); + if let Some(msg) = log_message_response { + log_response(msg, &data) + } } } } @@ -328,9 +331,9 @@ impl Runnable for Request { fn log_request(request: &reqwest::Request) { let mut message = String::new(); write!(message, "{}", ">>>".bold().green()).unwrap(); - write!(message, " {} {},", "URL:".bold(), request.url().to_string()).unwrap(); - write!(message, " {} {},", "METHOD:".bold(), request.method().to_string()).unwrap(); - write!(message, " {} {}", "HEADERS:".bold(), format!("{:?}", request.headers())).unwrap(); + write!(message, " {} {},", "URL:".bold(), request.url()).unwrap(); + write!(message, " {} {},", "METHOD:".bold(), request.method()).unwrap(); + write!(message, " {} {:?}", "HEADERS:".bold(), request.headers()).unwrap(); println!("{}", message); } @@ -338,9 +341,9 @@ fn log_message_response(response: &Option, duration_ms: f64) let mut message = String::new(); match response { Some(response) => { - write!(message, " {} {},", "URL:".bold(), response.url().to_string()).unwrap(); + write!(message, " {} {},", "URL:".bold(), response.url()).unwrap(); write!(message, " {} {},", "STATUS:".bold(), response.status()).unwrap(); - write!(message, " {} {}", "HEADERS:".bold(), format!("{:?}", response.headers())).unwrap(); + write!(message, " {} {:?}", "HEADERS:".bold(), response.headers()).unwrap(); write!(message, " {} {:.4} ms,", "DURATION:".bold(), duration_ms).unwrap(); } None => { @@ -353,6 +356,8 @@ fn log_message_response(response: &Option, duration_ms: f64) fn log_response(log_message_response: String, body: &Option) { let mut message = String::new(); write!(message, "{}{}", "<<<".bold().green(), log_message_response).unwrap(); - body.as_ref().map(|body| write!(message, " {} {:?}", "BODY:".bold(), body).unwrap()); + if let Some(body) = body.as_ref() { + write!(message, " {} {:?}", "BODY:".bold(), body).unwrap() + } println!("{}", message); } diff --git a/src/benchmark.rs b/src/benchmark.rs index 2d48f26..7406ce4 100644 --- a/src/benchmark.rs +++ b/src/benchmark.rs @@ -54,6 +54,7 @@ fn join(l: Vec, sep: &str) -> String { ) } +#[allow(clippy::too_many_arguments)] pub fn execute(benchmark_path: &str, report_path_option: Option<&str>, relaxed_interpolations: bool, no_check_certificate: bool, quiet: bool, nanosec: bool, timeout: Option<&str>, verbose: bool, tags: &Tags) -> BenchmarkResult { let config = Arc::new(Config::new(benchmark_path, relaxed_interpolations, no_check_certificate, quiet, nanosec, timeout.map_or(10, |t| t.parse().unwrap_or(10)), verbose)); diff --git a/src/config.rs b/src/config.rs index 958548a..edfd2f2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -58,7 +58,7 @@ fn read_str_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp match config_doc[name].as_str() { Some(value) => { if value.contains('{') { - interpolator.resolve(&value, true).to_owned() + interpolator.resolve(value, true) } else { value.to_owned() } @@ -77,7 +77,7 @@ fn read_i64_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp let value = if let Some(value) = config_doc[name].as_i64() { Some(value) } else if let Some(key) = config_doc[name].as_str() { - interpolator.resolve(&key, false).parse::().ok() + interpolator.resolve(key, false).parse::().ok() } else { None }; diff --git a/src/expandable/include.rs b/src/expandable/include.rs index cc15762..2579b49 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -14,20 +14,20 @@ pub fn is_that_you(item: &Yaml) -> bool { item["include"].as_str().is_some() } -pub fn expand(parent_path: &str, item: &Yaml, mut benchmark: &mut Benchmark, tags: &Tags) { +pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark, tags: &Tags) { let include_path = item["include"].as_str().unwrap(); - if INTERPOLATION_REGEX.is_match(&include_path) { + if INTERPOLATION_REGEX.is_match(include_path) { panic!("Interpolations not supported in 'include' property!"); } let include_filepath = Path::new(parent_path).with_file_name(include_path); let final_path = include_filepath.to_str().unwrap(); - expand_from_filepath(final_path, &mut benchmark, None, tags); + expand_from_filepath(final_path, benchmark, None, tags); } -pub fn expand_from_filepath(parent_path: &str, mut benchmark: &mut Benchmark, accessor: Option<&str>, tags: &Tags) { +pub fn expand_from_filepath(parent_path: &str, benchmark: &mut Benchmark, accessor: Option<&str>, tags: &Tags) { let docs = reader::read_file_as_yml(parent_path); let items = reader::read_yaml_doc_accessor(&docs[0], accessor); @@ -37,15 +37,15 @@ pub fn expand_from_filepath(parent_path: &str, mut benchmark: &mut Benchmark, ac } if multi_request::is_that_you(item) { - multi_request::expand(item, &mut benchmark); + multi_request::expand(item, benchmark); } else if multi_iter_request::is_that_you(item) { - multi_iter_request::expand(item, &mut benchmark); + multi_iter_request::expand(item, benchmark); } else if multi_csv_request::is_that_you(item) { - multi_csv_request::expand(parent_path, item, &mut benchmark); + multi_csv_request::expand(parent_path, item, benchmark); } else if multi_file_request::is_that_you(item) { - multi_file_request::expand(parent_path, item, &mut benchmark); + multi_file_request::expand(parent_path, item, benchmark); } else if include::is_that_you(item) { - include::expand(parent_path, item, &mut benchmark, tags); + include::expand(parent_path, item, benchmark, tags); } else if actions::Delay::is_that_you(item) { benchmark.push(Box::new(actions::Delay::new(item, None))); } else if actions::Exec::is_that_you(item) { @@ -65,8 +65,11 @@ pub fn expand_from_filepath(parent_path: &str, mut benchmark: &mut Benchmark, ac } } +#[cfg(test)] mod tests { - use super::*; + use crate::benchmark::Benchmark; + use crate::expandable::include::{expand, is_that_you}; + use crate::tags::Tags; #[test] fn expand_include() { @@ -75,9 +78,9 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark, &Tags::new(None, None)); + expand("example/benchmark.yml", doc, &mut benchmark, &Tags::new(None, None)); - assert_eq!(is_that_you(&doc), true); + assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 2); } @@ -89,6 +92,6 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark, &Tags::new(None, None)); + expand("example/benchmark.yml", doc, &mut benchmark, &Tags::new(None, None)); } } diff --git a/src/expandable/multi_csv_request.rs b/src/expandable/multi_csv_request.rs index 4e86c0f..2f915ea 100644 --- a/src/expandable/multi_csv_request.rs +++ b/src/expandable/multi_csv_request.rs @@ -25,7 +25,7 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { unreachable!(); }; - if INTERPOLATION_REGEX.is_match(&with_items_path) { + if INTERPOLATION_REGEX.is_match(with_items_path) { panic!("Interpolations not supported in 'with_items_from_csv' property!"); } @@ -59,9 +59,9 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark); + expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(&doc), true); + assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 2); } @@ -73,6 +73,6 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark); + expand("example/benchmark.yml", doc, &mut benchmark); } } diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 9c7c24a..0ad8b4d 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -19,7 +19,7 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { unreachable!(); }; - if INTERPOLATION_REGEX.is_match(&with_items_path) { + if INTERPOLATION_REGEX.is_match(with_items_path) { panic!("Interpolation not supported in 'with_items_from_file' property!"); } @@ -53,9 +53,9 @@ mod test { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand("example/benchmark.yml", &doc, &mut benchmark); + expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(&doc), true); + assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 3); } } diff --git a/src/expandable/multi_iter_request.rs b/src/expandable/multi_iter_request.rs index 376848a..2a9cefc 100644 --- a/src/expandable/multi_iter_request.rs +++ b/src/expandable/multi_iter_request.rs @@ -26,15 +26,15 @@ pub fn expand(item: &Yaml, benchmark: &mut Benchmark) { let step: &str = vstep.as_str().unwrap_or(""); let stop: &str = vstop.as_str().unwrap_or(""); - if INTERPOLATION_REGEX.is_match(&start) { + if INTERPOLATION_REGEX.is_match(start) { panic!("Interpolations not supported in 'start' property!"); } - if INTERPOLATION_REGEX.is_match(&step) { + if INTERPOLATION_REGEX.is_match(step) { panic!("Interpolations not supported in 'step' property!"); } - if INTERPOLATION_REGEX.is_match(&stop) { + if INTERPOLATION_REGEX.is_match(stop) { panic!("Interpolations not supported in 'stop' property!"); } @@ -74,9 +74,9 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand(&doc, &mut benchmark); + expand(doc, &mut benchmark); - assert_eq!(is_that_you(&doc), true); + assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 10); } @@ -88,7 +88,7 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand(&doc, &mut benchmark); + expand(doc, &mut benchmark); } #[test] @@ -99,6 +99,6 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand(&doc, &mut benchmark); + expand(doc, &mut benchmark); } } diff --git a/src/expandable/multi_request.rs b/src/expandable/multi_request.rs index 0c0173a..2491167 100644 --- a/src/expandable/multi_request.rs +++ b/src/expandable/multi_request.rs @@ -47,9 +47,9 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand(&doc, &mut benchmark); + expand(doc, &mut benchmark); - assert_eq!(is_that_you(&doc), true); + assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 3); } @@ -61,6 +61,6 @@ mod tests { let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); - expand(&doc, &mut benchmark); + expand(doc, &mut benchmark); } } diff --git a/src/interpolator.rs b/src/interpolator.rs index bc16767..4295415 100644 --- a/src/interpolator.rs +++ b/src/interpolator.rs @@ -4,8 +4,8 @@ use regex::{Captures, Regex}; use crate::benchmark::Context; -static INTERPOLATION_PREFIX: &'static str = "{{"; -static INTERPOLATION_SUFFIX: &'static str = "}}"; +static INTERPOLATION_PREFIX: &str = "{{"; +static INTERPOLATION_SUFFIX: &str = "}}"; lazy_static! { pub static ref INTERPOLATION_REGEX: Regex = { diff --git a/src/main.rs b/src/main.rs index 35490c7..b43101d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -184,7 +184,7 @@ fn show_stats(list_reports: &[Vec], stats_option: bool, nanosec: bool, d fn compare_benchmark(list_reports: &[Vec], compare_path_option: Option<&str>, threshold_option: Option<&str>) { if let Some(compare_path) = compare_path_option { if let Some(threshold) = threshold_option { - let compare_result = checker::compare(&list_reports, compare_path, threshold); + let compare_result = checker::compare(list_reports, compare_path, threshold); match compare_result { Ok(_) => process::exit(0), diff --git a/src/tags.rs b/src/tags.rs index 3351295..22825a1 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -63,12 +63,12 @@ pub fn list_benchmark_file_tasks(benchmark_file: &str, tags: &Tags) { println!(); if let Some(tags) = &tags.tags { - let mut tags: Vec<_> = tags.into_iter().collect(); + let mut tags: Vec<_> = tags.iter().collect(); tags.sort(); println!("{:width$} {:width2$?}", "Tags".green(), &tags, width = 15, width2 = 25); } if let Some(tags) = &tags.skip_tags { - let mut tags: Vec<_> = tags.into_iter().collect(); + let mut tags: Vec<_> = tags.iter().collect(); tags.sort(); println!("{:width$} {:width2$?}", "Skip-Tags".green(), &tags, width = 15, width2 = 25); } @@ -106,7 +106,7 @@ pub fn list_benchmark_file_tags(benchmark_file: &str) { } let mut tags: Vec<_> = tags.into_iter().collect(); - tags.sort(); + tags.sort_unstable(); println!("{:width$} {:?}", "Tags".green(), &tags, width = 15); } From 375b6c9445a8c614313f3abb6b45cd950cecb599 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 10 Jul 2022 08:36:02 +0000 Subject: [PATCH 05/64] Update colored dependency --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82beab1..00f6885 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -167,9 +167,9 @@ dependencies = [ [[package]] name = "colored" -version = "1.9.3" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" +checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" dependencies = [ "atty", "lazy_static", diff --git a/Cargo.toml b/Cargo.toml index 218d317..eeb06c3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ edition = "2018" [dependencies] clap = "2.32.0" -colored = "1.7.0" +colored = "2.0.0" csv = "1.0.5" regex = "1.5.5" serde = { version = "1.0", features = ["derive"] } From f75120a184c09b6545e7e3d8104ff9b09b64421c Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 10 Jul 2022 08:38:18 +0000 Subject: [PATCH 06/64] Update rand dependency --- Cargo.lock | 20 +++++--------------- Cargo.toml | 2 +- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 00f6885..dff2298 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -296,7 +296,7 @@ dependencies = [ "linked-hash-map", "num_cpus", "openssl-sys", - "rand 0.7.3", + "rand 0.8.5", "regex", "reqwest", "serde", @@ -1077,19 +1077,18 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", ] [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha 0.3.1", "rand_core 0.6.3", - "rand_hc 0.3.1", ] [[package]] @@ -1139,15 +1138,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_hc" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" -dependencies = [ - "rand_core 0.6.3", -] - [[package]] name = "redox_syscall" version = "0.2.9" @@ -1462,7 +1452,7 @@ checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ "cfg-if 1.0.0", "libc", - "rand 0.8.4", + "rand 0.8.5", "redox_syscall", "remove_dir_all", "winapi 0.3.9", diff --git a/Cargo.toml b/Cargo.toml index eeb06c3..8788f79 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ async-trait = "0.1.30" futures = "0.3.5" lazy_static = "1.4.0" num_cpus = "1.13.0" -rand = "0.7.3" +rand = "0.8.5" hdrhistogram = "7.4.0" # Add openssl-sys as a direct dependency so it can be cross compiled to From 034a59223086d267ed723600e7a308789fe9c6b6 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 10 Jul 2022 09:39:46 +0000 Subject: [PATCH 07/64] Update reqwest dependency --- Cargo.lock | 790 ++++++++++++++----------------------------- Cargo.toml | 4 +- src/actions/delay.rs | 4 +- src/benchmark.rs | 7 +- 4 files changed, 263 insertions(+), 542 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dff2298..e83be9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "addr2line" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7a2e47a1fbe209ee101dd6d61285226744c6c8d3c21c8dc878ba6cb9f467f3a" -dependencies = [ - "gimli", -] - [[package]] name = "adler" version = "1.0.2" @@ -32,7 +23,7 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -54,35 +45,14 @@ checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ "hermit-abi", "libc", - "winapi 0.3.9", + "winapi", ] [[package]] name = "autocfg" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" - -[[package]] -name = "backtrace" -version = "0.3.60" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7815ea54e4d821e791162e078acbebfd6d8c8939cd559c9335dceb1c8ca7282" -dependencies = [ - "addr2line", - "cc", - "cfg-if 1.0.0", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - -[[package]] -name = "base-x" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" @@ -120,12 +90,6 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "bytes" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" - [[package]] name = "bytes" version = "1.0.1" @@ -138,12 +102,6 @@ version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787" -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -173,20 +131,14 @@ checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" dependencies = [ "atty", "lazy_static", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "const_fn" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" - [[package]] name = "cookie" -version = "0.14.4" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" +checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" dependencies = [ "percent-encoding", "time", @@ -195,9 +147,9 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.12.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3818dfca4b0cb5211a659bbcbb94225b7127407b2b135e650d717bfb78ab10d3" +checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd" dependencies = [ "cookie", "idna", @@ -231,7 +183,7 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -240,7 +192,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crossbeam-utils", ] @@ -250,7 +202,7 @@ version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "lazy_static", ] @@ -262,7 +214,7 @@ checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" dependencies = [ "bstr", "csv-core", - "itoa", + "itoa 0.4.7", "ryu", "serde", ] @@ -277,10 +229,10 @@ dependencies = [ ] [[package]] -name = "discard" -version = "1.0.4" +name = "data-encoding" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" +checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" [[package]] name = "drill" @@ -296,7 +248,7 @@ dependencies = [ "linked-hash-map", "num_cpus", "openssl-sys", - "rand 0.8.5", + "rand", "regex", "reqwest", "serde", @@ -312,14 +264,14 @@ version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "enum-as-inner" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" +checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" dependencies = [ "heck", "proc-macro2", @@ -333,7 +285,7 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "crc32fast", "libc", "miniz_oxide", @@ -370,22 +322,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - [[package]] name = "futures" version = "0.3.15" @@ -473,48 +409,31 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.6", + "pin-project-lite", "pin-utils", "proc-macro-hack", "proc-macro-nested", "slab", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.10.2+wasi-snapshot-preview1", ] -[[package]] -name = "gimli" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" - [[package]] name = "h2" -version = "0.2.7" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" +checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ - "bytes 0.5.6", + "bytes", "fnv", "futures-core", "futures-sink", @@ -525,7 +444,6 @@ dependencies = [ "tokio", "tokio-util", "tracing", - "tracing-futures", ] [[package]] @@ -534,6 +452,12 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + [[package]] name = "hdrhistogram" version = "7.4.0" @@ -550,12 +474,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" @@ -574,7 +495,7 @@ checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ "libc", "match_cfg", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -583,40 +504,41 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" dependencies = [ - "bytes 1.0.1", + "bytes", "fnv", - "itoa", + "itoa 0.4.7", ] [[package]] name = "http-body" -version = "0.3.1" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "bytes 0.5.6", + "bytes", "http", + "pin-project-lite", ] [[package]] name = "httparse" -version = "1.4.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3a87b616e37e93c22fb19bcd386f02f3af5ea98a25670ad0fce773de23c5e68" +checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" [[package]] name = "httpdate" -version = "0.3.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.13.10" +version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb" +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ - "bytes 0.5.6", + "bytes", "futures-channel", "futures-core", "futures-util", @@ -625,8 +547,8 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa", - "pin-project", + "itoa 1.0.2", + "pin-project-lite", "socket2", "tokio", "tower-service", @@ -636,15 +558,15 @@ dependencies = [ [[package]] name = "hyper-tls" -version = "0.4.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 0.5.6", + "bytes", "hyper", "native-tls", "tokio", - "tokio-tls", + "tokio-native-tls", ] [[package]] @@ -665,28 +587,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" dependencies = [ "autocfg", - "hashbrown", -] - -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", + "hashbrown 0.9.1", ] [[package]] name = "ipconfig" -version = "0.2.2" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" +checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" dependencies = [ "socket2", "widestring", - "winapi 0.3.9", - "winreg 0.6.2", + "winapi", + "winreg 0.7.0", ] [[package]] @@ -701,6 +614,12 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + [[package]] name = "js-sys" version = "0.3.51" @@ -710,16 +629,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -728,9 +637,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.97" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "linked-hash-map" @@ -738,13 +647,23 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +[[package]] +name = "lock_api" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -780,16 +699,6 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" -[[package]] -name = "mime_guess" -version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minimal-lexical" version = "0.1.4" @@ -808,51 +717,21 @@ dependencies = [ [[package]] name = "mio" -version = "0.6.23" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", "libc", "log", - "miow", - "net2", - "slab", - "winapi 0.2.8", -] - -[[package]] -name = "mio-uds" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afcb699eb26d4332647cc848492bbc15eafb26f08d0304550d5aa1f612e066f0" -dependencies = [ - "iovec", - "libc", - "mio", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", ] [[package]] name = "native-tls" -version = "0.2.7" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4" +checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" dependencies = [ "lazy_static", "libc", @@ -866,17 +745,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "net2" -version = "0.2.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - [[package]] name = "nom" version = "7.0.0" @@ -908,12 +776,12 @@ dependencies = [ ] [[package]] -name = "object" -version = "0.25.3" +name = "num_threads" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38f2be3697a57b4060074ff41b44c16870d916ad7877c17696e063257482bc7" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" dependencies = [ - "memchr", + "libc", ] [[package]] @@ -929,7 +797,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "foreign-types", "libc", "once_cell", @@ -966,36 +834,33 @@ dependencies = [ ] [[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "pin-project" -version = "1.0.7" +name = "parking_lot" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ - "pin-project-internal", + "lock_api", + "parking_lot_core", ] [[package]] -name = "pin-project-internal" -version = "1.0.7" +name = "parking_lot_core" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ - "proc-macro2", - "quote", - "syn", + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", ] [[package]] -name = "pin-project-lite" -version = "0.1.12" +name = "percent-encoding" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "pin-project-lite" @@ -1035,21 +900,29 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.27" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" dependencies = [ - "unicode-xid", + "unicode-ident", ] +[[package]] +name = "psl-types" +version = "2.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8eda7c62d9ecaafdf8b62374c006de0adf61666ae96a96ba74a37134aa4e470" + [[package]] name = "publicsuffix" -version = "1.5.6" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95b4ce31ff0a27d93c8de1849cf58162283752f065a90d508f1105fa6c9a213f" +checksum = "292972edad6bbecc137ab84c5e36421a4a6c979ea31d3cc73540dd04315b33e1" dependencies = [ + "byteorder", + "hashbrown 0.11.2", "idna", - "url", + "psl-types", ] [[package]] @@ -1067,19 +940,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - [[package]] name = "rand" version = "0.8.5" @@ -1087,18 +947,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha", + "rand_core", ] [[package]] @@ -1108,16 +958,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core", ] [[package]] @@ -1126,16 +967,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.3", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", + "getrandom", ] [[package]] @@ -1176,22 +1008,23 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] name = "reqwest" -version = "0.10.10" +version = "0.11.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c" +checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" dependencies = [ "base64", - "bytes 0.5.6", + "bytes", "cookie", "cookie_store", "encoding_rs", "futures-core", "futures-util", + "h2", "http", "http-body", "hyper", @@ -1201,21 +1034,22 @@ dependencies = [ "lazy_static", "log", "mime", - "mime_guess", "native-tls", "percent-encoding", - "pin-project-lite 0.2.6", + "pin-project-lite", + "proc-macro-hack", "serde", + "serde_json", "serde_urlencoded", - "time", "tokio", - "tokio-tls", + "tokio-native-tls", + "tower-service", "trust-dns-resolver", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.7.0", + "winreg 0.10.1", ] [[package]] @@ -1228,21 +1062,6 @@ dependencies = [ "quick-error", ] -[[package]] -name = "rustc-demangle" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dead70b0b5e03e9c814bcb6b01e03e68f7c57a80aa48c72ec92152ab3e818d49" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - [[package]] name = "ryu" version = "1.0.5" @@ -1256,9 +1075,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ "lazy_static", - "winapi 0.3.9", + "winapi", ] +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + [[package]] name = "security-framework" version = "2.3.1" @@ -1282,35 +1107,20 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" -version = "1.0.126" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7505abeacaec74ae4778d9d9328fe5a5d04253220a85c4ee022239fc996d03" +checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.126" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "963a7dbc9895aeac7ac90e74f34a5d5261828f79df35cbed41e10189d3804d43" +checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" dependencies = [ "proc-macro2", "quote", @@ -1319,33 +1129,27 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.64" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" dependencies = [ - "itoa", + "itoa 1.0.2", "ryu", "serde", ] [[package]] name = "serde_urlencoded" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa", + "itoa 1.0.2", "ryu", "serde", ] -[[package]] -name = "sha1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" - [[package]] name = "slab" version = "0.4.3" @@ -1360,73 +1164,14 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" [[package]] name = "socket2" -version = "0.3.19" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" dependencies = [ - "cfg-if 1.0.0", "libc", - "winapi 0.3.9", -] - -[[package]] -name = "standback" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", + "winapi", ] -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", - "syn", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "strsim" version = "0.8.0" @@ -1435,13 +1180,13 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.73" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f71489ff30030d2ae598524f61326b902466f72a0fb1a8564c001cc63425bcc7" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1450,12 +1195,12 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", - "rand 0.8.5", + "rand", "redox_syscall", "remove_dir_all", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1489,41 +1234,21 @@ dependencies = [ [[package]] name = "time" -version = "0.2.27" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" dependencies = [ - "const_fn", + "itoa 1.0.2", "libc", - "standback", - "stdweb", + "num_threads", "time-macros", - "version_check", - "winapi 0.3.9", ] [[package]] name = "time-macros" -version = "0.1.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - -[[package]] -name = "time-macros-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn", -] +checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" [[package]] name = "tinyvec" @@ -1542,29 +1267,26 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "0.2.25" +version = "1.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092" +checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" dependencies = [ - "bytes 0.5.6", - "fnv", - "futures-core", - "iovec", - "lazy_static", + "bytes", "libc", "memchr", "mio", - "mio-uds", "num_cpus", - "pin-project-lite 0.1.12", - "slab", + "once_cell", + "pin-project-lite", + "socket2", + "winapi", ] [[package]] -name = "tokio-tls" -version = "0.3.1" +name = "tokio-native-tls" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" dependencies = [ "native-tls", "tokio", @@ -1572,16 +1294,16 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.3.1" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ - "bytes 0.5.6", + "bytes", "futures-core", "futures-sink", - "log", - "pin-project-lite 0.1.12", + "pin-project-lite", "tokio", + "tracing", ] [[package]] @@ -1596,9 +1318,8 @@ version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" dependencies = [ - "cfg-if 1.0.0", - "log", - "pin-project-lite 0.2.6", + "cfg-if", + "pin-project-lite", "tracing-core", ] @@ -1611,49 +1332,44 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - [[package]] name = "trust-dns-proto" -version = "0.19.7" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cad71a0c0d68ab9941d2fb6e82f8fb2e86d9945b94e1661dd0aaea2b88215a9" +checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" dependencies = [ "async-trait", - "backtrace", - "cfg-if 1.0.0", + "cfg-if", + "data-encoding", "enum-as-inner", - "futures", + "futures-channel", + "futures-io", + "futures-util", "idna", + "ipnet", "lazy_static", "log", - "rand 0.7.3", + "rand", "smallvec", "thiserror", + "tinyvec", "tokio", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.19.7" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "710f593b371175db53a26d0b38ed2978fafb9e9e8d3868b1acd753ea18df0ceb" +checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" dependencies = [ - "cfg-if 0.1.10", - "futures", + "cfg-if", + "futures-util", "ipconfig", "lazy_static", "log", "lru-cache", + "parking_lot", "resolv-conf", "smallvec", "thiserror", @@ -1667,15 +1383,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.5" @@ -1685,6 +1392,12 @@ dependencies = [ "matches", ] +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + [[package]] name = "unicode-normalization" version = "0.1.19" @@ -1694,24 +1407,12 @@ dependencies = [ "tinyvec", ] -[[package]] -name = "unicode-segmentation" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796" - [[package]] name = "unicode-width" version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" -[[package]] -name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - [[package]] name = "url" version = "2.2.2" @@ -1754,15 +1455,15 @@ dependencies = [ [[package]] name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" @@ -1770,9 +1471,7 @@ version = "0.2.74" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" dependencies = [ - "cfg-if 1.0.0", - "serde", - "serde_json", + "cfg-if", "wasm-bindgen-macro", ] @@ -1797,7 +1496,7 @@ version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "wasm-bindgen", "web-sys", @@ -1844,15 +1543,9 @@ dependencies = [ [[package]] name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - -[[package]] -name = "winapi" -version = "0.2.8" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" [[package]] name = "winapi" @@ -1864,12 +1557,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -1883,31 +1570,64 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "winreg" -version = "0.6.2" +name = "windows-sys" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "winapi 0.3.9", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", ] +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + [[package]] name = "winreg" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] -name = "ws2_32-sys" -version = "0.2.1" +name = "winreg" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 8788f79..b484d05 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,8 +18,8 @@ serde_json = "1.0.39" yaml-rust = "0.4.3" url = "2.1.1" linked-hash-map = "0.5.3" -tokio = { version = "0.2.20", features = ["rt-core", "rt-threaded", "time", "net", "io-driver"] } -reqwest = { version = "0.10.4", features = ["cookies", "trust-dns"] } +tokio = { version = "1.19.2", features = ["time", "net"] } +reqwest = { version = "0.11.11", features = ["cookies", "trust-dns"] } async-trait = "0.1.30" futures = "0.3.5" lazy_static = "1.4.0" diff --git a/src/actions/delay.rs b/src/actions/delay.rs index dbae034..f39b8e4 100644 --- a/src/actions/delay.rs +++ b/src/actions/delay.rs @@ -1,6 +1,6 @@ use async_trait::async_trait; use colored::*; -use tokio::time::delay_for; +use tokio::time::sleep; use yaml_rust::Yaml; use crate::actions::extract; @@ -36,7 +36,7 @@ impl Delay { #[async_trait] impl Runnable for Delay { async fn execute(&self, _context: &mut Context, _reports: &mut Reports, _pool: &Pool, config: &Config) { - delay_for(Duration::from_secs(self.seconds as u64)).await; + sleep(Duration::from_secs(self.seconds as u64)).await; if !config.quiet { println!("{:width$} {}{}", self.name.green(), self.seconds.to_string().cyan().bold(), "s".magenta(), width = 25); diff --git a/src/benchmark.rs b/src/benchmark.rs index 7406ce4..f77e990 100644 --- a/src/benchmark.rs +++ b/src/benchmark.rs @@ -5,7 +5,7 @@ use std::time::{Duration, Instant}; use futures::stream::{self, StreamExt}; use serde_json::{json, Value}; -use tokio::{runtime, time::delay_for}; +use tokio::{runtime, time::sleep}; use crate::actions::{Report, Runnable}; use crate::config::Config; @@ -31,7 +31,7 @@ pub struct BenchmarkResult { async fn run_iteration(benchmark: Arc, pool: Pool, config: Arc, iteration: i64) -> Vec { if config.rampup > 0 { let delay = config.rampup / config.iterations; - delay_for(Duration::new((delay * iteration) as u64, 0)).await; + sleep(Duration::new((delay * iteration) as u64, 0)).await; } let mut context: Context = Context::new(); @@ -70,7 +70,8 @@ pub fn execute(benchmark_path: &str, report_path_option: Option<&str>, relaxed_i println!(); let threads = std::cmp::min(num_cpus::get(), config.concurrency as usize); - let mut rt = runtime::Builder::new().threaded_scheduler().enable_all().core_threads(threads).max_threads(threads).build().unwrap(); + let rt = runtime::Builder::new_multi_thread().enable_all().worker_threads(threads).build().unwrap(); + rt.block_on(async { let mut benchmark: Benchmark = Benchmark::new(); let pool_store: PoolStore = PoolStore::new(); From bda054b7b7f81a84d5a09281bece687607947f70 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 10 Jul 2022 09:43:03 +0000 Subject: [PATCH 08/64] Update openssl dependency --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e83be9a..f84ff82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -812,9 +812,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" [[package]] name = "openssl-src" -version = "111.20.0+1.1.1o" +version = "111.22.0+1.1.1q" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92892c4f87d56e376e469ace79f1128fdaded07646ddf73aa0be4706ff712dec" +checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" dependencies = [ "cc", ] From d0d1451283e874798d9ff1ea3f078ba8617dea77 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 10 Jul 2022 10:05:36 +0000 Subject: [PATCH 09/64] Bump version to 0.8.0 --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f84ff82..c7085e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -236,7 +236,7 @@ checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" [[package]] name = "drill" -version = "0.7.3" +version = "0.8.0" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index b484d05..4a8c390 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drill" -version = "0.7.3" +version = "0.8.0" authors = ["Ferran Basora "] description = "Drill is a HTTP load testing application written in Rust inspired by Ansible syntax" repository = "https://github.com/fcsonline/drill" diff --git a/README.md b/README.md index 7b7cf83..0e3bbb5 100644 --- a/README.md +++ b/README.md @@ -247,7 +247,7 @@ production environments. Full list of cli options, which is available under `drill --help` ``` -drill 0.7.3 +drill 0.8.0 HTTP load testing application written in Rust inspired by Ansible syntax USAGE: From 0209fc9a58960bbb0fa972820896cc7113fb20a5 Mon Sep 17 00:00:00 2001 From: Hendric Eckelt Date: Sun, 17 Jul 2022 13:22:47 +0000 Subject: [PATCH 10/64] Implement a pick option Allows to pick a subset of items from with_items. Pick limits the amount of requests done instead of doing one for each item. When used in conjunction with shuffle it can be used to send one request with a random item from the list. Resolves #131 --- README.md | 10 +++++ example/benchmark.yml | 10 +++++ src/actions/request.rs | 2 +- src/expandable/include.rs | 2 +- src/expandable/mod.rs | 60 ++++++++++++++++++++++++++++ src/expandable/multi_csv_request.rs | 35 ++++++++++++++-- src/expandable/multi_file_request.rs | 37 ++++++++++++++--- src/expandable/multi_request.rs | 35 ++++++++++++++-- 8 files changed, 176 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 0e3bbb5..6018425 100644 --- a/README.md +++ b/README.md @@ -159,6 +159,16 @@ plan: Authorization: Basic aHR0cHdhdGNoOmY= X-Foo: Bar X-Bar: Bar {{ memory.headers.token }} + + - name: One request with a random item + request: + url: /api/users/{{ item }} + with_items: + - 70 + - 73 + - 75 + shuffle: true + pick: 1 ``` As you can see, you can play with interpolations in different ways. This diff --git a/example/benchmark.yml b/example/benchmark.yml index 505c88c..8fb9811 100644 --- a/example/benchmark.yml +++ b/example/benchmark.yml @@ -131,3 +131,13 @@ plan: url: /api/users method: POST body: foo=bar&arg={{ bar }} + + - name: One request with a random item + request: + url: /api/users/{{ item }} + with_items: + - 70 + - 73 + - 75 + shuffle: true + pick: 1 diff --git a/src/actions/request.rs b/src/actions/request.rs index 108f19b..8eeb72b 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -360,4 +360,4 @@ fn log_response(log_message_response: String, body: &Option) { write!(message, " {} {:?}", "BODY:".bold(), body).unwrap() } println!("{}", message); -} +} \ No newline at end of file diff --git a/src/expandable/include.rs b/src/expandable/include.rs index 2579b49..fbd4814 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -94,4 +94,4 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark, &Tags::new(None, None)); } -} +} \ No newline at end of file diff --git a/src/expandable/mod.rs b/src/expandable/mod.rs index 9674966..5d78418 100644 --- a/src/expandable/mod.rs +++ b/src/expandable/mod.rs @@ -4,3 +4,63 @@ mod multi_csv_request; mod multi_file_request; mod multi_iter_request; mod multi_request; + +use yaml_rust::Yaml; + +pub fn pick(item: &Yaml, with_items: &Vec) -> usize { + match item["pick"].as_i64() { + Some(value) => { + if value.is_negative() { + panic!("pick option should not be negative, but was {}", value); + } else if value as usize > with_items.len() { + panic!("pick option should not be greater than the provided items, but was {}", value); + } else { + value as usize + } + } + None => with_items.len() + } +} + +#[cfg(test)] +mod tests { + use super::*; + + mod pick { + use super::*; + + #[test] + fn should_return_the_configured_value() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items:\n - 1\n - 2\n - 3"; + let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; + let pick = pick(item, item["with_items"].as_vec().unwrap()); + + assert_eq!(pick, 2); + } + + #[test] + fn should_return_the_with_items_length_if_unset() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items:\n - 1\n - 2\n - 3"; + let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; + let pick = pick(item, item["with_items"].as_vec().unwrap()); + + assert_eq!(pick, 3); + } + + #[test] + #[should_panic(expected = "pick option should not be negative, but was -1")] + fn should_panic_for_negative_values() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: -1\nwith_items:\n - 1\n - 2\n - 3"; + let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; + pick(item, item["with_items"].as_vec().unwrap()); + } + + #[test] + #[should_panic(expected = "pick option should not be greater than the provided items, but was 4")] + fn should_panic_for_values_greater_than_the_items_list() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 4\nwith_items:\n - 1\n - 2\n - 3"; + let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; + pick(item, item["with_items"].as_vec().unwrap()); + } + } +} diff --git a/src/expandable/multi_csv_request.rs b/src/expandable/multi_csv_request.rs index 2f915ea..e73cf12 100644 --- a/src/expandable/multi_csv_request.rs +++ b/src/expandable/multi_csv_request.rs @@ -3,11 +3,11 @@ use rand::thread_rng; use std::path::Path; use yaml_rust::Yaml; -use crate::interpolator::INTERPOLATION_REGEX; - use crate::actions::Request; use crate::benchmark::Benchmark; +use crate::interpolator::INTERPOLATION_REGEX; use crate::reader; +use super::pick; pub fn is_that_you(item: &Yaml) -> bool { item["request"].as_hash().is_some() && (item["with_items_from_csv"].as_str().is_some() || item["with_items_from_csv"].as_hash().is_some()) @@ -41,7 +41,8 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { } } - for (index, with_item) in with_items_file.iter().enumerate() { + let pick = pick(item, &with_items_file); + for (index, with_item) in with_items_file.iter().take(pick).enumerate() { let index = index as u32; benchmark.push(Box::new(Request::new(item, Some(with_item.clone()), Some(index)))); @@ -65,6 +66,32 @@ mod tests { assert_eq!(benchmark.len(), 2); } + #[test] + fn expand_multi_should_limit_requests_using_the_pick_option() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items_from_csv: ./fixtures/users.csv"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand("example/benchmark.yml", doc, &mut benchmark); + + assert_eq!(is_that_you(doc), true); + assert_eq!(benchmark.len(), 2); + } + + #[test] + fn expand_multi_should_work_with_pick_and_shuffle() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 1\nshuffle: true\nwith_items_from_csv: ./fixtures/users.csv"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand("example/benchmark.yml", doc, &mut benchmark); + + assert_eq!(is_that_you(doc), true); + assert_eq!(benchmark.len(), 1); + } + #[test] #[should_panic] fn runtime_expand() { @@ -75,4 +102,4 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark); } -} +} \ No newline at end of file diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 0ad8b4d..379214c 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -1,13 +1,13 @@ +use crate::actions::Request; use crate::benchmark::Benchmark; use crate::interpolator::INTERPOLATION_REGEX; +use crate::reader; +use super::pick; use rand::seq::SliceRandom; use rand::thread_rng; use std::path::Path; use yaml_rust::Yaml; -use crate::actions::Request; -use crate::reader; - pub fn is_that_you(item: &Yaml) -> bool { item["request"].as_hash().is_some() && (item["with_items_from_file"].as_str().is_some() || item["with_items_from_file"].as_hash().is_some()) } @@ -35,7 +35,8 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { } } - for (index, with_item) in with_items_file.iter().enumerate() { + let pick = pick(item, &with_items_file); + for (index, with_item) in with_items_file.iter().take(pick).enumerate() { let index = index as u32; benchmark.push(Box::new(Request::new(item, Some(with_item.clone()), Some(index)))); @@ -58,4 +59,30 @@ mod test { assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 3); } -} + + #[test] + fn expand_multi_should_limit_requests_using_the_pick_option() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items_from_file: ./fixtures/texts.txt"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand("example/benchmark.yml", doc, &mut benchmark); + + assert_eq!(is_that_you(doc), true); + assert_eq!(benchmark.len(), 2); + } + + #[test] + fn expand_multi_should_work_with_pick_and_shuffle() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 1\nshuffle: true\nwith_items_from_file: ./fixtures/texts.txt"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand("example/benchmark.yml", doc, &mut benchmark); + + assert_eq!(is_that_you(doc), true); + assert_eq!(benchmark.len(), 1); + } +} \ No newline at end of file diff --git a/src/expandable/multi_request.rs b/src/expandable/multi_request.rs index 2491167..b5f6ead 100644 --- a/src/expandable/multi_request.rs +++ b/src/expandable/multi_request.rs @@ -2,10 +2,10 @@ use rand::seq::SliceRandom; use rand::thread_rng; use yaml_rust::Yaml; -use crate::interpolator::INTERPOLATION_REGEX; - use crate::actions::Request; use crate::benchmark::Benchmark; +use crate::interpolator::INTERPOLATION_REGEX; +use super::pick; pub fn is_that_you(item: &Yaml) -> bool { item["request"].as_hash().is_some() && item["with_items"].as_vec().is_some() @@ -22,7 +22,8 @@ pub fn expand(item: &Yaml, benchmark: &mut Benchmark) { } } - for (index, with_item) in with_items_list.iter().enumerate() { + let pick = pick(item, &with_items_list); + for (index, with_item) in with_items_list.iter().take(pick).enumerate() { let index = index as u32; let value: &str = with_item.as_str().unwrap_or(""); @@ -53,6 +54,32 @@ mod tests { assert_eq!(benchmark.len(), 3); } + #[test] + fn expand_multi_should_limit_requests_using_the_pick_option() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items:\n - 1\n - 2\n - 3"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand(doc, &mut benchmark); + + assert_eq!(is_that_you(doc), true); + assert_eq!(benchmark.len(), 2); + } + + #[test] + fn expand_multi_should_work_with_pick_and_shuffle() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 1\nshuffle: true\nwith_items:\n - 1\n - 2\n - 3"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand(doc, &mut benchmark); + + assert_eq!(is_that_you(doc), true); + assert_eq!(benchmark.len(), 1); + } + #[test] #[should_panic] fn runtime_expand() { @@ -63,4 +90,4 @@ mod tests { expand(doc, &mut benchmark); } -} +} \ No newline at end of file From 3012159b6eff847ab1763d50c72bffe4eff10d8e Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Tue, 19 Jul 2022 15:04:57 +0000 Subject: [PATCH 11/64] Fix formatting --- src/actions/request.rs | 2 +- src/expandable/include.rs | 2 +- src/expandable/mod.rs | 2 +- src/expandable/multi_csv_request.rs | 4 ++-- src/expandable/multi_file_request.rs | 4 ++-- src/expandable/multi_request.rs | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/actions/request.rs b/src/actions/request.rs index 8eeb72b..108f19b 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -360,4 +360,4 @@ fn log_response(log_message_response: String, body: &Option) { write!(message, " {} {:?}", "BODY:".bold(), body).unwrap() } println!("{}", message); -} \ No newline at end of file +} diff --git a/src/expandable/include.rs b/src/expandable/include.rs index fbd4814..2579b49 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -94,4 +94,4 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark, &Tags::new(None, None)); } -} \ No newline at end of file +} diff --git a/src/expandable/mod.rs b/src/expandable/mod.rs index 5d78418..4ce5a47 100644 --- a/src/expandable/mod.rs +++ b/src/expandable/mod.rs @@ -18,7 +18,7 @@ pub fn pick(item: &Yaml, with_items: &Vec) -> usize { value as usize } } - None => with_items.len() + None => with_items.len(), } } diff --git a/src/expandable/multi_csv_request.rs b/src/expandable/multi_csv_request.rs index e73cf12..e5a24fd 100644 --- a/src/expandable/multi_csv_request.rs +++ b/src/expandable/multi_csv_request.rs @@ -3,11 +3,11 @@ use rand::thread_rng; use std::path::Path; use yaml_rust::Yaml; +use super::pick; use crate::actions::Request; use crate::benchmark::Benchmark; use crate::interpolator::INTERPOLATION_REGEX; use crate::reader; -use super::pick; pub fn is_that_you(item: &Yaml) -> bool { item["request"].as_hash().is_some() && (item["with_items_from_csv"].as_str().is_some() || item["with_items_from_csv"].as_hash().is_some()) @@ -102,4 +102,4 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark); } -} \ No newline at end of file +} diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 379214c..3e2d4d2 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -1,8 +1,8 @@ +use super::pick; use crate::actions::Request; use crate::benchmark::Benchmark; use crate::interpolator::INTERPOLATION_REGEX; use crate::reader; -use super::pick; use rand::seq::SliceRandom; use rand::thread_rng; use std::path::Path; @@ -85,4 +85,4 @@ mod test { assert_eq!(is_that_you(doc), true); assert_eq!(benchmark.len(), 1); } -} \ No newline at end of file +} diff --git a/src/expandable/multi_request.rs b/src/expandable/multi_request.rs index b5f6ead..c827068 100644 --- a/src/expandable/multi_request.rs +++ b/src/expandable/multi_request.rs @@ -2,10 +2,10 @@ use rand::seq::SliceRandom; use rand::thread_rng; use yaml_rust::Yaml; +use super::pick; use crate::actions::Request; use crate::benchmark::Benchmark; use crate::interpolator::INTERPOLATION_REGEX; -use super::pick; pub fn is_that_you(item: &Yaml) -> bool { item["request"].as_hash().is_some() && item["with_items"].as_vec().is_some() @@ -90,4 +90,4 @@ mod tests { expand(doc, &mut benchmark); } -} \ No newline at end of file +} From 79e426e4af0f6554491986debfb6ab9116ee615c Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Tue, 19 Jul 2022 15:07:06 +0000 Subject: [PATCH 12/64] Check CI on pull request --- .github/workflows/general.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml index 22105fa..bfb681f 100644 --- a/.github/workflows/general.yml +++ b/.github/workflows/general.yml @@ -1,6 +1,6 @@ name: Rust -on: [push] +on: [pull_request, push] env: CARGO_TERM_COLOR: always From 6bcd0a656eb51335441688a9ff236bcadedc3b6b Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Thu, 28 Jul 2022 11:00:42 +0000 Subject: [PATCH 13/64] Release workflow --- .github/workflows/release.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..17583fb --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Release + +on: + release: + types: [published] + +jobs: + release: + name: release ${{ matrix.target }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - target: x86_64-unknown-linux-musl + archive: tar.gz + + # TODO: Enable more platforms in the future + # - target: x86_64-apple-darwin + # archive: zip + # - target: x86_64-pc-windows-gnu + # archive: zip + steps: + - uses: actions/checkout@master + - name: Compile and release + uses: rust-build/rust-build.action@latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUSTTARGET: ${{ matrix.target }} + EXTRA_FILES: "README.md" + ARCHIVE_TYPES: ${{ matrix.archive }} From de193ed7007f23d4794f7dec1f52e3371d24249f Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Thu, 28 Jul 2022 11:00:42 +0000 Subject: [PATCH 14/64] Release workflow --- .github/workflows/release.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..17583fb --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,31 @@ +name: Release + +on: + release: + types: [published] + +jobs: + release: + name: release ${{ matrix.target }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - target: x86_64-unknown-linux-musl + archive: tar.gz + + # TODO: Enable more platforms in the future + # - target: x86_64-apple-darwin + # archive: zip + # - target: x86_64-pc-windows-gnu + # archive: zip + steps: + - uses: actions/checkout@master + - name: Compile and release + uses: rust-build/rust-build.action@latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RUSTTARGET: ${{ matrix.target }} + EXTRA_FILES: "README.md" + ARCHIVE_TYPES: ${{ matrix.archive }} From e8533d29c4330cfd88ab067305fc34a2bc524ea5 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Thu, 28 Jul 2022 15:25:29 +0000 Subject: [PATCH 15/64] Bump version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c7085e2..a00940b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -236,7 +236,7 @@ checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" [[package]] name = "drill" -version = "0.8.0" +version = "0.8.1" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index 4a8c390..a7a21d8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drill" -version = "0.8.0" +version = "0.8.1" authors = ["Ferran Basora "] description = "Drill is a HTTP load testing application written in Rust inspired by Ansible syntax" repository = "https://github.com/fcsonline/drill" From 55e7a6278854b8c07d3de42c304ab7a19620235d Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Fri, 29 Jul 2022 06:50:21 +0000 Subject: [PATCH 16/64] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6018425..b1bd1c7 100644 --- a/README.md +++ b/README.md @@ -179,7 +179,13 @@ If you want to know more about the benchmark file syntax, [read this](./SYNTAX.m ## Install -The easiest way right now is to install with [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html): +Right now, the easiest way to get `drill` is to go to the +[latest release](https://github.com/fcsonline/drill/releases/latest) +page and download the binary file for your platform. + + +Another way to install `drill`, if you have [Rust](https://rustup.rs/) available in +your system, is with [cargo](https://doc.rust-lang.org/cargo/getting-started/installation.html): ``` cargo install drill @@ -257,7 +263,7 @@ production environments. Full list of cli options, which is available under `drill --help` ``` -drill 0.8.0 +drill 0.8.1 HTTP load testing application written in Rust inspired by Ansible syntax USAGE: From 91b7a4255486971fea874af464f451df28b58d60 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Fri, 29 Jul 2022 07:20:03 +0000 Subject: [PATCH 17/64] Update documentation --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index b1bd1c7..50f0e00 100644 --- a/README.md +++ b/README.md @@ -296,6 +296,12 @@ OPTIONS: - Complete and improve the interpolation engine - Add writing to a file support +## Donations + +If you appreciate all the job done in this project, a small donation is always welcome: + +[!["Buy Me A Coffee"](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/fcsonline) + ## Contribute This project started as a side project to learn Rust, so I'm sure that is full From 322a332c0d2c9744977203b13fca32104a17e353 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 17 Dec 2022 22:31:35 +0000 Subject: [PATCH 18/64] Fix some clippy offenses --- src/checker.rs | 2 +- src/expandable/mod.rs | 2 +- src/reader.rs | 6 +++--- src/writer.rs | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/checker.rs b/src/checker.rs index 9ee3009..66216ce 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -18,7 +18,7 @@ pub fn compare(list_reports: &[Vec], filepath: &str, threshold: &str) -> let display = path.display(); // Open the path in read-only mode, returns `io::Result` - let mut file = match File::open(&path) { + let mut file = match File::open(path) { Err(why) => panic!("couldn't open {}: {}", display, why), Ok(file) => file, }; diff --git a/src/expandable/mod.rs b/src/expandable/mod.rs index 4ce5a47..927697a 100644 --- a/src/expandable/mod.rs +++ b/src/expandable/mod.rs @@ -7,7 +7,7 @@ mod multi_request; use yaml_rust::Yaml; -pub fn pick(item: &Yaml, with_items: &Vec) -> usize { +pub fn pick(item: &Yaml, with_items: &[Yaml]) -> usize { match item["pick"].as_i64() { Some(value) => { if value.is_negative() { diff --git a/src/reader.rs b/src/reader.rs index 6e2f2d0..c568854 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -8,7 +8,7 @@ pub fn read_file(filepath: &str) -> String { let display = path.display(); // Open the path in read-only mode, returns `io::Result` - let mut file = match File::open(&path) { + let mut file = match File::open(path) { Err(why) => panic!("couldn't open {}: {}", display, why), Ok(file) => file, }; @@ -46,7 +46,7 @@ pub fn read_file_as_yml_array(filepath: &str) -> yaml_rust::yaml::Array { let path = Path::new(filepath); let display = path.display(); - let file = match File::open(&path) { + let file = match File::open(path) { Err(why) => panic!("couldn't open {}: {}", display, why), Ok(file) => file, }; @@ -72,7 +72,7 @@ pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> yaml_rust::yaml::Array let display = path.display(); // Open the path in read-only mode, returns `io::Result` - let file = match File::open(&path) { + let file = match File::open(path) { Err(why) => panic!("couldn't open {}: {}", display, why), Ok(file) => file, }; diff --git a/src/writer.rs b/src/writer.rs index d7be9c8..8f79c11 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -6,7 +6,7 @@ pub fn write_file(filepath: &str, content: String) { let path = Path::new(filepath); let display = path.display(); - let mut file = match File::create(&path) { + let mut file = match File::create(path) { Err(why) => panic!("couldn't create {}: {:?}", display, why), Ok(file) => file, }; From c6aeabf2573e5e4014bc244508551e63719786fd Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 17 Dec 2022 22:32:02 +0000 Subject: [PATCH 19/64] Update deps --- Cargo.lock | 686 +++++++++++++++++++++++++++++------------------------ 1 file changed, 377 insertions(+), 309 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a00940b..5f1d914 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,27 +10,27 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" dependencies = [ "memchr", ] [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] [[package]] name = "async-trait" -version = "0.1.50" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722" +checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" dependencies = [ "proc-macro2", "quote", @@ -56,21 +56,21 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "bitflags" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bstr" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279" +checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" dependencies = [ "lazy_static", "memchr", @@ -80,9 +80,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.7.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" [[package]] name = "byteorder" @@ -92,15 +92,15 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" [[package]] name = "bytes" -version = "1.0.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" +checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" [[package]] name = "cc" -version = "1.0.68" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a72c244c1ff497a746a7e1fb3d14bd08420ecda70c8f25c7112f2781652d787" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" [[package]] name = "cfg-if" @@ -110,9 +110,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", @@ -136,9 +136,9 @@ dependencies = [ [[package]] name = "cookie" -version = "0.16.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" dependencies = [ "percent-encoding", "time", @@ -152,7 +152,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd" dependencies = [ "cookie", - "idna", + "idna 0.2.3", "log", "publicsuffix", "serde", @@ -163,9 +163,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.1" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" dependencies = [ "core-foundation-sys", "libc", @@ -173,24 +173,24 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "crc32fast" -version = "1.2.1" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.1" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if", "crossbeam-utils", @@ -198,12 +198,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" dependencies = [ "cfg-if", - "lazy_static", ] [[package]] @@ -214,7 +213,7 @@ checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" dependencies = [ "bstr", "csv-core", - "itoa 0.4.7", + "itoa 0.4.8", "ryu", "serde", ] @@ -230,9 +229,9 @@ dependencies = [ [[package]] name = "data-encoding" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "drill" @@ -260,18 +259,18 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.28" +version = "0.8.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" +checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" dependencies = [ "cfg-if", ] [[package]] name = "enum-as-inner" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ "heck", "proc-macro2", @@ -279,15 +278,22 @@ dependencies = [ "syn", ] +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ - "cfg-if", "crc32fast", - "libc", "miniz_oxide", ] @@ -314,19 +320,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] [[package]] name = "futures" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7e43a803dae2fa37c1f6a8fe121e1f7bf9548b4dfc0522a42f34145dadfc27" +checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" dependencies = [ "futures-channel", "futures-core", @@ -339,9 +344,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e682a68b29a882df0545c143dc3646daefe80ba479bcdede94d5a703de2871e2" +checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" dependencies = [ "futures-core", "futures-sink", @@ -349,15 +354,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0402f765d8a89a26043b889b26ce3c4679d268fa6bb22cd7c6aad98340e179d1" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] name = "futures-executor" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "badaa6a909fac9e7236d0620a2f57f7664640c56575b71a7552fbd68deafab79" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" dependencies = [ "futures-core", "futures-task", @@ -366,18 +371,16 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acc499defb3b348f8d8f3f66415835a9131856ff7714bf10dadfc4ec4bdb29a1" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" [[package]] name = "futures-macro" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c40298486cdf52cc00cd6d6987892ba502c7656a16a4192a9992b1ccedd121" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" dependencies = [ - "autocfg", - "proc-macro-hack", "proc-macro2", "quote", "syn", @@ -385,23 +388,22 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a57bead0ceff0d6dde8f465ecd96c9338121bb7717d3e7b108059531870c4282" +checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" [[package]] name = "futures-task" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a16bef9fc1a4dddb5bee51c989e3fbba26569cbb0e31f5b303c184e3dd33dae" +checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" [[package]] name = "futures-util" -version = "0.3.15" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feb5c238d27e2bf94ffdfd27b2c29e3df4a68c4193bb6427384259e2bf191967" +checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" dependencies = [ - "autocfg", "futures-channel", "futures-core", "futures-io", @@ -411,27 +413,25 @@ dependencies = [ "memchr", "pin-project-lite", "pin-utils", - "proc-macro-hack", - "proc-macro-nested", "slab", ] [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", ] [[package]] name = "h2" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" +checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" dependencies = [ "bytes", "fnv", @@ -448,21 +448,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.9.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hdrhistogram" -version = "7.4.0" +version = "7.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6490be71f07a5f62b564bc58e36953f675833df11c7e4a0647bee7a07ca1ec5e" +checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" dependencies = [ "base64", "byteorder", @@ -480,9 +474,9 @@ checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" dependencies = [ "libc", ] @@ -500,13 +494,13 @@ dependencies = [ [[package]] name = "http" -version = "0.2.4" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", - "itoa 0.4.7", + "itoa 1.0.5", ] [[package]] @@ -522,9 +516,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -534,9 +528,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.20" +version = "0.14.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" +checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" dependencies = [ "bytes", "futures-channel", @@ -547,7 +541,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.2", + "itoa 1.0.5", "pin-project-lite", "socket2", "tokio", @@ -580,51 +574,70 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "indexmap" -version = "1.6.2" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown 0.9.1", + "hashbrown", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", ] [[package]] name = "ipconfig" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98" +checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" dependencies = [ "socket2", "widestring", "winapi", - "winreg 0.7.0", + "winreg", ] [[package]] name = "ipnet" -version = "2.3.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" +checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" [[package]] name = "itoa" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "js-sys" -version = "0.3.51" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bdfbace3a0e81a4253f73b49e960b053e396a11012cbd49b9b74d6a2b67062" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -637,21 +650,21 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.126" +version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" +checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" [[package]] name = "linked-hash-map" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "lock_api" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -659,9 +672,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] @@ -683,15 +696,15 @@ checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" [[package]] name = "matches" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16bd47d9e329435e309c58469fe0791c2d0d1ba96ec0954152a5ae2b04387dc" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "mime" @@ -701,37 +714,36 @@ checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "minimal-lexical" -version = "0.1.4" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c64630dcdd71f1a64c435f54885086a0de5d6a12d104d69b165fb7d5286d677" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", - "autocfg", ] [[package]] name = "mio" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys", + "wasi", + "windows-sys 0.42.0", ] [[package]] name = "native-tls" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" dependencies = [ "lazy_static", "libc", @@ -747,83 +759,85 @@ dependencies = [ [[package]] name = "nom" -version = "7.0.0" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffd9d26838a953b4af82cbeb9f1592c6798916983959be223a7124e992742c1" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" dependencies = [ "memchr", "minimal-lexical", - "version_check", ] [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.13.0" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" dependencies = [ "hermit-abi", "libc", ] -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - [[package]] name = "once_cell" -version = "1.8.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" [[package]] name = "openssl" -version = "0.10.35" +version = "0.10.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549430950c79ae24e6d02e0b7404534ecf311d94cc9f861e9e4020187d13d885" +checksum = "29d971fd5722fec23977260f6e81aa67d2f22cadbdc2aa049f1022d9a3be1566" dependencies = [ "bitflags", "cfg-if", "foreign-types", "libc", "once_cell", + "openssl-macros", "openssl-sys", ] +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "openssl-probe" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.22.0+1.1.1q" +version = "111.24.0+1.1.1s" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f31f0d509d1c1ae9cada2f9539ff8f37933831fd5098879e482aa687d659853" +checksum = "3498f259dab01178c6228c6b00dcef0ed2a2d5e20d648c017861227773ea4abd" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.66" +version = "0.9.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82" +checksum = "5454462c0eced1e97f2ec09036abc8da362e66802f66fd20f86854d9d8cbcbc4" dependencies = [ "autocfg", "cc", @@ -845,28 +859,28 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys", + "windows-sys 0.42.0", ] [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pin-project-lite" -version = "0.2.6" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -876,15 +890,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.19" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "proc-macro-hack" @@ -892,36 +906,28 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" -[[package]] -name = "proc-macro-nested" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" - [[package]] name = "proc-macro2" -version = "1.0.40" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" +checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" dependencies = [ "unicode-ident", ] [[package]] name = "psl-types" -version = "2.0.10" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8eda7c62d9ecaafdf8b62374c006de0adf61666ae96a96ba74a37134aa4e470" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "publicsuffix" -version = "2.1.1" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "292972edad6bbecc137ab84c5e36421a4a6c979ea31d3cc73540dd04315b33e1" +checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" dependencies = [ - "byteorder", - "hashbrown 0.11.2", - "idna", + "idna 0.3.0", "psl-types", ] @@ -933,9 +939,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.9" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7" +checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" dependencies = [ "proc-macro2", ] @@ -963,27 +969,27 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] name = "redox_syscall" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.5.5" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "aho-corasick", "memchr", @@ -998,9 +1004,9 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "remove_dir_all" @@ -1013,9 +1019,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.11" +version = "0.11.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" +checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" dependencies = [ "base64", "bytes", @@ -1031,10 +1037,10 @@ dependencies = [ "hyper-tls", "ipnet", "js-sys", - "lazy_static", "log", "mime", "native-tls", + "once_cell", "percent-encoding", "pin-project-lite", "proc-macro-hack", @@ -1049,7 +1055,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg 0.10.1", + "winreg", ] [[package]] @@ -1064,18 +1070,18 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys 0.36.1", ] [[package]] @@ -1086,9 +1092,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "security-framework" -version = "2.3.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -1099,9 +1105,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.3.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e4effb91b4b8b6fb7732e670b6cee160278ff8e6bf485c7805d9e319d76e284" +checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" dependencies = [ "core-foundation-sys", "libc", @@ -1109,18 +1115,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.138" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1578c6245786b9d168c5447eeacfb96856573ca56c9d68fdcf394be134882a47" +checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.138" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "023e9b1467aef8a10fb88f25611870ada9800ef7e22afce356bb0d2387b6f27c" +checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" dependencies = [ "proc-macro2", "quote", @@ -1129,11 +1135,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.82" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" +checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf" dependencies = [ - "itoa 1.0.2", + "itoa 1.0.5", "ryu", "serde", ] @@ -1145,28 +1151,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.2", + "itoa 1.0.5", "ryu", "serde", ] [[package]] name = "slab" -version = "0.4.3" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "smallvec" -version = "1.6.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -1180,9 +1189,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.98" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" +checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" dependencies = [ "proc-macro2", "quote", @@ -1191,13 +1200,13 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22" +checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" dependencies = [ "cfg-if", + "fastrand", "libc", - "rand", "redox_syscall", "remove_dir_all", "winapi", @@ -1214,18 +1223,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.25" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa6f76457f59514c7eeb4e59d891395fab0b2fd1d40723ae737d64153392e9c6" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.25" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a36768c0fbf1bb15eca10defa29526bda730a2376c2ab4393ccfa16fb1a318d" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" dependencies = [ "proc-macro2", "quote", @@ -1234,27 +1243,36 @@ dependencies = [ [[package]] name = "time" -version = "0.3.11" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" +checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" dependencies = [ - "itoa 1.0.2", - "libc", - "num_threads", + "itoa 1.0.5", + "serde", + "time-core", "time-macros", ] +[[package]] +name = "time-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" + [[package]] name = "time-macros" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" +checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +dependencies = [ + "time-core", +] [[package]] name = "tinyvec" -version = "1.2.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b5220f05bb7de7f3f53c7c065e1199b3172696fe2db9f9c4d8ad9b4ee74c342" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -1267,19 +1285,19 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.19.2" +version = "1.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" +checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" dependencies = [ + "autocfg", "bytes", "libc", "memchr", "mio", "num_cpus", - "once_cell", "pin-project-lite", "socket2", - "winapi", + "windows-sys 0.42.0", ] [[package]] @@ -1294,9 +1312,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", @@ -1308,35 +1326,47 @@ dependencies = [ [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.26" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" -version = "0.1.18" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] name = "trust-dns-proto" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", "cfg-if", @@ -1345,35 +1375,35 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna", + "idna 0.2.3", "ipnet", "lazy_static", - "log", "rand", "smallvec", "thiserror", "tinyvec", "tokio", + "tracing", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" dependencies = [ "cfg-if", "futures-util", "ipconfig", "lazy_static", - "log", "lru-cache", "parking_lot", "resolv-conf", "smallvec", "thiserror", "tokio", + "tracing", "trust-dns-proto", ] @@ -1385,43 +1415,39 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] name = "unicode-bidi" -version = "0.3.5" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeb8be209bb1c96b7c177c7420d26e04eccacb0eeae6b980e35fcb74678107e0" -dependencies = [ - "matches", -] +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.1" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", - "idna", - "matches", + "idna 0.3.0", "percent-encoding", ] @@ -1439,9 +1465,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "want" @@ -1453,12 +1479,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -1467,9 +1487,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.74" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54ee1d4ed486f78874278e63e4069fc1ab9f6a18ca492076ffb90c5eb2997fd" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1477,13 +1497,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.74" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b33f6a0694ccfea53d94db8b2ed1c3a8a4c86dd936b13b9f0a15ec4a451b900" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -1492,9 +1512,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.24" +version = "0.4.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fba7978c679d53ce2d0ac80c8c175840feb849a161664365d1287b41f2e67f1" +checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" dependencies = [ "cfg-if", "js-sys", @@ -1504,9 +1524,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.74" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "088169ca61430fe1e58b8096c24975251700e7b1f6fd91cc9d59b04fb9b18bd4" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1514,9 +1534,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.74" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be2241542ff3d9f241f5e2cb6dd09b37efe786df8851c54957683a49f0987a97" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -1527,15 +1547,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.74" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7cff876b8f18eed75a66cf49b65e7f967cb354a7aa16003fb55dbfd25b44b4f" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.51" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e828417b379f3df7111d3a2a9e5753706cae29c41f7c4029ee9fd77f3e09e582" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -1575,37 +1595,88 @@ version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", ] +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + [[package]] name = "windows_aarch64_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" + [[package]] name = "windows_i686_gnu" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +[[package]] +name = "windows_i686_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" + [[package]] name = "windows_i686_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +[[package]] +name = "windows_i686_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" + [[package]] name = "windows_x86_64_gnu" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" + [[package]] name = "windows_x86_64_msvc" version = "0.36.1" @@ -1613,13 +1684,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] -name = "winreg" -version = "0.7.0" +name = "windows_x86_64_msvc" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" -dependencies = [ - "winapi", -] +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" [[package]] name = "winreg" From 672f206f762865a1811a3c838d82ac31a2baa563 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Dec 2022 22:14:23 +0000 Subject: [PATCH 20/64] Bump qs from 6.5.1 to 6.11.0 in /example/server Bumps [qs](https://github.com/ljharb/qs) from 6.5.1 to 6.11.0. - [Release notes](https://github.com/ljharb/qs/releases) - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.5.1...v6.11.0) --- updated-dependencies: - dependency-name: qs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- example/server/package-lock.json | 434 ++++++++++++++++++++----------- 1 file changed, 277 insertions(+), 157 deletions(-) diff --git a/example/server/package-lock.json b/example/server/package-lock.json index 77cb44a..2ff8034 100644 --- a/example/server/package-lock.json +++ b/example/server/package-lock.json @@ -5,50 +5,71 @@ "requires": true, "dependencies": { "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "mime-types": "~2.1.16", - "negotiator": "0.6.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "requires": { - "bytes": "3.0.0", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } } }, "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } }, "content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "cookie": { "version": "0.3.1", @@ -88,65 +109,83 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.1", - "encodeurl": "~1.0.1", + "depd": "2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.0", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.2", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "~1.3.1", - "type-is": "~1.6.15", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + } } }, "express-session": { @@ -166,98 +205,132 @@ } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + } } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "dependencies": { "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" } } }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.52.0" } }, "ms": { @@ -266,14 +339,19 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -291,21 +369,24 @@ "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } }, "random-bytes": { "version": "1.0.0", @@ -313,74 +394,113 @@ "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "send": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", - "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.1", - "destroy": "~1.0.4", - "encodeurl": "~1.0.1", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.3.1" + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } } }, "serve-static": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", - "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.1" + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "dependencies": { + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + } } }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha1-0L2FU2iHtv58DYGMuWLZ2RxU5lY=" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "uid-safe": { @@ -394,7 +514,7 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "utils-merge": { "version": "1.0.1", @@ -404,7 +524,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" } } } From 1b5fc378857034aaf1f384feb3d09d1ea59067c4 Mon Sep 17 00:00:00 2001 From: Kian-Meng Ang Date: Wed, 21 Dec 2022 11:39:42 +0800 Subject: [PATCH 21/64] Fix typos Found via `typos --format brief` --- SYNTAX.md | 2 +- example/server/server.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SYNTAX.md b/SYNTAX.md index bb48617..a375a67 100644 --- a/SYNTAX.md +++ b/SYNTAX.md @@ -64,7 +64,7 @@ Second, it can be a hash with the following properties: [Ansible](https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html#special-tags-always-and-never)-like tags. -If you assing list of tags, e.g `[tag1, tag2]`, this item will be executed if `tag1` **OR** `tag2` is passed. +If you assign list of tags, e.g `[tag1, tag2]`, this item will be executed if `tag1` **OR** `tag2` is passed. Special tags: `always` and `never`. diff --git a/example/server/server.js b/example/server/server.js index e58c5d3..a1be21e 100644 --- a/example/server/server.js +++ b/example/server/server.js @@ -50,7 +50,7 @@ const randomFailedHandler = function(req, res) { } }; -const transactionsHander = function(req, res) { +const transactionsHandler = function(req, res) { const body = req.body if (body.a + body.b === '123') { @@ -72,7 +72,7 @@ app.get('/api/users/at/:floor/:room', logger_handler('R')); app.get('/api/account', logger_handler('A')); app.post('/api/users', randomFailedHandler); -app.post('/api/transactions', transactionsHander); +app.post('/api/transactions', transactionsHandler); // Sessions test plan app.get('/login', function(req, res){ From d26fe2abb6ce89f880baa75653e9aabd13d15aea Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Wed, 21 Dec 2022 14:15:27 +0100 Subject: [PATCH 22/64] Solve clipply offenses --- src/actions/delay.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/actions/delay.rs b/src/actions/delay.rs index f39b8e4..0be6580 100644 --- a/src/actions/delay.rs +++ b/src/actions/delay.rs @@ -36,7 +36,7 @@ impl Delay { #[async_trait] impl Runnable for Delay { async fn execute(&self, _context: &mut Context, _reports: &mut Reports, _pool: &Pool, config: &Config) { - sleep(Duration::from_secs(self.seconds as u64)).await; + sleep(Duration::from_secs(self.seconds)).await; if !config.quiet { println!("{:width$} {}{}", self.name.green(), self.seconds.to_string().cyan().bold(), "s".magenta(), width = 25); From f1443f176fb1c7ca306076474da9039033955d2f Mon Sep 17 00:00:00 2001 From: kyle merfeld Date: Sat, 17 Dec 2022 02:25:10 +0000 Subject: [PATCH 23/64] allow interpolator to read arrays/nested --- src/benchmark.rs | 4 +-- src/interpolator.rs | 60 +++++++++++++++++++++++++++++++-------------- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/benchmark.rs b/src/benchmark.rs index f77e990..bdc88b7 100644 --- a/src/benchmark.rs +++ b/src/benchmark.rs @@ -4,7 +4,7 @@ use std::time::{Duration, Instant}; use futures::stream::{self, StreamExt}; -use serde_json::{json, Value}; +use serde_json::{json, Map, Value}; use tokio::{runtime, time::sleep}; use crate::actions::{Report, Runnable}; @@ -18,7 +18,7 @@ use reqwest::Client; use colored::*; pub type Benchmark = Vec>; -pub type Context = HashMap; +pub type Context = Map; pub type Reports = Vec; pub type PoolStore = HashMap; pub type Pool = Arc>; diff --git a/src/interpolator.rs b/src/interpolator.rs index 4295415..68139cd 100644 --- a/src/interpolator.rs +++ b/src/interpolator.rs @@ -1,6 +1,7 @@ use colored::*; use lazy_static::lazy_static; use regex::{Captures, Regex}; +use serde_json::json; use crate::benchmark::Context; @@ -9,7 +10,7 @@ static INTERPOLATION_SUFFIX: &str = "}}"; lazy_static! { pub static ref INTERPOLATION_REGEX: Regex = { - let regexp = format!("{}{}{}", regex::escape(INTERPOLATION_PREFIX), r" *([a-zA-Z\-\._]+[a-zA-Z\-\._0-9]*) *", regex::escape(INTERPOLATION_SUFFIX)); + let regexp = format!("{}{}{}", regex::escape(INTERPOLATION_PREFIX), r" *([a-zA-Z\-\._\[]+[a-zA-Z\-\._0-9\]]*) *", regex::escape(INTERPOLATION_SUFFIX)); Regex::new(regexp.as_str()).unwrap() }; @@ -31,7 +32,7 @@ impl<'a> Interpolator<'a> { .replace_all(url, |caps: &Captures| { let capture = &caps[1]; - if let Some(item) = self.resolve_context_interpolation(capture.split('.').collect()) { + if let Some(item) = self.resolve_context_interpolation(capture) { return item; } @@ -57,22 +58,22 @@ impl<'a> Interpolator<'a> { } } - fn resolve_context_interpolation(&self, cap_path: Vec<&str>) -> Option { - let (cap_root, cap_tail) = cap_path.split_at(1); - - cap_tail - .iter() - .fold(self.context.get(cap_root[0]), |json, k| match json { - Some(json) => json.get(k), - _ => None, - }) - .map(|value| { - if value.is_string() { - String::from(value.as_str().unwrap()) - } else { - value.to_string() - } - }) + fn resolve_context_interpolation(&self, value: &str) -> Option { + //convert "." and "[" to "/" and "]" to "" to look like a json pointer + let val: String = format!("/{}", value.replace(".", "/").replace("[", "/").replace("]", "")); + + //force the context into a Value, and acess by pointer + if let Some(item) = json!(self.context).pointer(&val).to_owned() { + return Some(match item.to_owned() { + serde_json::Value::Null => "".to_owned(), + serde_json::Value::Bool(v) => v.to_string(), + serde_json::Value::Number(v) => v.to_string(), + serde_json::Value::String(v) => v, + serde_json::Value::Array(v) => serde_json::to_string(&v).unwrap(), + serde_json::Value::Object(v) => serde_json::to_string(&v).unwrap(), + }); + } + None } } @@ -95,6 +96,29 @@ mod tests { assert_eq!(interpolated, "http://example.com/users/12/view/12/chunked"); } + #[test] + fn interpolates_variables_nested() { + let mut context: Context = Context::new(); + + context.insert(String::from("Null"), serde_json::Value::Null); + context.insert(String::from("Bool"), json!(true)); + context.insert(String::from("Number"), json!(12)); + context.insert(String::from("String"), json!("string")); + context.insert(String::from("Array"), json!(["a", "b", "c"])); + context.insert(String::from("Object"), json!({"this": "that"})); + context.insert(String::from("Nested"), json!({"this": {"that": {"those": [{"wow": 1}, {"so": 2}, {"deee": {"eeee": "eeep"}}]}}})); + + let interpolator = Interpolator::new(&context); + + assert_eq!(interpolator.resolve("{{ Null }}", true), "".to_string()); + assert_eq!(interpolator.resolve("{{ Bool }}", true), "true".to_string()); + assert_eq!(interpolator.resolve("{{ Number }}", true), "12".to_string()); + assert_eq!(interpolator.resolve("{{ String }}", true), "string".to_string()); + assert_eq!(interpolator.resolve("{{ Array }}", true), "[\"a\",\"b\",\"c\"]".to_string()); + assert_eq!(interpolator.resolve("{{ Object }}", true), "{\"this\":\"that\"}".to_string()); + assert_eq!(interpolator.resolve("{{ Nested.this.that.those[2].deee.eeee }}", true), "eeep".to_string()); + } + #[test] #[should_panic] fn interpolates_missing_variable() { From a00b30c6d85bfe0be83d21ca6bab9afc1894c68a Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Wed, 21 Dec 2022 18:04:01 +0000 Subject: [PATCH 24/64] Fix some interpolator cases Added some extra code to cover more cases in the new interpolator mechanism. Also, fixing some clippy offenses too. --- example/benchmark.yml | 10 ++++++++++ src/interpolator.rs | 10 ++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/example/benchmark.yml b/example/benchmark.yml index 8fb9811..ff8f661 100644 --- a/example/benchmark.yml +++ b/example/benchmark.yml @@ -141,3 +141,13 @@ plan: - 75 shuffle: true pick: 1 + + - name: Complex access + request: + url: /api/users.json + assign: complex + + - name: Assert request response code + assert: + key: complex.body[1].phones[1] + value: '+44 2345678' diff --git a/src/interpolator.rs b/src/interpolator.rs index 68139cd..09cf236 100644 --- a/src/interpolator.rs +++ b/src/interpolator.rs @@ -10,7 +10,7 @@ static INTERPOLATION_SUFFIX: &str = "}}"; lazy_static! { pub static ref INTERPOLATION_REGEX: Regex = { - let regexp = format!("{}{}{}", regex::escape(INTERPOLATION_PREFIX), r" *([a-zA-Z\-\._\[]+[a-zA-Z\-\._0-9\]]*) *", regex::escape(INTERPOLATION_SUFFIX)); + let regexp = format!("{}{}{}", regex::escape(INTERPOLATION_PREFIX), r" *([a-zA-Z]+[a-zA-Z\-\._0-9\[\]]*) *", regex::escape(INTERPOLATION_SUFFIX)); Regex::new(regexp.as_str()).unwrap() }; @@ -59,10 +59,10 @@ impl<'a> Interpolator<'a> { } fn resolve_context_interpolation(&self, value: &str) -> Option { - //convert "." and "[" to "/" and "]" to "" to look like a json pointer - let val: String = format!("/{}", value.replace(".", "/").replace("[", "/").replace("]", "")); + // convert "." and "[" to "/" and "]" to "" to look like a json pointer + let val: String = format!("/{}", value.replace(['.', '['], "/").replace(']', "")); - //force the context into a Value, and acess by pointer + // force the context into a Value, and acess by pointer if let Some(item) = json!(self.context).pointer(&val).to_owned() { return Some(match item.to_owned() { serde_json::Value::Null => "".to_owned(), @@ -107,6 +107,7 @@ mod tests { context.insert(String::from("Array"), json!(["a", "b", "c"])); context.insert(String::from("Object"), json!({"this": "that"})); context.insert(String::from("Nested"), json!({"this": {"that": {"those": [{"wow": 1}, {"so": 2}, {"deee": {"eeee": "eeep"}}]}}})); + context.insert(String::from("ArrayNested"), json!([{"a": [{}, {"aa": 2, "aaa": [{"aaaa": 123 }]}]}])); let interpolator = Interpolator::new(&context); @@ -117,6 +118,7 @@ mod tests { assert_eq!(interpolator.resolve("{{ Array }}", true), "[\"a\",\"b\",\"c\"]".to_string()); assert_eq!(interpolator.resolve("{{ Object }}", true), "{\"this\":\"that\"}".to_string()); assert_eq!(interpolator.resolve("{{ Nested.this.that.those[2].deee.eeee }}", true), "eeep".to_string()); + assert_eq!(interpolator.resolve("{{ ArrayNested[0].a[1].aaa[0].aaaa }}", true), "123".to_string()); } #[test] From f7627bfd005a599638fe6c77963df2c45c00b5dc Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Wed, 21 Dec 2022 18:57:14 +0000 Subject: [PATCH 25/64] Fix some extra clippy offenses --- src/expandable/include.rs | 2 +- src/expandable/multi_csv_request.rs | 6 +++--- src/expandable/multi_file_request.rs | 6 +++--- src/expandable/multi_iter_request.rs | 2 +- src/expandable/multi_request.rs | 6 +++--- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/expandable/include.rs b/src/expandable/include.rs index 2579b49..78fbee1 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -80,7 +80,7 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark, &Tags::new(None, None)); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 2); } diff --git a/src/expandable/multi_csv_request.rs b/src/expandable/multi_csv_request.rs index e5a24fd..cb1f8db 100644 --- a/src/expandable/multi_csv_request.rs +++ b/src/expandable/multi_csv_request.rs @@ -62,7 +62,7 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 2); } @@ -75,7 +75,7 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 2); } @@ -88,7 +88,7 @@ mod tests { expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 1); } diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 3e2d4d2..08ce26b 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -56,7 +56,7 @@ mod test { expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 3); } @@ -69,7 +69,7 @@ mod test { expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 2); } @@ -82,7 +82,7 @@ mod test { expand("example/benchmark.yml", doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 1); } } diff --git a/src/expandable/multi_iter_request.rs b/src/expandable/multi_iter_request.rs index 2a9cefc..4e2f345 100644 --- a/src/expandable/multi_iter_request.rs +++ b/src/expandable/multi_iter_request.rs @@ -76,7 +76,7 @@ mod tests { expand(doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 10); } diff --git a/src/expandable/multi_request.rs b/src/expandable/multi_request.rs index c827068..ddf413b 100644 --- a/src/expandable/multi_request.rs +++ b/src/expandable/multi_request.rs @@ -50,7 +50,7 @@ mod tests { expand(doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 3); } @@ -63,7 +63,7 @@ mod tests { expand(doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 2); } @@ -76,7 +76,7 @@ mod tests { expand(doc, &mut benchmark); - assert_eq!(is_that_you(doc), true); + assert!(is_that_you(doc)); assert_eq!(benchmark.len(), 1); } From 528720c9ff5dfc8387a0b68d301bf17b40e2b9d4 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Wed, 1 Feb 2023 22:12:07 +0000 Subject: [PATCH 26/64] Fix tags for included files It seems that items that were included with the `include` directive and contains tags, they are ignored. Trying to fix this. Issue: https://github.com/fcsonline/drill/issues/164 --- example/subtags.yml | 9 +++++++++ example/tags.yml | 14 ++++++++++++++ src/expandable/include.rs | 8 ++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 example/subtags.yml create mode 100644 example/tags.yml diff --git a/example/subtags.yml b/example/subtags.yml new file mode 100644 index 0000000..64685aa --- /dev/null +++ b/example/subtags.yml @@ -0,0 +1,9 @@ +# Example of a included file + +--- +- name: Fetch comments + request: + url: /api/comments.json + tags: + - tag_user + diff --git a/example/tags.yml b/example/tags.yml new file mode 100644 index 0000000..ca5b714 --- /dev/null +++ b/example/tags.yml @@ -0,0 +1,14 @@ +--- +base: 'http://localhost:9000' +iterations: 1 +concurrency: 1 + +plan: + - name: Include comments + include: subtags.yml + + - name: Tagged user request + request: + url: /api/users/70 + tags: + - tag_user diff --git a/src/expandable/include.rs b/src/expandable/include.rs index 78fbee1..e288283 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -32,6 +32,12 @@ pub fn expand_from_filepath(parent_path: &str, benchmark: &mut Benchmark, access let items = reader::read_yaml_doc_accessor(&docs[0], accessor); for item in items { + if include::is_that_you(item) { + include::expand(parent_path, item, benchmark, tags); + + continue; + } + if tags.should_skip_item(item) { continue; } @@ -44,8 +50,6 @@ pub fn expand_from_filepath(parent_path: &str, benchmark: &mut Benchmark, access multi_csv_request::expand(parent_path, item, benchmark); } else if multi_file_request::is_that_you(item) { multi_file_request::expand(parent_path, item, benchmark); - } else if include::is_that_you(item) { - include::expand(parent_path, item, benchmark, tags); } else if actions::Delay::is_that_you(item) { benchmark.push(Box::new(actions::Delay::new(item, None))); } else if actions::Exec::is_that_you(item) { From 9728ea3765ed95158ce82047aa89ab0599173519 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 6 Feb 2023 16:47:07 +0000 Subject: [PATCH 27/64] Autofix clippy --- src/actions/request.rs | 8 ++++---- src/config.rs | 6 +++--- src/main.rs | 4 ++-- src/reader.rs | 6 +++--- src/tags.rs | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/actions/request.rs b/src/actions/request.rs index 108f19b..e81f427 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -122,7 +122,7 @@ impl Request { match context.get("base") { Some(value) => { if let Some(vs) = value.as_str() { - format!("{}{}", vs, interpolated_url) + format!("{vs}{interpolated_url}") } else { panic!("{} Wrong type 'base' variable!", "WARNING!".yellow().bold()); } @@ -173,7 +173,7 @@ impl Request { if let Some(cookies) = context.get("cookies") { let cookies: Map = serde_json::from_value(cookies.clone()).unwrap(); - let cookie = cookies.iter().map(|(key, value)| format!("{}={}", key, value)).collect::>().join(";"); + let cookie = cookies.iter().map(|(key, value)| format!("{key}={value}")).collect::>().join(";"); headers.insert(header::COOKIE, HeaderValue::from_str(&cookie).unwrap()); } @@ -334,7 +334,7 @@ fn log_request(request: &reqwest::Request) { write!(message, " {} {},", "URL:".bold(), request.url()).unwrap(); write!(message, " {} {},", "METHOD:".bold(), request.method()).unwrap(); write!(message, " {} {:?}", "HEADERS:".bold(), request.headers()).unwrap(); - println!("{}", message); + println!("{message}"); } fn log_message_response(response: &Option, duration_ms: f64) -> String { @@ -359,5 +359,5 @@ fn log_response(log_message_response: String, body: &Option) { if let Some(body) = body.as_ref() { write!(message, " {} {:?}", "BODY:".bold(), body).unwrap() } - println!("{}", message); + println!("{message}"); } diff --git a/src/config.rs b/src/config.rs index edfd2f2..baebd61 100644 --- a/src/config.rs +++ b/src/config.rs @@ -65,7 +65,7 @@ fn read_str_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp } None => { if config_doc[name].as_str().is_some() { - println!("Invalid {} value!", name); + println!("Invalid {name} value!"); } default.to_owned() @@ -85,7 +85,7 @@ fn read_i64_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp match value { Some(value) => { if value < 0 { - println!("Invalid negative {} value!", name); + println!("Invalid negative {name} value!"); default } else { @@ -94,7 +94,7 @@ fn read_i64_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp } None => { if config_doc[name].as_str().is_some() { - println!("Invalid {} value!", name); + println!("Invalid {name} value!"); } default diff --git a/src/main.rs b/src/main.rs index b43101d..a02f88b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -168,11 +168,11 @@ fn show_stats(list_reports: &[Vec], stats_option: bool, nanosec: bool, d let requests_per_second = global_stats.total_requests as f64 / duration; println!(); - println!("{:width2$} {} {}", "Time taken for tests".yellow(), format!("{:.1}", duration).purple(), "seconds".purple(), width2 = 25); + println!("{:width2$} {} {}", "Time taken for tests".yellow(), format!("{duration:.1}").purple(), "seconds".purple(), width2 = 25); println!("{:width2$} {}", "Total requests".yellow(), global_stats.total_requests.to_string().purple(), width2 = 25); println!("{:width2$} {}", "Successful requests".yellow(), global_stats.successful_requests.to_string().purple(), width2 = 25); println!("{:width2$} {}", "Failed requests".yellow(), global_stats.failed_requests.to_string().purple(), width2 = 25); - println!("{:width2$} {} {}", "Requests per second".yellow(), format!("{:.2}", requests_per_second).purple(), "[#/sec]".purple(), width2 = 25); + println!("{:width2$} {} {}", "Requests per second".yellow(), format!("{requests_per_second:.2}").purple(), "[#/sec]".purple(), width2 = 25); println!("{:width2$} {}", "Median time per request".yellow(), format_time(global_stats.median_duration(), nanosec).purple(), width2 = 25); println!("{:width2$} {}", "Average time per request".yellow(), format_time(global_stats.mean_duration(), nanosec).purple(), width2 = 25); println!("{:width2$} {}", "Sample standard deviation".yellow(), format_time(global_stats.stdev_duration(), nanosec).purple(), width2 = 25); diff --git a/src/reader.rs b/src/reader.rs index c568854..38d335e 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -32,7 +32,7 @@ pub fn read_yaml_doc_accessor<'a>(doc: &'a yaml_rust::Yaml, accessor: Option<&st match doc[accessor_id].as_vec() { Some(items) => items, None => { - println!("Node missing on config: {}", accessor_id); + println!("Node missing on config: {accessor_id}"); println!("Exiting."); std::process::exit(1) } @@ -58,7 +58,7 @@ pub fn read_file_as_yml_array(filepath: &str) -> yaml_rust::yaml::Array { Ok(text) => { items.push(yaml_rust::Yaml::String(text)); } - Err(e) => println!("error parsing line: {:?}", e), + Err(e) => println!("error parsing line: {e:?}"), } } @@ -100,7 +100,7 @@ pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> yaml_rust::yaml::Array items.push(yaml_rust::Yaml::Hash(linked_hash_map)); } - Err(e) => println!("error parsing header: {:?}", e), + Err(e) => println!("error parsing header: {e:?}"), } } diff --git a/src/tags.rs b/src/tags.rs index 22825a1..5f6028e 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -84,7 +84,7 @@ pub fn list_benchmark_file_tasks(benchmark_file: &str, tags: &Tags) { let mut out_str = String::new(); let mut emitter = YamlEmitter::new(&mut out_str); emitter.dump(item).unwrap(); - println!("{}", out_str); + println!("{out_str}"); } } From 30f95d9a9ee79a85aa57f8894d149317362f4b3d Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 6 Feb 2023 16:52:54 +0000 Subject: [PATCH 28/64] Fix tarpaulin --- .github/workflows/general.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml index bfb681f..4eb9f97 100644 --- a/.github/workflows/general.yml +++ b/.github/workflows/general.yml @@ -64,6 +64,7 @@ jobs: override: true - name: Run cargo-tarpaulin - uses: actions-rs/tarpaulin@v0.1 + uses: actions-rs/tarpaulin@v0.1.3 with: + version: '0.15.0' args: '--ignore-tests' From 8ef2e256d4a7645c97bb395d6630118ab64e6d94 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Tue, 7 Feb 2023 18:16:32 +0000 Subject: [PATCH 29/64] Bump version 0.8.2 --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5f1d914..3c8a860 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -235,7 +235,7 @@ checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "drill" -version = "0.8.1" +version = "0.8.2" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index a7a21d8..5d42031 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drill" -version = "0.8.1" +version = "0.8.2" authors = ["Ferran Basora "] description = "Drill is a HTTP load testing application written in Rust inspired by Ansible syntax" repository = "https://github.com/fcsonline/drill" diff --git a/README.md b/README.md index 50f0e00..3b7a0ba 100644 --- a/README.md +++ b/README.md @@ -263,7 +263,7 @@ production environments. Full list of cli options, which is available under `drill --help` ``` -drill 0.8.1 +drill 0.8.2 HTTP load testing application written in Rust inspired by Ansible syntax USAGE: From e7b2cb3e7a38030a203ed333f10615a0af8651d8 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 15 Apr 2023 10:04:30 +0200 Subject: [PATCH 30/64] Fix release process --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 17583fb..232bc0a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: steps: - uses: actions/checkout@master - name: Compile and release - uses: rust-build/rust-build.action@latest + uses: rust-build/rust-build.action@v1.4.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RUSTTARGET: ${{ matrix.target }} From f56d89a25fc5838da57727a75ec3340758c30318 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sat, 15 Apr 2023 10:06:52 +0200 Subject: [PATCH 31/64] Bump version --- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c8a860..9c685e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -235,7 +235,7 @@ checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" [[package]] name = "drill" -version = "0.8.2" +version = "0.8.3" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index 5d42031..7263a5c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drill" -version = "0.8.2" +version = "0.8.3" authors = ["Ferran Basora "] description = "Drill is a HTTP load testing application written in Rust inspired by Ansible syntax" repository = "https://github.com/fcsonline/drill" diff --git a/README.md b/README.md index 3b7a0ba..a5542d2 100644 --- a/README.md +++ b/README.md @@ -263,7 +263,7 @@ production environments. Full list of cli options, which is available under `drill --help` ``` -drill 0.8.2 +drill 0.8.3 HTTP load testing application written in Rust inspired by Ansible syntax USAGE: From e15e6a0a33badba42dea114b381136d9f43ca11b Mon Sep 17 00:00:00 2001 From: Pieter E Smit Date: Sun, 16 Apr 2023 23:10:56 +1200 Subject: [PATCH 32/64] add example/server/docker-compose.yml --- .gitignore | 3 +++ example/server/Dockerfile-example-server | 6 ++++++ example/server/docker-compose.yml | 14 ++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 example/server/Dockerfile-example-server create mode 100644 example/server/docker-compose.yml diff --git a/.gitignore b/.gitignore index 8b00285..defe2ea 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ # Example server example/server/node_modules + +# Editor temp files +.vscode diff --git a/example/server/Dockerfile-example-server b/example/server/Dockerfile-example-server new file mode 100644 index 0000000..bfeefe6 --- /dev/null +++ b/example/server/Dockerfile-example-server @@ -0,0 +1,6 @@ +FROM node +WORKDIR /app +COPY package.json ./ +RUN npm install +COPY . . +CMD node server.js diff --git a/example/server/docker-compose.yml b/example/server/docker-compose.yml new file mode 100644 index 0000000..b0a6041 --- /dev/null +++ b/example/server/docker-compose.yml @@ -0,0 +1,14 @@ +version: "3.9" +services: + drill-server: + ports: + - "9000:9000" + image: drill-example-server:latest + build: + context: ./ + dockerfile: Dockerfile-example-server + #args: + # buildno: 1 + environment: + OUTPUT: 0 + DELAY_MS: 100 From 9636e9c5b4c1701506497d0b39924324ffb7880b Mon Sep 17 00:00:00 2001 From: hypr2771 Date: Thu, 27 Apr 2023 23:11:19 +0200 Subject: [PATCH 33/64] fix: Remove unnecessary `into_iter()` after a `split()` --- src/tags.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tags.rs b/src/tags.rs index 5f6028e..7fa269e 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -11,8 +11,8 @@ pub struct Tags<'a> { impl<'a> Tags<'a> { pub fn new(tags_option: Option<&'a str>, skip_tags_option: Option<&'a str>) -> Self { - let tags: Option> = tags_option.map(|m| m.split(',').into_iter().map(|s| s.trim()).collect()); - let skip_tags: Option> = skip_tags_option.map(|m| m.split(',').into_iter().map(|s| s.trim()).collect()); + let tags: Option> = tags_option.map(|m| m.split(',').map(|s| s.trim()).collect()); + let skip_tags: Option> = skip_tags_option.map(|m| m.split(',').map(|s| s.trim()).collect()); if let (Some(t), Some(s)) = (&tags, &skip_tags) { if !t.is_disjoint(s) { From 1ff56ea6232f6ad920f4b5e8cd06d7a0e399304a Mon Sep 17 00:00:00 2001 From: hypr2771 Date: Wed, 26 Apr 2023 00:51:54 +0200 Subject: [PATCH 34/64] fix: Allow `$` prefixed key during interpollation --- src/interpolator.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/interpolator.rs b/src/interpolator.rs index 09cf236..f9f6ddd 100644 --- a/src/interpolator.rs +++ b/src/interpolator.rs @@ -10,7 +10,7 @@ static INTERPOLATION_SUFFIX: &str = "}}"; lazy_static! { pub static ref INTERPOLATION_REGEX: Regex = { - let regexp = format!("{}{}{}", regex::escape(INTERPOLATION_PREFIX), r" *([a-zA-Z]+[a-zA-Z\-\._0-9\[\]]*) *", regex::escape(INTERPOLATION_SUFFIX)); + let regexp = format!("{}{}{}", regex::escape(INTERPOLATION_PREFIX), r" *([a-zA-Z]+[a-zA-Z\-\._\$0-9\[\]]*) *", regex::escape(INTERPOLATION_SUFFIX)); Regex::new(regexp.as_str()).unwrap() }; @@ -107,7 +107,7 @@ mod tests { context.insert(String::from("Array"), json!(["a", "b", "c"])); context.insert(String::from("Object"), json!({"this": "that"})); context.insert(String::from("Nested"), json!({"this": {"that": {"those": [{"wow": 1}, {"so": 2}, {"deee": {"eeee": "eeep"}}]}}})); - context.insert(String::from("ArrayNested"), json!([{"a": [{}, {"aa": 2, "aaa": [{"aaaa": 123 }]}]}])); + context.insert(String::from("ArrayNested"), json!([{"a": [{}, {"aa": 2, "aaa": [{"aaaa": 123, "$aaaa": "$123"}]}]}])); let interpolator = Interpolator::new(&context); @@ -119,6 +119,7 @@ mod tests { assert_eq!(interpolator.resolve("{{ Object }}", true), "{\"this\":\"that\"}".to_string()); assert_eq!(interpolator.resolve("{{ Nested.this.that.those[2].deee.eeee }}", true), "eeep".to_string()); assert_eq!(interpolator.resolve("{{ ArrayNested[0].a[1].aaa[0].aaaa }}", true), "123".to_string()); + assert_eq!(interpolator.resolve("{{ ArrayNested[0].a[1].aaa[0].$aaaa }}", true), "$123".to_string()); } #[test] From dfd5548c8d4269d5fa8b73e81d616572e9a9d445 Mon Sep 17 00:00:00 2001 From: Renee Gyllensvaan Date: Tue, 9 May 2023 15:39:00 +0000 Subject: [PATCH 35/64] Don't overwrite old cookies on Set-Cookie When handling Set-Cookie headers, each request would previously replace the entire `context->"cookie"` object. This would cause consecutive responses with Set-Cookie headers to overwrite all existing cookies in the context. --- src/actions/request.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/actions/request.rs b/src/actions/request.rs index e81f427..b7bb270 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -284,14 +284,9 @@ impl Runnable for Request { status, }); - if response.cookies().count() > 0 { - let mut cookies = Map::new(); - - for cookie in response.cookies() { - cookies.insert(cookie.name().to_string(), json!(cookie.value().to_string())); - } - - context.insert("cookies".to_string(), json!(cookies)); + for cookie in response.cookies() { + let cookies = context.entry("cookies").or_insert_with(|| json!({})).as_object_mut().unwrap(); + cookies.insert(cookie.name().to_string(), json!(cookie.value().to_string())); } let data = if let Some(ref key) = self.assign { From 753e9a6a78f798d68c8a9346c5f1e3813afaa159 Mon Sep 17 00:00:00 2001 From: Daniel Haarhoff Date: Mon, 6 Mar 2023 08:12:17 +0000 Subject: [PATCH 36/64] Write failing test for pick on with_items_range --- src/expandable/multi_iter_request.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/expandable/multi_iter_request.rs b/src/expandable/multi_iter_request.rs index 4e2f345..46d8de5 100644 --- a/src/expandable/multi_iter_request.rs +++ b/src/expandable/multi_iter_request.rs @@ -80,6 +80,20 @@ mod tests { assert_eq!(benchmark.len(), 10); } + #[test] + #[should_panic] + fn expand_multi_range_should_limit_requests_using_the_pick_option() { + let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 3\nwith_items_range:\n start: 2\n step: 2\n stop: 20"; + let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let doc = &docs[0]; + let mut benchmark: Benchmark = Benchmark::new(); + + expand(doc, &mut benchmark); + + assert!(is_that_you(doc)); + assert_eq!(benchmark.len(), 3); + } + #[test] #[should_panic] fn invalid_expand() { From 4dd9fd5398fdd1177f44340ded7a416e02fdc980 Mon Sep 17 00:00:00 2001 From: Daniel Haarhoff Date: Mon, 6 Mar 2023 08:24:56 +0000 Subject: [PATCH 37/64] with_items_range respects pick --- src/expandable/multi_iter_request.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/expandable/multi_iter_request.rs b/src/expandable/multi_iter_request.rs index 46d8de5..8d3a565 100644 --- a/src/expandable/multi_iter_request.rs +++ b/src/expandable/multi_iter_request.rs @@ -1,3 +1,5 @@ +use std::convert::TryInto; + use rand::seq::SliceRandom; use rand::thread_rng; use yaml_rust::Yaml; @@ -54,6 +56,10 @@ pub fn expand(item: &Yaml, benchmark: &mut Benchmark) { } } + if let Some(pick) = item["pick"].as_i64() { + with_items.truncate(pick.try_into().expect("pick can't be larger than size of range")) + } + for (index, value) in with_items.iter().enumerate() { let index = index as u32; @@ -81,7 +87,6 @@ mod tests { } #[test] - #[should_panic] fn expand_multi_range_should_limit_requests_using_the_pick_option() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 3\nwith_items_range:\n start: 2\n step: 2\n stop: 20"; let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); From da4bd88ce194aeac66cef7788e0bedf34e9c16e9 Mon Sep 17 00:00:00 2001 From: Daniel Haarhoff Date: Tue, 21 Mar 2023 08:55:22 +0000 Subject: [PATCH 38/64] Extend documentation to better explain usage of with_items_range, shuffle, pick --- README.md | 9 +++++++++ SYNTAX.md | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a5542d2..1b5b2f2 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,15 @@ plan: - 75 shuffle: true pick: 1 + + - name: Three requests with random items from a range + request: + url: /api/users/{{ item }} + with_items_range: + start: 1 + stop: 1000 + shuffle: true + pick: 3 ``` As you can see, you can play with interpolations in different ways. This diff --git a/SYNTAX.md b/SYNTAX.md index a375a67..353d645 100644 --- a/SYNTAX.md +++ b/SYNTAX.md @@ -46,8 +46,10 @@ All those three items can be combined with `name` property to be show in logs. - `method`: HTTP method in the requests. Valid methods are GET, POST, PUT, PATCH, HEAD or DELETE. (default: GET) - `body`: Request body for methods like POST, PUT or PATCH. - `with_items`: List of items to be interpolated in the given request url. -- `with_items_range`: Generates items from an iterator from start, step, stop. +- `with_items_range`: Generates items from an iterator from start, step (optional, default: 1), stop. - `with_items_from_csv`: Read the given CSV values and go through all of them as items. +- `shuffle`: Shuffle given items randomly (default: false). +- `pick`: Number of items to pick and perform requests with. - `assign`: Save the response in the context to be interpolated later. - `tags`: List of tags for that item. From 7f26be2e670d8368e4721ac5ea22be459d487c97 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 09:35:33 +0100 Subject: [PATCH 39/64] Update rust syntax --- src/benchmark.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/benchmark.rs b/src/benchmark.rs index bdc88b7..b1005cf 100644 --- a/src/benchmark.rs +++ b/src/benchmark.rs @@ -17,7 +17,7 @@ use reqwest::Client; use colored::*; -pub type Benchmark = Vec>; +pub type Benchmark = Vec>; pub type Context = Map; pub type Reports = Vec; pub type PoolStore = HashMap; From 4a2a28c1f68382c5c916d5a16faf6fa40038bfaa Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 09:37:20 +0100 Subject: [PATCH 40/64] Update dependencies --- Cargo.lock | 1457 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 975 insertions(+), 482 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c685e5..53eab8b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,18 +1,18 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" dependencies = [ "memchr", ] @@ -28,9 +28,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.60" +version = "0.1.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" +checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" dependencies = [ "proc-macro2", "quote", @@ -43,22 +43,22 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bitflags" @@ -67,46 +67,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bstr" -version = "0.2.17" +name = "bitflags" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.3.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "cc" -version = "1.0.78" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" +dependencies = [ + "find-msvc-tools", + "shlex", +] [[package]] name = "cfg-if" -version = "1.0.0" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "clap" @@ -116,7 +114,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim", "textwrap", "unicode-width", @@ -125,20 +123,19 @@ dependencies = [ [[package]] name = "colored" -version = "2.0.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ - "atty", "lazy_static", - "winapi", + "windows-sys 0.59.0", ] [[package]] name = "cookie" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "percent-encoding", "time", @@ -147,15 +144,16 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.16.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" dependencies = [ "cookie", - "idna 0.2.3", + "idna 0.3.0", "log", "publicsuffix", "serde", + "serde_derive", "serde_json", "time", "url", @@ -163,9 +161,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -173,65 +171,80 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "csv" -version = "1.1.6" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", - "serde", + "serde_core", ] [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" dependencies = [ "memchr", ] [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "deranged" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "drill" @@ -259,18 +272,18 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "enum-as-inner" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ "heck", "proc-macro2", @@ -279,19 +292,38 @@ dependencies = [ ] [[package]] -name = "fastrand" -version = "1.8.0" +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "instant", + "libc", + "windows-sys 0.61.2", ] +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "find-msvc-tools" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" + [[package]] name = "flate2" -version = "1.0.25" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" dependencies = [ "crc32fast", "miniz_oxide", @@ -320,18 +352,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -344,9 +376,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -354,15 +386,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -371,15 +403,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -388,21 +420,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -418,20 +450,32 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + [[package]] name = "h2" -version = "0.3.15" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" dependencies = [ "bytes", "fnv", @@ -448,15 +492,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ "base64", "byteorder", @@ -468,9 +512,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -482,32 +526,72 @@ dependencies = [ ] [[package]] -name = "hostname" -version = "0.3.1" +name = "hermit-abi" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" + +[[package]] +name = "hickory-proto" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" dependencies = [ - "libc", - "match_cfg", - "winapi", + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 1.1.0", + "ipnet", + "once_cell", + "rand", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", ] [[package]] name = "http" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", - "itoa 1.0.5", + "itoa", ] [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -516,21 +600,21 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -541,9 +625,9 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.5", + "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -564,14 +648,84 @@ dependencies = [ ] [[package]] -name = "idna" -version = "0.2.3" +name = "icu_collections" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", ] [[package]] @@ -585,74 +739,81 @@ dependencies = [ ] [[package]] -name = "indexmap" -version = "1.9.2" +name = "idna" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ - "autocfg", - "hashbrown", + "idna_adapter", + "smallvec", + "utf8_iter", ] [[package]] -name = "instant" -version = "0.1.12" +name = "idna_adapter" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ - "cfg-if", + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +dependencies = [ + "equivalent", + "hashbrown", ] [[package]] name = "ipconfig" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.10", "widestring", - "winapi", + "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" - -[[package]] -name = "itoa" -version = "0.4.8" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ + "once_cell", "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.138" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "linked-hash-map" @@ -660,24 +821,32 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] [[package]] name = "log" -version = "0.4.17" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "lru-cache" @@ -688,29 +857,17 @@ dependencies = [ "linked-hash-map", ] -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -720,32 +877,31 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" dependencies = [ - "adler", + "adler2", + "simd-adler32", ] [[package]] name = "mio" -version = "0.8.5" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", - "log", "wasi", - "windows-sys 0.42.0", + "windows-sys 0.61.2", ] [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -759,46 +915,52 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" dependencies = [ - "hermit-abi", + "hermit-abi 0.5.2", "libc", ] [[package]] name = "once_cell" -version = "1.16.0" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "openssl" -version = "0.10.44" +version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d971fd5722fec23977260f6e81aa67d2f22cadbdc2aa049f1022d9a3be1566" +checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -809,9 +971,9 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", @@ -820,26 +982,25 @@ dependencies = [ [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "openssl-src" -version = "111.24.0+1.1.1s" +version = "300.5.4+3.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3498f259dab01178c6228c6b00dcef0ed2a2d5e20d648c017861227773ea4abd" +checksum = "a507b3792995dae9b0df8a1c1e3771e8418b7c2d9f0baeba32e6fe8b06c7cb72" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.79" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5454462c0eced1e97f2ec09036abc8da362e66802f66fd20f86854d9d8cbcbc4" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", @@ -849,9 +1010,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -859,28 +1020,28 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.5" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-link", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -890,27 +1051,39 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] -name = "ppv-lite86" -version = "0.2.17" +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "proc-macro-hack" -version = "0.5.19" +name = "ppv-lite86" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro2" -version = "1.0.48" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" +checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" dependencies = [ "unicode-ident", ] @@ -923,29 +1096,29 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "publicsuffix" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" dependencies = [ - "idna 0.3.0", + "idna 1.1.0", "psl-types", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" -version = "1.0.22" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" +checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.8.5" @@ -973,55 +1146,52 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", ] [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags", + "bitflags 2.10.0", ] [[package]] name = "regex" -version = "1.7.0" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", + "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] name = "regex-syntax" -version = "0.6.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.11.13" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64", "bytes", @@ -1031,6 +1201,7 @@ dependencies = [ "futures-core", "futures-util", "h2", + "hickory-resolver", "http", "http-body", "hyper", @@ -1043,14 +1214,15 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "proc-macro-hack", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", - "trust-dns-resolver", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1060,43 +1232,66 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.0" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" + +[[package]] +name = "rustix" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" +dependencies = [ + "bitflags 2.10.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "hostname", - "quick-error", + "base64", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys 0.61.2", ] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.7.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags", + "bitflags 2.10.0", "core-foundation", "core-foundation-sys", "libc", @@ -1105,9 +1300,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" dependencies = [ "core-foundation-sys", "libc", @@ -1115,18 +1310,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.151" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.151" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -1135,13 +1340,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.90" +version = "1.0.148" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf" +checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" dependencies = [ - "itoa 1.0.5", - "ryu", + "itoa", + "memchr", "serde", + "serde_core", + "zmij", ] [[package]] @@ -1151,36 +1358,61 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.5", + "itoa", "ryu", "serde", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" + [[package]] name = "slab" -version = "0.4.7" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "smallvec" -version = "1.10.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "socket2" -version = "0.4.7" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" dependencies = [ "libc", - "winapi", + "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "strsim" version = "0.8.0" @@ -1189,27 +1421,64 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.106" +version = "2.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" +checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" -version = "3.3.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ - "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", ] [[package]] @@ -1223,18 +1492,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -1243,11 +1512,14 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ - "itoa 1.0.5", + "deranged", + "itoa", + "num-conv", + "powerfmt", "serde", "time-core", "time-macros", @@ -1255,56 +1527,64 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3" dependencies = [ + "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.23.0" +version = "1.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" dependencies = [ - "autocfg", "bytes", "libc", - "memchr", "mio", - "num_cpus", "pin-project-lite", - "socket2", - "windows-sys 0.42.0", + "socket2 0.6.1", + "windows-sys 0.61.2", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -1312,31 +1592,29 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1344,9 +1622,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", @@ -1355,102 +1633,64 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", ] -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "lru-cache", - "parking_lot", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", - "trust-dns-proto", -] - [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "url" -version = "2.3.1" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 1.1.0", "percent-encoding", + "serde", ] +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "vcpkg" version = "0.2.15" @@ -1465,68 +1705,65 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] [[package]] name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +version = "0.11.1+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] -name = "wasm-bindgen" -version = "0.2.83" +name = "wasip2" +version = "1.0.1+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" dependencies = [ - "cfg-if", - "wasm-bindgen-macro", + "wit-bindgen", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.83" +name = "wasm-bindgen" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ - "bumpalo", - "log", + "cfg-if", "once_cell", - "proc-macro2", - "quote", - "syn", + "rustversion", + "wasm-bindgen-macro", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1534,28 +1771,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -1563,9 +1803,9 @@ dependencies = [ [[package]] name = "widestring" -version = "0.5.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" +checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" [[package]] name = "winapi" @@ -1589,115 +1829,265 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + [[package]] name = "yaml-rust" version = "0.4.5" @@ -1706,3 +2096,106 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d6085d62852e35540689d1f97ad663e3971fc19cf5eceab364d62c646ea167" From ac76e25da79aac1e785b28e40b226fb9bf0a6c13 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 09:50:39 +0100 Subject: [PATCH 41/64] Upgrade rust editon --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 7263a5c..858470f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ description = "Drill is a HTTP load testing application written in Rust inspired repository = "https://github.com/fcsonline/drill" keywords = ["performance", "http", "ansible", "jmeter"] license = "GPL-3.0" -edition = "2018" +edition = "2021" [dependencies] clap = "2.32.0" From 3845abfae211e642c0f7add4b947458288c41541 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 10:35:51 +0100 Subject: [PATCH 42/64] Replace yaml-rust with serde_yaml --- Cargo.lock | 30 ++++++--- Cargo.toml | 2 +- src/actions/assert.rs | 13 ++-- src/actions/assign.rs | 13 ++-- src/actions/delay.rs | 11 ++-- src/actions/exec.rs | 11 ++-- src/actions/mod.rs | 18 +++--- src/actions/request.rs | 80 ++++++++++++++---------- src/checker.rs | 28 ++------- src/config.rs | 20 +++--- src/expandable/include.rs | 18 +++--- src/expandable/mod.rs | 22 +++---- src/expandable/multi_csv_request.rs | 27 ++++---- src/expandable/multi_file_request.rs | 18 +++--- src/expandable/multi_iter_request.rs | 38 ++++++------ src/expandable/multi_request.rs | 20 +++--- src/reader.rs | 92 +++++++++++++++++++++++----- src/tags.rs | 24 ++++---- 18 files changed, 274 insertions(+), 211 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 53eab8b..16154ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -265,9 +265,9 @@ dependencies = [ "reqwest", "serde", "serde_json", + "serde_yaml", "tokio", "url", - "yaml-rust", ] [[package]] @@ -1363,6 +1363,19 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + [[package]] name = "shlex" version = "1.3.0" @@ -1673,6 +1686,12 @@ version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "url" version = "2.5.7" @@ -2088,15 +2107,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "yoke" version = "0.8.1" diff --git a/Cargo.toml b/Cargo.toml index 858470f..b196871 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ csv = "1.0.5" regex = "1.5.5" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.39" -yaml-rust = "0.4.3" +serde_yaml = "0.9" url = "2.1.1" linked-hash-map = "0.5.3" tokio = { version = "1.19.2", features = ["time", "net"] } diff --git a/src/actions/assert.rs b/src/actions/assert.rs index 584a62e..440ff03 100644 --- a/src/actions/assert.rs +++ b/src/actions/assert.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use colored::*; use serde_json::json; -use yaml_rust::Yaml; +use serde_yaml::Value; use crate::actions::extract; use crate::actions::Runnable; @@ -17,14 +17,15 @@ pub struct Assert { } impl Assert { - pub fn is_that_you(item: &Yaml) -> bool { - item["assert"].as_hash().is_some() + pub fn is_that_you(item: &Value) -> bool { + item.get("assert").and_then(|v| v.as_mapping()).is_some() } - pub fn new(item: &Yaml, _with_item: Option) -> Assert { + pub fn new(item: &Value, _with_item: Option) -> Assert { let name = extract(item, "name"); - let key = extract(&item["assert"], "key"); - let value = extract(&item["assert"], "value"); + let assert_val = item.get("assert").expect("assert field is required"); + let key = extract(assert_val, "key"); + let value = extract(assert_val, "value"); Assert { name, diff --git a/src/actions/assign.rs b/src/actions/assign.rs index 7588485..ea7c458 100644 --- a/src/actions/assign.rs +++ b/src/actions/assign.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use colored::*; use serde_json::json; -use yaml_rust::Yaml; +use serde_yaml::Value; use crate::actions::extract; use crate::actions::Runnable; @@ -16,14 +16,15 @@ pub struct Assign { } impl Assign { - pub fn is_that_you(item: &Yaml) -> bool { - item["assign"].as_hash().is_some() + pub fn is_that_you(item: &Value) -> bool { + item.get("assign").and_then(|v| v.as_mapping()).is_some() } - pub fn new(item: &Yaml, _with_item: Option) -> Assign { + pub fn new(item: &Value, _with_item: Option) -> Assign { let name = extract(item, "name"); - let key = extract(&item["assign"], "key"); - let value = extract(&item["assign"], "value"); + let assign_val = item.get("assign").expect("assign field is required"); + let key = extract(assign_val, "key"); + let value = extract(assign_val, "value"); Assign { name, diff --git a/src/actions/delay.rs b/src/actions/delay.rs index 0be6580..e5c372f 100644 --- a/src/actions/delay.rs +++ b/src/actions/delay.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use colored::*; use tokio::time::sleep; -use yaml_rust::Yaml; +use serde_yaml::Value; use crate::actions::extract; use crate::actions::Runnable; @@ -18,13 +18,14 @@ pub struct Delay { } impl Delay { - pub fn is_that_you(item: &Yaml) -> bool { - item["delay"].as_hash().is_some() + pub fn is_that_you(item: &Value) -> bool { + item.get("delay").and_then(|v| v.as_mapping()).is_some() } - pub fn new(item: &Yaml, _with_item: Option) -> Delay { + pub fn new(item: &Value, _with_item: Option) -> Delay { let name = extract(item, "name"); - let seconds = u64::try_from(item["delay"]["seconds"].as_i64().unwrap()).expect("Invalid number of seconds"); + let delay_val = item.get("delay").expect("delay field is required"); + let seconds = u64::try_from(delay_val.get("seconds").and_then(|v| v.as_i64()).expect("Invalid number of seconds")).expect("Invalid number of seconds"); Delay { name, diff --git a/src/actions/exec.rs b/src/actions/exec.rs index 2c32e03..bf107f7 100644 --- a/src/actions/exec.rs +++ b/src/actions/exec.rs @@ -2,7 +2,7 @@ use async_trait::async_trait; use colored::*; use serde_json::json; use std::process::Command; -use yaml_rust::Yaml; +use serde_yaml::Value; use crate::actions::Runnable; use crate::actions::{extract, extract_optional}; @@ -18,13 +18,14 @@ pub struct Exec { } impl Exec { - pub fn is_that_you(item: &Yaml) -> bool { - item["exec"].as_hash().is_some() + pub fn is_that_you(item: &Value) -> bool { + item.get("exec").and_then(|v| v.as_mapping()).is_some() } - pub fn new(item: &Yaml, _with_item: Option) -> Exec { + pub fn new(item: &Value, _with_item: Option) -> Exec { let name = extract(item, "name"); - let command = extract(&item["exec"], "command"); + let exec_val = item.get("exec").expect("exec field is required"); + let command = extract(exec_val, "command"); let assign = extract_optional(item, "assign"); Exec { diff --git a/src/actions/mod.rs b/src/actions/mod.rs index 46c9d9e..14a661c 100644 --- a/src/actions/mod.rs +++ b/src/actions/mod.rs @@ -1,5 +1,5 @@ use async_trait::async_trait; -use yaml_rust::Yaml; +use serde_yaml::Value; mod assert; mod assign; @@ -42,24 +42,24 @@ impl fmt::Display for Report { } } -pub fn extract_optional<'a>(item: &'a Yaml, attr: &'a str) -> Option { - if let Some(s) = item[attr].as_str() { +pub fn extract_optional<'a>(item: &'a Value, attr: &'a str) -> Option { + if let Some(s) = item.get(attr).and_then(|v| v.as_str()) { Some(s.to_string()) - } else if item[attr].as_hash().is_some() { + } else if item.get(attr).and_then(|v| v.as_mapping()).is_some() { panic!("`{}` needs to be a string. Try adding quotes", attr); } else { None } } -pub fn extract<'a>(item: &'a Yaml, attr: &'a str) -> String { - if let Some(s) = item[attr].as_i64() { +pub fn extract<'a>(item: &'a Value, attr: &'a str) -> String { + if let Some(s) = item.get(attr).and_then(|v| v.as_i64()) { s.to_string() - } else if let Some(s) = item[attr].as_str() { + } else if let Some(s) = item.get(attr).and_then(|v| v.as_str()) { s.to_string() - } else if item[attr].as_hash().is_some() { + } else if item.get(attr).and_then(|v| v.as_mapping()).is_some() { panic!("`{}` is required needs to be a string. Try adding quotes", attr); } else { - panic!("Unknown node `{}` => {:?}", attr, item[attr]); + panic!("Unknown node `{}` => {:?}", attr, item.get(attr)); } } diff --git a/src/actions/request.rs b/src/actions/request.rs index b7bb270..be20abe 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -9,7 +9,7 @@ use reqwest::{ }; use std::fmt::Write; use url::Url; -use yaml_rust::Yaml; +use serde_yaml::Value as YamlValue; use serde::{Deserialize, Serialize}; use serde_json::{json, Map, Value}; @@ -32,7 +32,7 @@ pub struct Request { method: String, headers: HashMap, pub body: Option, - pub with_item: Option, + pub with_item: Option, pub index: Option, pub assign: Option, } @@ -45,16 +45,17 @@ struct AssignedRequest { } impl Request { - pub fn is_that_you(item: &Yaml) -> bool { - item["request"].as_hash().is_some() + pub fn is_that_you(item: &YamlValue) -> bool { + item.get("request").and_then(|v| v.as_mapping()).is_some() } - pub fn new(item: &Yaml, with_item: Option, index: Option) -> Request { + pub fn new(item: &YamlValue, with_item: Option, index: Option) -> Request { let name = extract(item, "name"); - let url = extract(&item["request"], "url"); + let request_val = item.get("request").expect("request field is required"); + let url = extract(request_val, "url"); let assign = extract_optional(item, "assign"); - let method = if let Some(v) = extract_optional(&item["request"], "method") { + let method = if let Some(v) = extract_optional(request_val, "method") { v.to_uppercase() } else { "GET".to_string() @@ -62,17 +63,21 @@ impl Request { let body_verbs = vec!["POST", "PATCH", "PUT"]; let body = if body_verbs.contains(&method.as_str()) { - Some(extract(&item["request"], "body")) + Some(extract(request_val, "body")) } else { None }; let mut headers = HashMap::new(); - if let Some(hash) = item["request"]["headers"].as_hash() { - for (key, val) in hash.iter() { + if let Some(mapping) = request_val.get("headers").and_then(|v| v.as_mapping()) { + for (key, val) in mapping.iter() { if let Some(vs) = val.as_str() { - headers.insert(key.as_str().unwrap().to_string(), vs.to_string()); + if let Some(key_str) = key.as_str() { + headers.insert(key_str.to_string(), vs.to_string()); + } else { + panic!("{} Header keys must be strings!!", "WARNING!".yellow().bold()); + } } else { panic!("{} Headers must be strings!!", "WARNING!".yellow().bold()); } @@ -222,31 +227,38 @@ impl Request { } } -fn yaml_to_json(data: Yaml) -> Value { - if let Some(b) = data.as_bool() { - json!(b) - } else if let Some(i) = data.as_i64() { - json!(i) - } else if let Some(s) = data.as_str() { - json!(s) - } else if let Some(h) = data.as_hash() { - let mut map = Map::new(); - - for (key, value) in h.iter() { - map.entry(key.as_str().unwrap()).or_insert(yaml_to_json(value.clone())); +fn yaml_to_json(data: YamlValue) -> Value { + match data { + YamlValue::Bool(b) => json!(b), + YamlValue::Number(n) => { + if let Some(i) = n.as_i64() { + json!(i) + } else if let Some(f) = n.as_f64() { + json!(f) + } else { + // Fallback: convert to string representation + json!(n.to_string()) + } } - - json!(map) - } else if let Some(v) = data.as_vec() { - let mut array = Vec::new(); - - for value in v.iter() { - array.push(yaml_to_json(value.clone())); + YamlValue::String(s) => json!(s), + YamlValue::Mapping(m) => { + let mut map = Map::new(); + for (key, value) in m.iter() { + if let Some(key_str) = key.as_str() { + map.insert(key_str.to_string(), yaml_to_json(value.clone())); + } + } + json!(map) } - - json!(array) - } else { - panic!("Unknown Yaml node") + YamlValue::Sequence(v) => { + let mut array = Vec::new(); + for value in v.iter() { + array.push(yaml_to_json(value.clone())); + } + json!(array) + } + YamlValue::Null => json!(null), + _ => panic!("Unknown Yaml node") } } diff --git a/src/checker.rs b/src/checker.rs index 66216ce..af6136f 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -1,11 +1,7 @@ -use std::fs::File; -use std::io::prelude::*; -use std::path::Path; - use colored::*; -use yaml_rust::YamlLoader; use crate::actions::Report; +use crate::reader; pub fn compare(list_reports: &[Vec], filepath: &str, threshold: &str) -> Result<(), i32> { let threshold_value = match threshold.parse::() { @@ -13,32 +9,16 @@ pub fn compare(list_reports: &[Vec], filepath: &str, threshold: &str) -> _ => panic!("arrrgh"), }; - // Create a path to the desired file - let path = Path::new(filepath); - let display = path.display(); - - // Open the path in read-only mode, returns `io::Result` - let mut file = match File::open(path) { - Err(why) => panic!("couldn't open {}: {}", display, why), - Ok(file) => file, - }; - - // Read the file contents into a string, returns `io::Result` - let mut content = String::new(); - if let Err(why) = file.read_to_string(&mut content) { - panic!("couldn't read {}: {}", display, why); - } - - let docs = YamlLoader::load_from_str(content.as_str()).unwrap(); + let docs = reader::read_file_as_yml(filepath); let doc = &docs[0]; - let items = doc.as_vec().unwrap(); + let items = doc.as_sequence().unwrap(); let mut slow_counter = 0; println!(); for report in list_reports { for (i, report_item) in report.iter().enumerate() { - let recorded_duration = items[i]["duration"].as_f64().unwrap(); + let recorded_duration = items[i].get("duration").and_then(|v| v.as_f64()).unwrap(); let delta_ms = report_item.duration - recorded_duration; if delta_ms > threshold_value { diff --git a/src/config.rs b/src/config.rs index baebd61..38cce2f 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,4 +1,4 @@ -use yaml_rust::{Yaml, YamlLoader}; +use serde_yaml::Value; use crate::benchmark::Context; use crate::interpolator; @@ -22,9 +22,7 @@ pub struct Config { impl Config { pub fn new(path: &str, relaxed_interpolations: bool, no_check_certificate: bool, quiet: bool, nanosec: bool, timeout: u64, verbose: bool) -> Config { - let config_file = reader::read_file(path); - - let config_docs = YamlLoader::load_from_str(config_file.as_str()).unwrap(); + let config_docs = reader::read_file_as_yml(path); let config_doc = &config_docs[0]; let context: Context = Context::new(); @@ -54,8 +52,8 @@ impl Config { } } -fn read_str_configuration(config_doc: &Yaml, interpolator: &interpolator::Interpolator, name: &str, default: &str) -> String { - match config_doc[name].as_str() { +fn read_str_configuration(config_doc: &Value, interpolator: &interpolator::Interpolator, name: &str, default: &str) -> String { + match config_doc.get(name).and_then(|v| v.as_str()) { Some(value) => { if value.contains('{') { interpolator.resolve(value, true) @@ -64,7 +62,7 @@ fn read_str_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp } } None => { - if config_doc[name].as_str().is_some() { + if config_doc.get(name).and_then(|v| v.as_str()).is_some() { println!("Invalid {name} value!"); } @@ -73,10 +71,10 @@ fn read_str_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp } } -fn read_i64_configuration(config_doc: &Yaml, interpolator: &interpolator::Interpolator, name: &str, default: i64) -> i64 { - let value = if let Some(value) = config_doc[name].as_i64() { +fn read_i64_configuration(config_doc: &Value, interpolator: &interpolator::Interpolator, name: &str, default: i64) -> i64 { + let value = if let Some(value) = config_doc.get(name).and_then(|v| v.as_i64()) { Some(value) - } else if let Some(key) = config_doc[name].as_str() { + } else if let Some(key) = config_doc.get(name).and_then(|v| v.as_str()) { interpolator.resolve(key, false).parse::().ok() } else { None @@ -93,7 +91,7 @@ fn read_i64_configuration(config_doc: &Yaml, interpolator: &interpolator::Interp } } None => { - if config_doc[name].as_str().is_some() { + if config_doc.get(name).and_then(|v| v.as_str()).is_some() { println!("Invalid {name} value!"); } diff --git a/src/expandable/include.rs b/src/expandable/include.rs index e288283..9092218 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -1,5 +1,5 @@ use std::path::Path; -use yaml_rust::{Yaml, YamlEmitter}; +use serde_yaml::Value; use crate::interpolator::INTERPOLATION_REGEX; @@ -10,12 +10,12 @@ use crate::tags::Tags; use crate::reader; -pub fn is_that_you(item: &Yaml) -> bool { - item["include"].as_str().is_some() +pub fn is_that_you(item: &Value) -> bool { + item.get("include").and_then(|v| v.as_str()).is_some() } -pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark, tags: &Tags) { - let include_path = item["include"].as_str().unwrap(); +pub fn expand(parent_path: &str, item: &Value, benchmark: &mut Benchmark, tags: &Tags) { + let include_path = item.get("include").and_then(|v| v.as_str()).unwrap(); if INTERPOLATION_REGEX.is_match(include_path) { panic!("Interpolations not supported in 'include' property!"); @@ -61,9 +61,7 @@ pub fn expand_from_filepath(parent_path: &str, benchmark: &mut Benchmark, access } else if actions::Request::is_that_you(item) { benchmark.push(Box::new(actions::Request::new(item, None, None))); } else { - let mut out_str = String::new(); - let mut emitter = YamlEmitter::new(&mut out_str); - emitter.dump(item).unwrap(); + let out_str = serde_yaml::to_string(item).unwrap(); panic!("Unknown node:\n\n{}\n\n", out_str); } } @@ -78,7 +76,7 @@ mod tests { #[test] fn expand_include() { let text = "---\nname: Include comment\ninclude: comments.yml"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -92,7 +90,7 @@ mod tests { #[should_panic] fn invalid_expand() { let text = "---\nname: Include comment\ninclude: {{ memory }}.yml"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); diff --git a/src/expandable/mod.rs b/src/expandable/mod.rs index 927697a..139d86c 100644 --- a/src/expandable/mod.rs +++ b/src/expandable/mod.rs @@ -5,10 +5,10 @@ mod multi_file_request; mod multi_iter_request; mod multi_request; -use yaml_rust::Yaml; +use serde_yaml::Value; -pub fn pick(item: &Yaml, with_items: &[Yaml]) -> usize { - match item["pick"].as_i64() { +pub fn pick(item: &Value, with_items: &[Value]) -> usize { + match item.get("pick").and_then(|v| v.as_i64()) { Some(value) => { if value.is_negative() { panic!("pick option should not be negative, but was {}", value); @@ -32,8 +32,8 @@ mod tests { #[test] fn should_return_the_configured_value() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items:\n - 1\n - 2\n - 3"; - let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; - let pick = pick(item, item["with_items"].as_vec().unwrap()); + let item = &crate::reader::read_file_as_yml_from_str(text)[0]; + let pick = pick(item, item.get("with_items").and_then(|v| v.as_sequence()).unwrap()); assert_eq!(pick, 2); } @@ -41,8 +41,8 @@ mod tests { #[test] fn should_return_the_with_items_length_if_unset() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items:\n - 1\n - 2\n - 3"; - let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; - let pick = pick(item, item["with_items"].as_vec().unwrap()); + let item = &crate::reader::read_file_as_yml_from_str(text)[0]; + let pick = pick(item, item.get("with_items").and_then(|v| v.as_sequence()).unwrap()); assert_eq!(pick, 3); } @@ -51,16 +51,16 @@ mod tests { #[should_panic(expected = "pick option should not be negative, but was -1")] fn should_panic_for_negative_values() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: -1\nwith_items:\n - 1\n - 2\n - 3"; - let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; - pick(item, item["with_items"].as_vec().unwrap()); + let item = &crate::reader::read_file_as_yml_from_str(text)[0]; + pick(item, item.get("with_items").and_then(|v| v.as_sequence()).unwrap()); } #[test] #[should_panic(expected = "pick option should not be greater than the provided items, but was 4")] fn should_panic_for_values_greater_than_the_items_list() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 4\nwith_items:\n - 1\n - 2\n - 3"; - let item = &yaml_rust::YamlLoader::load_from_str(text).unwrap()[0]; - pick(item, item["with_items"].as_vec().unwrap()); + let item = &crate::reader::read_file_as_yml_from_str(text)[0]; + pick(item, item.get("with_items").and_then(|v| v.as_sequence()).unwrap()); } } } diff --git a/src/expandable/multi_csv_request.rs b/src/expandable/multi_csv_request.rs index cb1f8db..414d560 100644 --- a/src/expandable/multi_csv_request.rs +++ b/src/expandable/multi_csv_request.rs @@ -1,7 +1,7 @@ use rand::seq::SliceRandom; use rand::thread_rng; use std::path::Path; -use yaml_rust::Yaml; +use serde_yaml::Value; use super::pick; use crate::actions::Request; @@ -9,16 +9,17 @@ use crate::benchmark::Benchmark; use crate::interpolator::INTERPOLATION_REGEX; use crate::reader; -pub fn is_that_you(item: &Yaml) -> bool { - item["request"].as_hash().is_some() && (item["with_items_from_csv"].as_str().is_some() || item["with_items_from_csv"].as_hash().is_some()) +pub fn is_that_you(item: &Value) -> bool { + item.get("request").and_then(|v| v.as_mapping()).is_some() && (item.get("with_items_from_csv").and_then(|v| v.as_str()).is_some() || item.get("with_items_from_csv").and_then(|v| v.as_mapping()).is_some()) } -pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { - let (with_items_path, quote_char) = if let Some(with_items_path) = item["with_items_from_csv"].as_str() { +pub fn expand(parent_path: &str, item: &Value, benchmark: &mut Benchmark) { + let (with_items_path, quote_char) = if let Some(with_items_path) = item.get("with_items_from_csv").and_then(|v| v.as_str()) { (with_items_path, b'\"') - } else if let Some(_with_items_hash) = item["with_items_from_csv"].as_hash() { - let with_items_path = item["with_items_from_csv"]["file_name"].as_str().expect("Expected a file_name"); - let quote_char = item["with_items_from_csv"]["quote_char"].as_str().unwrap_or("\"").bytes().next().unwrap(); + } else if let Some(_with_items_hash) = item.get("with_items_from_csv").and_then(|v| v.as_mapping()) { + let csv_val = item.get("with_items_from_csv").unwrap(); + let with_items_path = csv_val.get("file_name").and_then(|v| v.as_str()).expect("Expected a file_name"); + let quote_char = csv_val.get("quote_char").and_then(|v| v.as_str()).unwrap_or("\"").bytes().next().unwrap(); (with_items_path, quote_char) } else { @@ -34,7 +35,7 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { let mut with_items_file = reader::read_csv_file_as_yml(final_path, quote_char); - if let Some(shuffle) = item["shuffle"].as_bool() { + if let Some(shuffle) = item.get("shuffle").and_then(|v| v.as_bool()) { if shuffle { let mut rng = thread_rng(); with_items_file.shuffle(&mut rng); @@ -56,7 +57,7 @@ mod tests { #[test] fn expand_multi() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item.id }}\nwith_items_from_csv: ./fixtures/users.csv"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -69,7 +70,7 @@ mod tests { #[test] fn expand_multi_should_limit_requests_using_the_pick_option() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items_from_csv: ./fixtures/users.csv"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -82,7 +83,7 @@ mod tests { #[test] fn expand_multi_should_work_with_pick_and_shuffle() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 1\nshuffle: true\nwith_items_from_csv: ./fixtures/users.csv"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -96,7 +97,7 @@ mod tests { #[should_panic] fn runtime_expand() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item.id }}\nwith_items_from_csv: ./fixtures/{{ memory }}.csv"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 08ce26b..4f19452 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -6,14 +6,14 @@ use crate::reader; use rand::seq::SliceRandom; use rand::thread_rng; use std::path::Path; -use yaml_rust::Yaml; +use serde_yaml::Value; -pub fn is_that_you(item: &Yaml) -> bool { - item["request"].as_hash().is_some() && (item["with_items_from_file"].as_str().is_some() || item["with_items_from_file"].as_hash().is_some()) +pub fn is_that_you(item: &Value) -> bool { + item.get("request").and_then(|v| v.as_mapping()).is_some() && (item.get("with_items_from_file").and_then(|v| v.as_str()).is_some() || item.get("with_items_from_file").and_then(|v| v.as_mapping()).is_some()) } -pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { - let with_items_path = if let Some(with_items_path) = item["with_items_from_file"].as_str() { +pub fn expand(parent_path: &str, item: &Value, benchmark: &mut Benchmark) { + let with_items_path = if let Some(with_items_path) = item.get("with_items_from_file").and_then(|v| v.as_str()) { with_items_path } else { unreachable!(); @@ -28,7 +28,7 @@ pub fn expand(parent_path: &str, item: &Yaml, benchmark: &mut Benchmark) { let mut with_items_file = reader::read_file_as_yml_array(final_path); - if let Some(shuffle) = item["shuffle"].as_bool() { + if let Some(shuffle) = item.get("shuffle").and_then(|v| v.as_bool()) { if shuffle { let mut rng = thread_rng(); with_items_file.shuffle(&mut rng); @@ -50,7 +50,7 @@ mod test { #[test] fn expand_multi() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item.id }}\nwith_items_from_file: ./fixtures/texts.txt"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -63,7 +63,7 @@ mod test { #[test] fn expand_multi_should_limit_requests_using_the_pick_option() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items_from_file: ./fixtures/texts.txt"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -76,7 +76,7 @@ mod test { #[test] fn expand_multi_should_work_with_pick_and_shuffle() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 1\nshuffle: true\nwith_items_from_file: ./fixtures/texts.txt"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); diff --git a/src/expandable/multi_iter_request.rs b/src/expandable/multi_iter_request.rs index 8d3a565..5457195 100644 --- a/src/expandable/multi_iter_request.rs +++ b/src/expandable/multi_iter_request.rs @@ -2,27 +2,27 @@ use std::convert::TryInto; use rand::seq::SliceRandom; use rand::thread_rng; -use yaml_rust::Yaml; +use serde_yaml::{Value, Number}; use crate::interpolator::INTERPOLATION_REGEX; use crate::actions::Request; use crate::benchmark::Benchmark; -pub fn is_that_you(item: &Yaml) -> bool { - item["request"].as_hash().is_some() && item["with_items_range"].as_hash().is_some() +pub fn is_that_you(item: &Value) -> bool { + item.get("request").and_then(|v| v.as_mapping()).is_some() && item.get("with_items_range").and_then(|v| v.as_mapping()).is_some() } -pub fn expand(item: &Yaml, benchmark: &mut Benchmark) { - if let Some(with_iter_items) = item["with_items_range"].as_hash() { - let init = Yaml::Integer(1); - let lstart = Yaml::String("start".into()); - let lstep = Yaml::String("step".into()); - let lstop = Yaml::String("stop".into()); +pub fn expand(item: &Value, benchmark: &mut Benchmark) { + if let Some(with_iter_items) = item.get("with_items_range").and_then(|v| v.as_mapping()) { + let lstart = Value::String("start".into()); + let lstep = Value::String("step".into()); + let lstop = Value::String("stop".into()); - let vstart: &Yaml = with_iter_items.get(&lstart).expect("Start property is mandatory"); - let vstep: &Yaml = with_iter_items.get(&lstep).unwrap_or(&init); - let vstop: &Yaml = with_iter_items.get(&lstop).expect("Stop property is mandatory"); + let vstart = with_iter_items.get(&lstart).expect("Start property is mandatory"); + let default_step = Value::Number(Number::from(1)); + let vstep = with_iter_items.get(&lstep).unwrap_or(&default_step); + let vstop = with_iter_items.get(&lstop).expect("Stop property is mandatory"); let start: &str = vstart.as_str().unwrap_or(""); let step: &str = vstep.as_str().unwrap_or(""); @@ -49,21 +49,21 @@ pub fn expand(item: &Yaml, benchmark: &mut Benchmark) { if stop > start && start > 0 { let mut with_items: Vec = (start..stop).step_by(step as usize).collect(); - if let Some(shuffle) = item["shuffle"].as_bool() { + if let Some(shuffle) = item.get("shuffle").and_then(|v| v.as_bool()) { if shuffle { let mut rng = thread_rng(); with_items.shuffle(&mut rng); } } - if let Some(pick) = item["pick"].as_i64() { + if let Some(pick) = item.get("pick").and_then(|v| v.as_i64()) { with_items.truncate(pick.try_into().expect("pick can't be larger than size of range")) } for (index, value) in with_items.iter().enumerate() { let index = index as u32; - benchmark.push(Box::new(Request::new(item, Some(Yaml::Integer(*value)), Some(index)))); + benchmark.push(Box::new(Request::new(item, Some(Value::Number(Number::from(*value))), Some(index)))); } } } @@ -76,7 +76,7 @@ mod tests { #[test] fn expand_multi_range() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items_range:\n start: 2\n step: 2\n stop: 20"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -89,7 +89,7 @@ mod tests { #[test] fn expand_multi_range_should_limit_requests_using_the_pick_option() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 3\nwith_items_range:\n start: 2\n step: 2\n stop: 20"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -103,7 +103,7 @@ mod tests { #[should_panic] fn invalid_expand() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items_range:\n start: 1\n step: 2\n stop: foo"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -114,7 +114,7 @@ mod tests { #[should_panic] fn runtime_expand() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items_range:\n start: 1\n step: 2\n stop: \"{{ memory }}\""; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); diff --git a/src/expandable/multi_request.rs b/src/expandable/multi_request.rs index ddf413b..4824f8f 100644 --- a/src/expandable/multi_request.rs +++ b/src/expandable/multi_request.rs @@ -1,21 +1,21 @@ use rand::seq::SliceRandom; use rand::thread_rng; -use yaml_rust::Yaml; +use serde_yaml::Value; use super::pick; use crate::actions::Request; use crate::benchmark::Benchmark; use crate::interpolator::INTERPOLATION_REGEX; -pub fn is_that_you(item: &Yaml) -> bool { - item["request"].as_hash().is_some() && item["with_items"].as_vec().is_some() +pub fn is_that_you(item: &Value) -> bool { + item.get("request").and_then(|v| v.as_mapping()).is_some() && item.get("with_items").and_then(|v| v.as_sequence()).is_some() } -pub fn expand(item: &Yaml, benchmark: &mut Benchmark) { - if let Some(with_items) = item["with_items"].as_vec() { +pub fn expand(item: &Value, benchmark: &mut Benchmark) { + if let Some(with_items) = item.get("with_items").and_then(|v| v.as_sequence()) { let mut with_items_list = with_items.clone(); - if let Some(shuffle) = item["shuffle"].as_bool() { + if let Some(shuffle) = item.get("shuffle").and_then(|v| v.as_bool()) { if shuffle { let mut rng = thread_rng(); with_items_list.shuffle(&mut rng); @@ -44,7 +44,7 @@ mod tests { #[test] fn expand_multi() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items:\n - 1\n - 2\n - 3"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -57,7 +57,7 @@ mod tests { #[test] fn expand_multi_should_limit_requests_using_the_pick_option() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 2\nwith_items:\n - 1\n - 2\n - 3"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -70,7 +70,7 @@ mod tests { #[test] fn expand_multi_should_work_with_pick_and_shuffle() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\npick: 1\nshuffle: true\nwith_items:\n - 1\n - 2\n - 3"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); @@ -84,7 +84,7 @@ mod tests { #[should_panic] fn runtime_expand() { let text = "---\nname: foobar\nrequest:\n url: /api/{{ item }}\nwith_items:\n - 1\n - 2\n - foo{{ memory }}"; - let docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); + let docs = crate::reader::read_file_as_yml_from_str(text); let doc = &docs[0]; let mut benchmark: Benchmark = Benchmark::new(); diff --git a/src/reader.rs b/src/reader.rs index 38d335e..93ce8ba 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -1,6 +1,7 @@ use std::fs::File; use std::io::{prelude::*, BufReader}; use std::path::Path; +use serde_yaml::{Value, Mapping}; pub fn read_file(filepath: &str) -> String { // Create a path to the desired file @@ -22,14 +23,75 @@ pub fn read_file(filepath: &str) -> String { content } -pub fn read_file_as_yml(filepath: &str) -> Vec { +fn parse_yaml_content(content: &str) -> Vec { + // serde_yaml doesn't support multiple documents natively, so we split by "---\n" and parse each + let mut docs = Vec::new(); + let trimmed_content = content.trim(); + + // Handle multi-document YAML (separated by "---\n") + if trimmed_content.contains("\n---\n") || (trimmed_content.starts_with("---\n") && trimmed_content.matches("---\n").count() > 1) { + let parts: Vec<&str> = trimmed_content.split("---\n").collect(); + for doc_str in parts { + let trimmed = doc_str.trim(); + // Skip empty parts and parts that are only comments + if !trimmed.is_empty() && !trimmed.chars().all(|c| c == '#' || c.is_whitespace() || c == '\n') { + match serde_yaml::from_str::(trimmed) { + Ok(doc) => { + // Skip Null documents (which can result from comments-only content) + if !matches!(doc, Value::Null) { + docs.push(doc); + } + } + Err(e) => { + eprintln!("Error parsing YAML document: {}", e); + panic!("Failed to parse YAML: {}", e); + } + } + } + } + } + + // If no documents were found (empty file or no "---"), try parsing the whole content + if docs.is_empty() { + // Remove leading "---\n" if present for single-document files + let content_to_parse = if trimmed_content.starts_with("---\n") { + &trimmed_content[4..] + } else { + trimmed_content + }; + match serde_yaml::from_str::(content_to_parse.trim()) { + Ok(doc) => { + if !matches!(doc, Value::Null) { + docs.push(doc); + } + } + Err(e) => { + eprintln!("Error parsing YAML content: {}", e); + panic!("Failed to parse YAML: {}", e); + } + } + } + + // If still empty, return a single Null document to maintain compatibility + if docs.is_empty() { + docs.push(Value::Null); + } + + docs +} + +pub fn read_file_as_yml(filepath: &str) -> Vec { let content = read_file(filepath); - yaml_rust::YamlLoader::load_from_str(content.as_str()).unwrap() + parse_yaml_content(&content) +} + +pub fn read_file_as_yml_from_str(content: &str) -> Vec { + parse_yaml_content(content) } -pub fn read_yaml_doc_accessor<'a>(doc: &'a yaml_rust::Yaml, accessor: Option<&str>) -> &'a Vec { +pub fn read_yaml_doc_accessor<'a>(doc: &'a Value, accessor: Option<&str>) -> &'a Vec { if let Some(accessor_id) = accessor { - match doc[accessor_id].as_vec() { + match doc.get(accessor_id).and_then(|v| v.as_sequence()) { Some(items) => items, None => { println!("Node missing on config: {accessor_id}"); @@ -38,11 +100,11 @@ pub fn read_yaml_doc_accessor<'a>(doc: &'a yaml_rust::Yaml, accessor: Option<&st } } } else { - doc.as_vec().unwrap() + doc.as_sequence().expect(&format!("Expected document to be a sequence, got: {:?}", doc)) } } -pub fn read_file_as_yml_array(filepath: &str) -> yaml_rust::yaml::Array { +pub fn read_file_as_yml_array(filepath: &str) -> Vec { let path = Path::new(filepath); let display = path.display(); @@ -52,11 +114,11 @@ pub fn read_file_as_yml_array(filepath: &str) -> yaml_rust::yaml::Array { }; let reader = BufReader::new(file); - let mut items = yaml_rust::yaml::Array::new(); + let mut items = Vec::new(); for line in reader.lines() { match line { Ok(text) => { - items.push(yaml_rust::Yaml::String(text)); + items.push(Value::String(text)); } Err(e) => println!("error parsing line: {e:?}"), } @@ -66,7 +128,7 @@ pub fn read_file_as_yml_array(filepath: &str) -> yaml_rust::yaml::Array { } // TODO: Try to split this fn into two -pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> yaml_rust::yaml::Array { +pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> Vec { // Create a path to the desired file let path = Path::new(filepath); let display = path.display(); @@ -79,7 +141,7 @@ pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> yaml_rust::yaml::Array let mut rdr = csv::ReaderBuilder::new().has_headers(true).quote(quote).from_reader(file); - let mut items = yaml_rust::yaml::Array::new(); + let mut items = Vec::new(); let headers = match rdr.headers() { Err(why) => panic!("error parsing header: {:?}", why), @@ -89,16 +151,16 @@ pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> yaml_rust::yaml::Array for result in rdr.records() { match result { Ok(record) => { - let mut linked_hash_map = linked_hash_map::LinkedHashMap::new(); + let mut mapping = Mapping::new(); for (i, header) in headers.iter().enumerate() { - let item_key = yaml_rust::Yaml::String(header.to_string()); - let item_value = yaml_rust::Yaml::String(record.get(i).unwrap().to_string()); + let item_key = Value::String(header.to_string()); + let item_value = Value::String(record.get(i).unwrap().to_string()); - linked_hash_map.insert(item_key, item_value); + mapping.insert(item_key, item_value); } - items.push(yaml_rust::Yaml::Hash(linked_hash_map)); + items.push(Value::Mapping(mapping)); } Err(e) => println!("error parsing header: {e:?}"), } diff --git a/src/tags.rs b/src/tags.rs index 7fa269e..12bf6a7 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -1,7 +1,7 @@ use crate::reader; use colored::*; use std::collections::HashSet; -use yaml_rust::{Yaml, YamlEmitter}; +use serde_yaml::Value; #[derive(Debug)] pub struct Tags<'a> { @@ -26,10 +26,10 @@ impl<'a> Tags<'a> { } } - pub fn should_skip_item(&self, item: &Yaml) -> bool { - match item["tags"].as_vec() { + pub fn should_skip_item(&self, item: &Value) -> bool { + match item.get("tags").and_then(|v| v.as_sequence()) { Some(item_tags_raw) => { - let item_tags: HashSet<&str> = item_tags_raw.iter().map(|t| t.as_str().unwrap()).collect(); + let item_tags: HashSet<&str> = item_tags_raw.iter().filter_map(|t| t.as_str()).collect(); if let Some(s) = &self.skip_tags { if !s.is_disjoint(&item_tags) { return true; @@ -81,9 +81,7 @@ pub fn list_benchmark_file_tasks(benchmark_file: &str, tags: &Tags) { } for item in items { - let mut out_str = String::new(); - let mut emitter = YamlEmitter::new(&mut out_str); - emitter.dump(item).unwrap(); + let out_str = serde_yaml::to_string(item).unwrap(); println!("{out_str}"); } } @@ -100,8 +98,8 @@ pub fn list_benchmark_file_tags(benchmark_file: &str) { } let mut tags: HashSet<&str> = HashSet::new(); for item in items { - if let Some(item_tags_raw) = item["tags"].as_vec() { - tags.extend(item_tags_raw.iter().map(|t| t.as_str().unwrap())); + if let Some(item_tags_raw) = item.get("tags").and_then(|v| v.as_sequence()) { + tags.extend(item_tags_raw.iter().filter_map(|t| t.as_str())); } } @@ -114,12 +112,12 @@ pub fn list_benchmark_file_tags(benchmark_file: &str) { mod tests { use super::*; - fn str_to_yaml(text: &str) -> Yaml { - let mut docs = yaml_rust::YamlLoader::load_from_str(text).unwrap(); - docs.remove(0) + fn str_to_yaml(text: &str) -> Value { + let docs = crate::reader::read_file_as_yml_from_str(text); + docs[0].clone() } - fn prepare_default_item() -> Yaml { + fn prepare_default_item() -> Value { str_to_yaml("---\nname: foo\nrequest:\n url: /\ntags:\n - tag1\n - tag2") } From 9d7ebcf3d787d8a0eeb8436296912844edfd5061 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 10:43:46 +0100 Subject: [PATCH 43/64] Fix some clippy warnings --- src/actions/assert.rs | 2 +- src/actions/exec.rs | 2 +- src/actions/mod.rs | 4 ++-- src/actions/request.rs | 2 +- src/expandable/include.rs | 2 +- src/expandable/mod.rs | 4 ++-- src/reader.rs | 20 ++++++++++---------- src/writer.rs | 4 ++-- 8 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/actions/assert.rs b/src/actions/assert.rs index 440ff03..7cb3032 100644 --- a/src/actions/assert.rs +++ b/src/actions/assert.rs @@ -48,7 +48,7 @@ impl Runnable for Assert { let assertion = json!(self.value.to_owned()); if !stored.eq(&assertion) { - panic!("Assertion mismatched: {} != {}", stored, assertion); + panic!("Assertion mismatched: {stored} != {assertion}"); } } } diff --git a/src/actions/exec.rs b/src/actions/exec.rs index bf107f7..bdfb89d 100644 --- a/src/actions/exec.rs +++ b/src/actions/exec.rs @@ -45,7 +45,7 @@ impl Runnable for Exec { let final_command = interpolator::Interpolator::new(context).resolve(&self.command, !config.relaxed_interpolations); - let args = vec!["bash", "-c", "--", final_command.as_str()]; + let args = ["bash", "-c", "--", final_command.as_str()]; let execution = Command::new(args[0]).args(&args[1..]).output().expect("Couldn't run it"); diff --git a/src/actions/mod.rs b/src/actions/mod.rs index 14a661c..e3c142c 100644 --- a/src/actions/mod.rs +++ b/src/actions/mod.rs @@ -46,7 +46,7 @@ pub fn extract_optional<'a>(item: &'a Value, attr: &'a str) -> Option { if let Some(s) = item.get(attr).and_then(|v| v.as_str()) { Some(s.to_string()) } else if item.get(attr).and_then(|v| v.as_mapping()).is_some() { - panic!("`{}` needs to be a string. Try adding quotes", attr); + panic!("`{attr}` needs to be a string. Try adding quotes"); } else { None } @@ -58,7 +58,7 @@ pub fn extract<'a>(item: &'a Value, attr: &'a str) -> String { } else if let Some(s) = item.get(attr).and_then(|v| v.as_str()) { s.to_string() } else if item.get(attr).and_then(|v| v.as_mapping()).is_some() { - panic!("`{}` is required needs to be a string. Try adding quotes", attr); + panic!("`{attr}` is required needs to be a string. Try adding quotes"); } else { panic!("Unknown node `{}` => {:?}", attr, item.get(attr)); } diff --git a/src/actions/request.rs b/src/actions/request.rs index be20abe..ee95989 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -61,7 +61,7 @@ impl Request { "GET".to_string() }; - let body_verbs = vec!["POST", "PATCH", "PUT"]; + let body_verbs = ["POST", "PATCH", "PUT"]; let body = if body_verbs.contains(&method.as_str()) { Some(extract(request_val, "body")) } else { diff --git a/src/expandable/include.rs b/src/expandable/include.rs index 9092218..560ddc8 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -62,7 +62,7 @@ pub fn expand_from_filepath(parent_path: &str, benchmark: &mut Benchmark, access benchmark.push(Box::new(actions::Request::new(item, None, None))); } else { let out_str = serde_yaml::to_string(item).unwrap(); - panic!("Unknown node:\n\n{}\n\n", out_str); + panic!("Unknown node:\n\n{out_str}\n\n"); } } } diff --git a/src/expandable/mod.rs b/src/expandable/mod.rs index 139d86c..1b044b4 100644 --- a/src/expandable/mod.rs +++ b/src/expandable/mod.rs @@ -11,9 +11,9 @@ pub fn pick(item: &Value, with_items: &[Value]) -> usize { match item.get("pick").and_then(|v| v.as_i64()) { Some(value) => { if value.is_negative() { - panic!("pick option should not be negative, but was {}", value); + panic!("pick option should not be negative, but was {value}"); } else if value as usize > with_items.len() { - panic!("pick option should not be greater than the provided items, but was {}", value); + panic!("pick option should not be greater than the provided items, but was {value}"); } else { value as usize } diff --git a/src/reader.rs b/src/reader.rs index 93ce8ba..58b5e97 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -10,14 +10,14 @@ pub fn read_file(filepath: &str) -> String { // Open the path in read-only mode, returns `io::Result` let mut file = match File::open(path) { - Err(why) => panic!("couldn't open {}: {}", display, why), + Err(why) => panic!("couldn't open {display}: {why}"), Ok(file) => file, }; // Read the file contents into a string, returns `io::Result` let mut content = String::new(); if let Err(why) = file.read_to_string(&mut content) { - panic!("couldn't read {}: {}", display, why); + panic!("couldn't read {display}: {why}"); } content @@ -43,8 +43,8 @@ fn parse_yaml_content(content: &str) -> Vec { } } Err(e) => { - eprintln!("Error parsing YAML document: {}", e); - panic!("Failed to parse YAML: {}", e); + eprintln!("Error parsing YAML document: {e}"); + panic!("Failed to parse YAML: {e}"); } } } @@ -66,8 +66,8 @@ fn parse_yaml_content(content: &str) -> Vec { } } Err(e) => { - eprintln!("Error parsing YAML content: {}", e); - panic!("Failed to parse YAML: {}", e); + eprintln!("Error parsing YAML content: {e}"); + panic!("Failed to parse YAML: {e}"); } } } @@ -100,7 +100,7 @@ pub fn read_yaml_doc_accessor<'a>(doc: &'a Value, accessor: Option<&str>) -> &'a } } } else { - doc.as_sequence().expect(&format!("Expected document to be a sequence, got: {:?}", doc)) + doc.as_sequence().unwrap_or_else(|| panic!("Expected document to be a sequence, got: {doc:?}")) } } @@ -109,7 +109,7 @@ pub fn read_file_as_yml_array(filepath: &str) -> Vec { let display = path.display(); let file = match File::open(path) { - Err(why) => panic!("couldn't open {}: {}", display, why), + Err(why) => panic!("couldn't open {display}: {why}"), Ok(file) => file, }; @@ -135,7 +135,7 @@ pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> Vec { // Open the path in read-only mode, returns `io::Result` let file = match File::open(path) { - Err(why) => panic!("couldn't open {}: {}", display, why), + Err(why) => panic!("couldn't open {display}: {why}"), Ok(file) => file, }; @@ -144,7 +144,7 @@ pub fn read_csv_file_as_yml(filepath: &str, quote: u8) -> Vec { let mut items = Vec::new(); let headers = match rdr.headers() { - Err(why) => panic!("error parsing header: {:?}", why), + Err(why) => panic!("error parsing header: {why:?}"), Ok(h) => h.clone(), }; diff --git a/src/writer.rs b/src/writer.rs index 8f79c11..ddde44e 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -7,11 +7,11 @@ pub fn write_file(filepath: &str, content: String) { let display = path.display(); let mut file = match File::create(path) { - Err(why) => panic!("couldn't create {}: {:?}", display, why), + Err(why) => panic!("couldn't create {display}: {why:?}"), Ok(file) => file, }; if let Err(why) = file.write_all(content.as_bytes()) { - panic!("couldn't write to {}: {:?}", display, why); + panic!("couldn't write to {display}: {why:?}"); } } From ea455a3c59d46446928d40c30041594063379b42 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 10:44:42 +0100 Subject: [PATCH 44/64] fmt --- src/actions/delay.rs | 2 +- src/actions/exec.rs | 2 +- src/actions/request.rs | 4 ++-- src/expandable/include.rs | 2 +- src/expandable/multi_csv_request.rs | 2 +- src/expandable/multi_file_request.rs | 2 +- src/expandable/multi_iter_request.rs | 2 +- src/reader.rs | 10 +++++----- src/tags.rs | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/actions/delay.rs b/src/actions/delay.rs index e5c372f..aa2d9c9 100644 --- a/src/actions/delay.rs +++ b/src/actions/delay.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use colored::*; -use tokio::time::sleep; use serde_yaml::Value; +use tokio::time::sleep; use crate::actions::extract; use crate::actions::Runnable; diff --git a/src/actions/exec.rs b/src/actions/exec.rs index bdfb89d..c3f25bf 100644 --- a/src/actions/exec.rs +++ b/src/actions/exec.rs @@ -1,8 +1,8 @@ use async_trait::async_trait; use colored::*; use serde_json::json; -use std::process::Command; use serde_yaml::Value; +use std::process::Command; use crate::actions::Runnable; use crate::actions::{extract, extract_optional}; diff --git a/src/actions/request.rs b/src/actions/request.rs index ee95989..09bcf42 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -7,9 +7,9 @@ use reqwest::{ header::{self, HeaderMap, HeaderName, HeaderValue}, ClientBuilder, Method, Response, }; +use serde_yaml::Value as YamlValue; use std::fmt::Write; use url::Url; -use serde_yaml::Value as YamlValue; use serde::{Deserialize, Serialize}; use serde_json::{json, Map, Value}; @@ -258,7 +258,7 @@ fn yaml_to_json(data: YamlValue) -> Value { json!(array) } YamlValue::Null => json!(null), - _ => panic!("Unknown Yaml node") + _ => panic!("Unknown Yaml node"), } } diff --git a/src/expandable/include.rs b/src/expandable/include.rs index 560ddc8..91576fb 100644 --- a/src/expandable/include.rs +++ b/src/expandable/include.rs @@ -1,5 +1,5 @@ -use std::path::Path; use serde_yaml::Value; +use std::path::Path; use crate::interpolator::INTERPOLATION_REGEX; diff --git a/src/expandable/multi_csv_request.rs b/src/expandable/multi_csv_request.rs index 414d560..35bb550 100644 --- a/src/expandable/multi_csv_request.rs +++ b/src/expandable/multi_csv_request.rs @@ -1,7 +1,7 @@ use rand::seq::SliceRandom; use rand::thread_rng; -use std::path::Path; use serde_yaml::Value; +use std::path::Path; use super::pick; use crate::actions::Request; diff --git a/src/expandable/multi_file_request.rs b/src/expandable/multi_file_request.rs index 4f19452..86c8093 100644 --- a/src/expandable/multi_file_request.rs +++ b/src/expandable/multi_file_request.rs @@ -5,8 +5,8 @@ use crate::interpolator::INTERPOLATION_REGEX; use crate::reader; use rand::seq::SliceRandom; use rand::thread_rng; -use std::path::Path; use serde_yaml::Value; +use std::path::Path; pub fn is_that_you(item: &Value) -> bool { item.get("request").and_then(|v| v.as_mapping()).is_some() && (item.get("with_items_from_file").and_then(|v| v.as_str()).is_some() || item.get("with_items_from_file").and_then(|v| v.as_mapping()).is_some()) diff --git a/src/expandable/multi_iter_request.rs b/src/expandable/multi_iter_request.rs index 5457195..6a4aa18 100644 --- a/src/expandable/multi_iter_request.rs +++ b/src/expandable/multi_iter_request.rs @@ -2,7 +2,7 @@ use std::convert::TryInto; use rand::seq::SliceRandom; use rand::thread_rng; -use serde_yaml::{Value, Number}; +use serde_yaml::{Number, Value}; use crate::interpolator::INTERPOLATION_REGEX; diff --git a/src/reader.rs b/src/reader.rs index 58b5e97..934b934 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -1,7 +1,7 @@ +use serde_yaml::{Mapping, Value}; use std::fs::File; use std::io::{prelude::*, BufReader}; use std::path::Path; -use serde_yaml::{Value, Mapping}; pub fn read_file(filepath: &str) -> String { // Create a path to the desired file @@ -27,7 +27,7 @@ fn parse_yaml_content(content: &str) -> Vec { // serde_yaml doesn't support multiple documents natively, so we split by "---\n" and parse each let mut docs = Vec::new(); let trimmed_content = content.trim(); - + // Handle multi-document YAML (separated by "---\n") if trimmed_content.contains("\n---\n") || (trimmed_content.starts_with("---\n") && trimmed_content.matches("---\n").count() > 1) { let parts: Vec<&str> = trimmed_content.split("---\n").collect(); @@ -50,7 +50,7 @@ fn parse_yaml_content(content: &str) -> Vec { } } } - + // If no documents were found (empty file or no "---"), try parsing the whole content if docs.is_empty() { // Remove leading "---\n" if present for single-document files @@ -71,12 +71,12 @@ fn parse_yaml_content(content: &str) -> Vec { } } } - + // If still empty, return a single Null document to maintain compatibility if docs.is_empty() { docs.push(Value::Null); } - + docs } diff --git a/src/tags.rs b/src/tags.rs index 12bf6a7..7c28571 100644 --- a/src/tags.rs +++ b/src/tags.rs @@ -1,7 +1,7 @@ use crate::reader; use colored::*; -use std::collections::HashSet; use serde_yaml::Value; +use std::collections::HashSet; #[derive(Debug)] pub struct Tags<'a> { From 0937216ce240de347703813f4dd0a8d1026d9dce Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 11:04:36 +0100 Subject: [PATCH 45/64] Fix clippy warnings --- src/reader.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/reader.rs b/src/reader.rs index 934b934..b1aa1c5 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -54,11 +54,7 @@ fn parse_yaml_content(content: &str) -> Vec { // If no documents were found (empty file or no "---"), try parsing the whole content if docs.is_empty() { // Remove leading "---\n" if present for single-document files - let content_to_parse = if trimmed_content.starts_with("---\n") { - &trimmed_content[4..] - } else { - trimmed_content - }; + let content_to_parse = trimmed_content.strip_prefix("---\n").unwrap_or(trimmed_content); match serde_yaml::from_str::(content_to_parse.trim()) { Ok(doc) => { if !matches!(doc, Value::Null) { @@ -85,6 +81,7 @@ pub fn read_file_as_yml(filepath: &str) -> Vec { parse_yaml_content(&content) } +#[cfg(test)] pub fn read_file_as_yml_from_str(content: &str) -> Vec { parse_yaml_content(content) } From ab5d60c157f2b50470da475b49415fdb307d3a3a Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 11:06:23 +0100 Subject: [PATCH 46/64] Fix CI: replace deprecated actions-rs/tarpaulin with modern alternative --- .github/workflows/general.yml | 46 +++++++++++++---------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml index 4eb9f97..484ab65 100644 --- a/.github/workflows/general.yml +++ b/.github/workflows/general.yml @@ -10,42 +10,31 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable with: - profile: minimal - toolchain: stable - override: true - - uses: actions-rs/cargo@v1 - with: - command: test + components: rustfmt, clippy + - run: cargo test fmt: name: Rustfmt runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable with: - toolchain: stable - override: true components: rustfmt - - uses: actions-rs/cargo@v1 - with: - command: fmt - args: --all -- --check + - run: cargo fmt --all -- --check clippy: name: Clippy runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable with: - toolchain: stable - override: true components: clippy - - uses: actions-rs/clippy-check@v1 + - uses: clippy-rs/clippy-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} args: -- -D warnings @@ -55,16 +44,15 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Install stable toolchain - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: - toolchain: stable - override: true + components: rustfmt, clippy + + - name: Install cargo-tarpaulin + uses: taiki-e/install-action@cargo-tarpaulin - name: Run cargo-tarpaulin - uses: actions-rs/tarpaulin@v0.1.3 - with: - version: '0.15.0' - args: '--ignore-tests' + run: cargo tarpaulin --out Xml --ignore-tests From d69bd496e5cc28db9cab282ff16862ebd5fa1f9e Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 11:07:29 +0100 Subject: [PATCH 47/64] Fix clippy action: use direct cargo clippy command --- .github/workflows/general.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/general.yml b/.github/workflows/general.yml index 484ab65..5ac5f64 100644 --- a/.github/workflows/general.yml +++ b/.github/workflows/general.yml @@ -34,10 +34,7 @@ jobs: - uses: dtolnay/rust-toolchain@stable with: components: clippy - - uses: clippy-rs/clippy-action@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - args: -- -D warnings + - run: cargo clippy -- -D warnings coverage: name: Code coverage From e5c70463dd27a1d5eac7682fcb70990b069946b1 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Mon, 21 Oct 2024 02:49:26 +0000 Subject: [PATCH 48/64] Support file and hex request body types --- Cargo.lock | 12 ++++++++-- Cargo.toml | 2 ++ README.md | 15 +++++++++++++ SYNTAX.md | 12 ++++++++++ src/actions/request.rs | 51 +++++++++++++++++++++++++++++------------- 5 files changed, 74 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9c685e5..af091b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -243,8 +243,10 @@ dependencies = [ "csv", "futures", "hdrhistogram", + "hex", "lazy_static", "linked-hash-map", + "nom", "num_cpus", "openssl-sys", "rand", @@ -481,6 +483,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hostname" version = "0.3.1" @@ -759,9 +767,9 @@ dependencies = [ [[package]] name = "nom" -version = "7.1.1" +version = "7.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" dependencies = [ "memchr", "minimal-lexical", diff --git a/Cargo.toml b/Cargo.toml index 7263a5c..cad0400 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,6 +30,8 @@ hdrhistogram = "7.4.0" # Add openssl-sys as a direct dependency so it can be cross compiled to # x86_64-unknown-linux-musl using the "vendored" feature below openssl-sys = "0.9.66" +nom = "7.1.3" +hex = "0.4.3" [features] # Force openssl-sys to statically link in the openssl library. Necessary when diff --git a/README.md b/README.md index 1b5b2f2..8ad7444 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,21 @@ plan: method: POST body: foo=bar&arg={{ bar }} + + - name: Support for hex-encoded request body + request: + url: /api/blob + method: POST + body: + hex: 65 78 61 6D 70 6C 65 + + - name: Support request body loaded from a file + request: + url: /api/blob + method: POST + body: + file: ./image.png + - name: Login user request: url: /login?user=example&password=3x4mpl3 diff --git a/SYNTAX.md b/SYNTAX.md index 353d645..99549ef 100644 --- a/SYNTAX.md +++ b/SYNTAX.md @@ -61,6 +61,18 @@ Second, it can be a hash with the following properties: - `file_name`: csv file containing the records to be used as items - `quote_char`: character to use as quote in csv parsing. Defaults to `"\""`, but can be set to `"\'"`. If your csv file has quoted strings that contain commas and that causes parse errors, make sure this value is set correctly. +#### body item properties + +The `body` property can be specified in different ways depending on the type of data you want to send in the request. Here are three variants: + +1. `body: "string with {{ templates }}"` + - This variant allows you to use a string with templates that can be interpolated with values from the context. + +2. `body: { hex: 65 78 61 6D 70 6C 65 }` + - This variant allows you to send a raw byte string value in the request body. + +3. `body: { file: path/to/file.txt }` + - This variant allows you to specify a file path, and the content of the file will be used as the request body. #### tags item properties diff --git a/src/actions/request.rs b/src/actions/request.rs index b7bb270..3a52284 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -1,28 +1,35 @@ use std::collections::HashMap; use std::time::{Duration, Instant}; +use crate::actions::{extract, extract_optional}; +use crate::benchmark::{Context, Pool, Reports}; +use crate::config::Config; +use crate::interpolator; use async_trait::async_trait; use colored::Colorize; +use hex; use reqwest::{ header::{self, HeaderMap, HeaderName, HeaderValue}, ClientBuilder, Method, Response, }; +use serde::{Deserialize, Serialize}; +use serde_json::{json, Map, Value}; use std::fmt::Write; +use std::fs::File; +use std::io::Read; use url::Url; use yaml_rust::Yaml; -use serde::{Deserialize, Serialize}; -use serde_json::{json, Map, Value}; - -use crate::actions::{extract, extract_optional}; -use crate::benchmark::{Context, Pool, Reports}; -use crate::config::Config; -use crate::interpolator; - use crate::actions::{Report, Runnable}; static USER_AGENT: &str = "drill"; +#[derive(Clone)] +pub enum Body { + Template(String), + Binary(Vec), +} + #[derive(Clone)] #[allow(dead_code)] pub struct Request { @@ -31,7 +38,7 @@ pub struct Request { time: f64, method: String, headers: HashMap, - pub body: Option, + pub body: Option, pub with_item: Option, pub index: Option, pub assign: Option, @@ -62,7 +69,18 @@ impl Request { let body_verbs = vec!["POST", "PATCH", "PUT"]; let body = if body_verbs.contains(&method.as_str()) { - Some(extract(&item["request"], "body")) + if let Some(body) = item["request"]["body"].as_str() { + Some(Body::Template(body.to_string())) + } else if let Some(file_path) = item["request"]["body"]["file"].as_str() { + let mut file = File::open(file_path).expect("Unable to open file"); + let mut buffer = Vec::new(); + file.read_to_end(&mut buffer).expect("Unable to read file"); + Some(Body::Binary(buffer)) + } else if let Some(hex_str) = item["request"]["body"]["hex"].as_str() { + Some(Body::Binary(hex::decode(hex_str).expect("Invalid hex string"))) + } else { + panic!("{} Body must be string, file or hex!!", "WARNING!".yellow().bold()); + } } else { None }; @@ -156,12 +174,13 @@ impl Request { let mut pool2 = pool.lock().unwrap(); let client = pool2.entry(domain).or_insert_with(|| ClientBuilder::default().danger_accept_invalid_certs(config.no_check_certificate).build().unwrap()); - let request = if let Some(body) = self.body.as_ref() { - interpolated_body = uninterpolator.get_or_insert(interpolator::Interpolator::new(context)).resolve(body, !config.relaxed_interpolations); - - client.request(method, interpolated_base_url.as_str()).body(interpolated_body) - } else { - client.request(method, interpolated_base_url.as_str()) + let request = match self.body.as_ref() { + Some(Body::Template(template_body)) => { + interpolated_body = uninterpolator.get_or_insert(interpolator::Interpolator::new(context)).resolve(template_body, !config.relaxed_interpolations); + client.request(method, interpolated_base_url.as_str()).body(interpolated_body) + } + Some(Body::Binary(binary_body)) => client.request(method, interpolated_base_url.as_str()).body(binary_body.clone()), + None => client.request(method, interpolated_base_url.as_str()), }; (client.clone(), request) From 08b824b20cb644c0e7c630b6c83e020e62321236 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Mon, 21 Oct 2024 02:56:41 +0000 Subject: [PATCH 49/64] fixup! Support file and hex request body types --- Cargo.lock | 1039 +++++++++++++++++++++++----------------- Cargo.toml | 3 +- README.md | 1 - src/actions/request.rs | 14 +- 4 files changed, 621 insertions(+), 436 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index af091b0..3add013 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,16 +3,25 @@ version = 3 [[package]] -name = "adler" -version = "1.0.2" +name = "addr2line" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -28,9 +37,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.60" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", @@ -43,22 +52,37 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" dependencies = [ - "hermit-abi", + "hermit-abi 0.1.19", "libc", "winapi", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] [[package]] name = "base64" -version = "0.13.1" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bitflags" @@ -67,40 +91,37 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "bstr" -version = "0.2.17" +name = "bitflags" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" -dependencies = [ - "lazy_static", - "memchr", - "regex-automata", - "serde", -] +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bumpalo" -version = "3.11.1" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.3.0" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.0.78" +version = "1.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" +checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -116,7 +137,7 @@ checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", - "bitflags", + "bitflags 1.3.2", "strsim", "textwrap", "unicode-width", @@ -125,20 +146,19 @@ dependencies = [ [[package]] name = "colored" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ - "atty", "lazy_static", - "winapi", + "windows-sys 0.48.0", ] [[package]] name = "cookie" -version = "0.16.2" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ "percent-encoding", "time", @@ -147,15 +167,16 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.16.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd" +checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" dependencies = [ "cookie", - "idna 0.2.3", + "idna 0.3.0", "log", "publicsuffix", "serde", + "serde_derive", "serde_json", "time", "url", @@ -163,9 +184,9 @@ dependencies = [ [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -173,65 +194,69 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.6" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.14" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "csv" -version = "1.1.6" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" dependencies = [ - "bstr", "csv-core", - "itoa 0.4.8", + "itoa", "ryu", "serde", ] [[package]] name = "csv-core" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ "memchr", ] [[package]] name = "data-encoding" -version = "2.3.3" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] [[package]] name = "drill" @@ -246,7 +271,6 @@ dependencies = [ "hex", "lazy_static", "linked-hash-map", - "nom", "num_cpus", "openssl-sys", "rand", @@ -261,18 +285,18 @@ dependencies = [ [[package]] name = "encoding_rs" -version = "0.8.31" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] name = "enum-as-inner" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ "heck", "proc-macro2", @@ -281,19 +305,32 @@ dependencies = [ ] [[package]] -name = "fastrand" -version = "1.8.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "instant", + "libc", + "windows-sys 0.52.0", ] +[[package]] +name = "fastrand" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" + [[package]] name = "flate2" -version = "1.0.25" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide", @@ -322,18 +359,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -346,9 +383,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -356,15 +393,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -373,15 +410,15 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", @@ -390,21 +427,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.25" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -420,20 +457,26 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.8" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", "wasi", ] +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + [[package]] name = "h2" -version = "0.3.15" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", @@ -450,15 +493,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.12.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" [[package]] name = "hdrhistogram" -version = "7.5.2" +version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8" +checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ "base64", "byteorder", @@ -470,9 +513,9 @@ dependencies = [ [[package]] name = "heck" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -483,12 +526,63 @@ dependencies = [ "libc", ] +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "hickory-proto" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "hickory-resolver" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand", + "resolv-conf", + "smallvec", + "thiserror", + "tokio", + "tracing", +] + [[package]] name = "hostname" version = "0.3.1" @@ -502,20 +596,20 @@ dependencies = [ [[package]] name = "http" -version = "0.2.8" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", - "itoa 1.0.5", + "itoa", ] [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", "http", @@ -524,21 +618,21 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.23" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", @@ -549,7 +643,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.5", + "itoa", "pin-project-lite", "socket2", "tokio", @@ -573,94 +667,88 @@ dependencies = [ [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] [[package]] name = "idna" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ "unicode-bidi", "unicode-normalization", ] [[package]] -name = "indexmap" -version = "1.9.2" +name = "idna" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "autocfg", - "hashbrown", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "instant" -version = "0.1.12" +name = "indexmap" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ - "cfg-if", + "equivalent", + "hashbrown", ] [[package]] name = "ipconfig" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ "socket2", "widestring", - "winapi", + "windows-sys 0.48.0", "winreg", ] [[package]] name = "ipnet" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11b0d96e660696543b251e58030cf9787df56da39dab19ad60eae7353040917e" - -[[package]] -name = "itoa" -version = "0.4.8" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.60" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.138" +version = "0.2.161" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" [[package]] name = "linked-hash-map" @@ -668,11 +756,17 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -680,12 +774,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "lru-cache" @@ -702,23 +793,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" -version = "2.5.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minimal-lexical" @@ -728,32 +813,31 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.5" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", - "log", "wasi", - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -775,38 +859,53 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.14.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi", + "hermit-abi 0.3.9", "libc", ] +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.16.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.44" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29d971fd5722fec23977260f6e81aa67d2f22cadbdc2aa049f1022d9a3be1566" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -817,9 +916,9 @@ dependencies = [ [[package]] name = "openssl-macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", @@ -834,20 +933,19 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "111.24.0+1.1.1s" +version = "300.3.2+3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3498f259dab01178c6228c6b00dcef0ed2a2d5e20d648c017861227773ea4abd" +checksum = "a211a18d945ef7e648cc6e0058f4c548ee46aab922ea203e0d30e966ea23647b" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.79" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5454462c0eced1e97f2ec09036abc8da362e66802f66fd20f86854d9d8cbcbc4" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ - "autocfg", "cc", "libc", "openssl-src", @@ -857,9 +955,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -867,28 +965,28 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.5" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-sys 0.42.0", + "windows-targets 0.52.6", ] [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -898,27 +996,30 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] -name = "ppv-lite86" -version = "0.2.17" +name = "powerfmt" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] -name = "proc-macro-hack" -version = "0.5.19" +name = "ppv-lite86" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "proc-macro2" -version = "1.0.48" +version = "1.0.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" +checksum = "7c3a7fc5db1e57d5a779a352c8cdb57b29aa4c40cc69c3a68a7fedc815fbf2f9" dependencies = [ "unicode-ident", ] @@ -947,9 +1048,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.22" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -986,50 +1087,47 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.7.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", + "regex-automata", "regex-syntax", ] [[package]] name = "regex-automata" -version = "0.1.10" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] [[package]] name = "regex-syntax" -version = "0.6.28" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.13" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64", "bytes", @@ -1039,6 +1137,7 @@ dependencies = [ "futures-core", "futures-util", "h2", + "hickory-resolver", "http", "http-body", "hyper", @@ -1051,14 +1150,15 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "proc-macro-hack", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", - "trust-dns-resolver", "url", "wasm-bindgen", "wasm-bindgen-futures", @@ -1076,35 +1176,62 @@ dependencies = [ "quick-error", ] +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustix" +version = "0.38.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64", +] + [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "schannel" -version = "0.1.20" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" +checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1" dependencies = [ - "lazy_static", - "windows-sys 0.36.1", + "windows-sys 0.59.0", ] [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.7.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -1113,9 +1240,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.6.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -1123,18 +1250,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.151" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fed41fc1a24994d044e6db6935e69511a1153b52c15eb42493b26fa87feba0" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.151" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -1143,11 +1270,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.90" +version = "1.0.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8778cc0b528968fe72abec38b5db5a20a70d148116cd9325d2bc5f5180ca3faf" +checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03" dependencies = [ - "itoa 1.0.5", + "itoa", + "memchr", "ryu", "serde", ] @@ -1159,34 +1287,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.5", + "itoa", "ryu", "serde", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.4.7" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -1197,27 +1331,53 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.106" +version = "2.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" +checksum = "83540f837a8afc019423a8edb95b52a8effe46957ee402287f4292fae35be021" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" -version = "3.3.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", + "once_cell", + "rustix", + "windows-sys 0.59.0", ] [[package]] @@ -1231,18 +1391,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", @@ -1251,11 +1411,14 @@ dependencies = [ [[package]] name = "time" -version = "0.3.17" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ - "itoa 1.0.5", + "deranged", + "itoa", + "num-conv", + "powerfmt", "serde", "time-core", "time-macros", @@ -1263,56 +1426,55 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.6" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] [[package]] name = "tinyvec_macros" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.23.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eab6d665857cc6ca78d6e80303a02cea7a7851e85dfbd77cbdc09bd129f1ef46" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ - "autocfg", + "backtrace", "bytes", "libc", - "memchr", "mio", - "num_cpus", "pin-project-lite", "socket2", - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-native-tls" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" dependencies = [ "native-tls", "tokio", @@ -1320,31 +1482,29 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.4" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "pin-project-lite", "tracing-attributes", "tracing-core", @@ -1352,9 +1512,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", @@ -1363,99 +1523,54 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.30" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "lru-cache", - "parking_lot", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", - "trust-dns-proto", -] - [[package]] name = "try-lock" -version = "0.2.3" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "unicode-bidi" -version = "0.3.8" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.10" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "url" -version = "2.3.1" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", - "idna 0.3.0", + "idna 0.5.0", "percent-encoding", ] @@ -1473,17 +1588,16 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] @@ -1495,19 +1609,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.83" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.83" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", @@ -1520,9 +1635,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.33" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -1532,9 +1647,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.83" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1542,9 +1657,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.83" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", @@ -1555,15 +1670,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.83" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.60" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -1571,9 +1686,9 @@ dependencies = [ [[package]] name = "widestring" -version = "0.5.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" [[package]] name = "winapi" @@ -1599,111 +1714,160 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -1714,3 +1878,24 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index cad0400..de0b2d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,12 +26,11 @@ lazy_static = "1.4.0" num_cpus = "1.13.0" rand = "0.8.5" hdrhistogram = "7.4.0" +hex = "0.4.3" # Add openssl-sys as a direct dependency so it can be cross compiled to # x86_64-unknown-linux-musl using the "vendored" feature below openssl-sys = "0.9.66" -nom = "7.1.3" -hex = "0.4.3" [features] # Force openssl-sys to statically link in the openssl library. Necessary when diff --git a/README.md b/README.md index 8ad7444..cffbb7a 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,6 @@ plan: method: POST body: foo=bar&arg={{ bar }} - - name: Support for hex-encoded request body request: url: /api/blob diff --git a/src/actions/request.rs b/src/actions/request.rs index 3a52284..5820a9e 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -1,10 +1,6 @@ use std::collections::HashMap; use std::time::{Duration, Instant}; -use crate::actions::{extract, extract_optional}; -use crate::benchmark::{Context, Pool, Reports}; -use crate::config::Config; -use crate::interpolator; use async_trait::async_trait; use colored::Colorize; use hex; @@ -12,14 +8,20 @@ use reqwest::{ header::{self, HeaderMap, HeaderName, HeaderValue}, ClientBuilder, Method, Response, }; -use serde::{Deserialize, Serialize}; -use serde_json::{json, Map, Value}; use std::fmt::Write; use std::fs::File; use std::io::Read; use url::Url; use yaml_rust::Yaml; +use serde::{Deserialize, Serialize}; +use serde_json::{json, Map, Value}; + +use crate::actions::{extract, extract_optional}; +use crate::benchmark::{Context, Pool, Reports}; +use crate::config::Config; +use crate::interpolator; + use crate::actions::{Report, Runnable}; static USER_AGENT: &str = "drill"; From 5402c1d26d669f30711b38c33c1a94612602cd7c Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Mon, 21 Oct 2024 05:01:27 +0200 Subject: [PATCH 50/64] Update SYNTAX.md --- SYNTAX.md | 1 + 1 file changed, 1 insertion(+) diff --git a/SYNTAX.md b/SYNTAX.md index 99549ef..398092a 100644 --- a/SYNTAX.md +++ b/SYNTAX.md @@ -61,6 +61,7 @@ Second, it can be a hash with the following properties: - `file_name`: csv file containing the records to be used as items - `quote_char`: character to use as quote in csv parsing. Defaults to `"\""`, but can be set to `"\'"`. If your csv file has quoted strings that contain commas and that causes parse errors, make sure this value is set correctly. + #### body item properties The `body` property can be specified in different ways depending on the type of data you want to send in the request. Here are three variants: From 895a3bae193b87538a995e44ebe149176551f2a5 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 15:54:27 +0100 Subject: [PATCH 51/64] Add tests for body/hex body/file --- Cargo.lock | 1 + Cargo.toml | 3 + src/actions/request.rs | 313 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 317 insertions(+) diff --git a/Cargo.lock b/Cargo.lock index 4d53be1..0f0479b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -279,6 +279,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", + "tempfile", "tokio", "url", ] diff --git a/Cargo.toml b/Cargo.toml index b78413d..d8ea103 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,3 +36,6 @@ openssl-sys = "0.9.66" # Force openssl-sys to statically link in the openssl library. Necessary when # cross compiling to x86_64-unknown-linux-musl. vendored = ["openssl-sys/vendored"] + +[dev-dependencies] +tempfile = "3.8" diff --git a/src/actions/request.rs b/src/actions/request.rs index f3963bb..1071a49 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -389,3 +389,316 @@ fn log_response(log_message_response: String, body: &Option) { } println!("{message}"); } + +#[cfg(test)] +mod tests { + use super::*; + use serde_yaml::Value as YamlValue; + use std::io::Write; + use tempfile::NamedTempFile; + + fn create_yaml_request_with_string_body(body_content: &str) -> YamlValue { + let yaml_str = format!( + r#" +name: test_request +request: + url: http://example.com + method: POST + body: "{}" +"#, + body_content + ); + serde_yaml::from_str(&yaml_str).unwrap() + } + + fn create_yaml_request_with_hex_body(hex_content: &str) -> YamlValue { + let yaml_str = format!( + r#" +name: test_request +request: + url: http://example.com + method: POST + body: + hex: "{}" +"#, + hex_content + ); + serde_yaml::from_str(&yaml_str).unwrap() + } + + fn create_yaml_request_with_file_body(file_path: &str) -> YamlValue { + let yaml_str = format!( + r#" +name: test_request +request: + url: http://example.com + method: POST + body: + file: "{}" +"#, + file_path + ); + serde_yaml::from_str(&yaml_str).unwrap() + } + + #[test] + fn test_body_template_string() { + let yaml = create_yaml_request_with_string_body("Hello, World!"); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Template(content)) => { + assert_eq!(content, "Hello, World!"); + } + _ => panic!("Expected Body::Template"), + } + } + + #[test] + fn test_body_hex() { + // "Hello" in hex is "48656c6c6f" + let yaml = create_yaml_request_with_hex_body("48656c6c6f"); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b"Hello"); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + fn test_body_hex_empty() { + let yaml = create_yaml_request_with_hex_body(""); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b""); + } + _ => panic!("Expected Body::Binary with empty data"), + } + } + + #[test] + fn test_body_hex_complex() { + // "Hello, World!" in hex + let yaml = create_yaml_request_with_hex_body("48656c6c6f2c20576f726c6421"); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b"Hello, World!"); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + fn test_body_file() { + // Create a temporary file with test content + let mut temp_file = NamedTempFile::new().unwrap(); + let test_content = b"Test file content"; + temp_file.write_all(test_content).unwrap(); + temp_file.flush().unwrap(); + + let file_path = temp_file.path().to_str().unwrap(); + let yaml = create_yaml_request_with_file_body(file_path); + + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, test_content); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + fn test_body_file_empty() { + // Create an empty temporary file + let temp_file = NamedTempFile::new().unwrap(); + let file_path = temp_file.path().to_str().unwrap(); + + let yaml = create_yaml_request_with_file_body(file_path); + + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b""); + } + _ => panic!("Expected Body::Binary with empty data"), + } + } + + #[test] + fn test_body_file_binary_data() { + // Create a file with binary data (not UTF-8) + let mut temp_file = NamedTempFile::new().unwrap(); + let binary_content = vec![0x00, 0x01, 0x02, 0xFF, 0xFE, 0xFD]; + temp_file.write_all(&binary_content).unwrap(); + temp_file.flush().unwrap(); + + let file_path = temp_file.path().to_str().unwrap(); + let yaml = create_yaml_request_with_file_body(file_path); + + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, binary_content); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + fn test_body_file_large_content() { + // Create a file with larger content + let mut temp_file = NamedTempFile::new().unwrap(); + let large_content: Vec = (0..10000).map(|i| (i % 256) as u8).collect(); + temp_file.write_all(&large_content).unwrap(); + temp_file.flush().unwrap(); + + let file_path = temp_file.path().to_str().unwrap(); + let yaml = create_yaml_request_with_file_body(file_path); + + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data.len(), 10000); + assert_eq!(data, large_content); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + fn test_body_none_for_get() { + let yaml_str = r#" +name: test_request +request: + url: http://example.com + method: GET +"#; + let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); + let request = Request::new(&yaml, None, None); + + assert!(request.body.is_none()); + } + + #[test] + fn test_body_none_for_delete() { + let yaml_str = r#" +name: test_request +request: + url: http://example.com + method: DELETE +"#; + let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); + let request = Request::new(&yaml, None, None); + + assert!(request.body.is_none()); + } + + #[test] + fn test_body_hex_uppercase() { + // Test that hex decoding works with uppercase letters + let yaml = create_yaml_request_with_hex_body("48656C6C6F"); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b"Hello"); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + fn test_body_hex_mixed_case() { + // Test that hex decoding works with mixed case + let yaml = create_yaml_request_with_hex_body("48656c6C6F"); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b"Hello"); + } + _ => panic!("Expected Body::Binary"), + } + } + + #[test] + #[should_panic(expected = "Invalid hex string")] + fn test_body_hex_invalid() { + let yaml = create_yaml_request_with_hex_body("InvalidHexString!"); + Request::new(&yaml, None, None); + } + + #[test] + #[should_panic(expected = "Unable to open file")] + fn test_body_file_not_found() { + let yaml = create_yaml_request_with_file_body("/nonexistent/path/to/file.txt"); + Request::new(&yaml, None, None); + } + + #[test] + fn test_body_priority_string_over_hex() { + // When body is a string, it should be treated as Template, not hex + let yaml = create_yaml_request_with_string_body("48656c6c6f"); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Template(content)) => { + assert_eq!(content, "48656c6c6f"); + } + _ => panic!("Expected Body::Template when body is a string"), + } + } + + #[test] + fn test_body_put_method() { + let yaml_str = r#" +name: test_request +request: + url: http://example.com + method: PUT + body: "PUT body content" +"#; + let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Template(content)) => { + assert_eq!(content, "PUT body content"); + } + _ => panic!("Expected Body::Template"), + } + } + + #[test] + fn test_body_patch_method() { + let yaml_str = r#" +name: test_request +request: + url: http://example.com + method: PATCH + body: + hex: "5061746368" +"#; + let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); + let request = Request::new(&yaml, None, None); + + match request.body { + Some(Body::Binary(data)) => { + assert_eq!(data, b"Patch"); + } + _ => panic!("Expected Body::Binary"), + } + } +} From 719a75bbad8e820eb638cfff7720c016cee56c96 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 15:55:35 +0100 Subject: [PATCH 52/64] Format --- src/actions/request.rs | 46 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/actions/request.rs b/src/actions/request.rs index 1071a49..59ed898 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -445,7 +445,7 @@ request: fn test_body_template_string() { let yaml = create_yaml_request_with_string_body("Hello, World!"); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Template(content)) => { assert_eq!(content, "Hello, World!"); @@ -459,7 +459,7 @@ request: // "Hello" in hex is "48656c6c6f" let yaml = create_yaml_request_with_hex_body("48656c6c6f"); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b"Hello"); @@ -472,7 +472,7 @@ request: fn test_body_hex_empty() { let yaml = create_yaml_request_with_hex_body(""); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b""); @@ -486,7 +486,7 @@ request: // "Hello, World!" in hex let yaml = create_yaml_request_with_hex_body("48656c6c6f2c20576f726c6421"); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b"Hello, World!"); @@ -502,12 +502,12 @@ request: let test_content = b"Test file content"; temp_file.write_all(test_content).unwrap(); temp_file.flush().unwrap(); - + let file_path = temp_file.path().to_str().unwrap(); let yaml = create_yaml_request_with_file_body(file_path); - + let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, test_content); @@ -521,11 +521,11 @@ request: // Create an empty temporary file let temp_file = NamedTempFile::new().unwrap(); let file_path = temp_file.path().to_str().unwrap(); - + let yaml = create_yaml_request_with_file_body(file_path); - + let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b""); @@ -541,12 +541,12 @@ request: let binary_content = vec![0x00, 0x01, 0x02, 0xFF, 0xFE, 0xFD]; temp_file.write_all(&binary_content).unwrap(); temp_file.flush().unwrap(); - + let file_path = temp_file.path().to_str().unwrap(); let yaml = create_yaml_request_with_file_body(file_path); - + let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, binary_content); @@ -562,12 +562,12 @@ request: let large_content: Vec = (0..10000).map(|i| (i % 256) as u8).collect(); temp_file.write_all(&large_content).unwrap(); temp_file.flush().unwrap(); - + let file_path = temp_file.path().to_str().unwrap(); let yaml = create_yaml_request_with_file_body(file_path); - + let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data.len(), 10000); @@ -587,7 +587,7 @@ request: "#; let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); let request = Request::new(&yaml, None, None); - + assert!(request.body.is_none()); } @@ -601,7 +601,7 @@ request: "#; let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); let request = Request::new(&yaml, None, None); - + assert!(request.body.is_none()); } @@ -610,7 +610,7 @@ request: // Test that hex decoding works with uppercase letters let yaml = create_yaml_request_with_hex_body("48656C6C6F"); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b"Hello"); @@ -624,7 +624,7 @@ request: // Test that hex decoding works with mixed case let yaml = create_yaml_request_with_hex_body("48656c6C6F"); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b"Hello"); @@ -652,7 +652,7 @@ request: // When body is a string, it should be treated as Template, not hex let yaml = create_yaml_request_with_string_body("48656c6c6f"); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Template(content)) => { assert_eq!(content, "48656c6c6f"); @@ -672,7 +672,7 @@ request: "#; let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Template(content)) => { assert_eq!(content, "PUT body content"); @@ -693,7 +693,7 @@ request: "#; let yaml: YamlValue = serde_yaml::from_str(yaml_str).unwrap(); let request = Request::new(&yaml, None, None); - + match request.body { Some(Body::Binary(data)) => { assert_eq!(data, b"Patch"); From 7abf85b344e0dd48dbff1ff208aa2f74ab103b30 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Sun, 28 Dec 2025 09:56:09 +0100 Subject: [PATCH 53/64] More fixes --- src/interpolator.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/interpolator.rs b/src/interpolator.rs index f9f6ddd..04161c9 100644 --- a/src/interpolator.rs +++ b/src/interpolator.rs @@ -171,7 +171,8 @@ mod tests { #[test] fn interpolates_environment_variables() { - std::env::set_var("FOO", "BAR"); + // TODO: Audit that the environment access only happens in single-threaded code. + unsafe { std::env::set_var("FOO", "BAR") }; let context: Context = Context::new(); let interpolator = Interpolator::new(&context); From f7ec7e8a863e7d0e2679a0c93d15496e8e57bed3 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 29 Dec 2025 16:27:11 +0100 Subject: [PATCH 54/64] Remove clppy warning --- src/actions/request.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/actions/request.rs b/src/actions/request.rs index 59ed898..7200990 100644 --- a/src/actions/request.rs +++ b/src/actions/request.rs @@ -3,7 +3,6 @@ use std::time::{Duration, Instant}; use async_trait::async_trait; use colored::Colorize; -use hex; use reqwest::{ header::{self, HeaderMap, HeaderName, HeaderValue}, ClientBuilder, Method, Response, From 6ac18403f33b2e7d09ab06e03a986cbca3d16651 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Dec 2025 15:31:05 +0000 Subject: [PATCH 55/64] Bump hashbrown from 0.15.0 to 0.15.5 Bumps [hashbrown](https://github.com/rust-lang/hashbrown) from 0.15.0 to 0.15.5. - [Release notes](https://github.com/rust-lang/hashbrown/releases) - [Changelog](https://github.com/rust-lang/hashbrown/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/hashbrown/compare/v0.15.0...v0.15.5) --- updated-dependencies: - dependency-name: hashbrown dependency-version: 0.15.5 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0f0479b..b05d03b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -494,9 +494,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.0" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" [[package]] name = "hdrhistogram" From 0ca89a71d87d0f61b0ed1d64e21bc9a870a73d3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Dec 2025 15:30:33 +0000 Subject: [PATCH 56/64] Bump hickory-proto from 0.24.1 to 0.24.4 Bumps [hickory-proto](https://github.com/hickory-dns/hickory-dns) from 0.24.1 to 0.24.4. - [Release notes](https://github.com/hickory-dns/hickory-dns/releases) - [Changelog](https://github.com/hickory-dns/hickory-dns/blob/main/CHANGELOG.md) - [Commits](https://github.com/hickory-dns/hickory-dns/compare/v0.24.1...v0.24.4) --- updated-dependencies: - dependency-name: hickory-proto dependency-version: 0.24.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 252 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 243 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b05d03b..039705d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -258,6 +258,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "drill" version = "0.8.3" @@ -541,9 +552,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hickory-proto" -version = "0.24.1" +version = "0.24.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" dependencies = [ "async-trait", "cfg-if", @@ -552,7 +563,7 @@ dependencies = [ "futures-channel", "futures-io", "futures-util", - "idna 0.4.0", + "idna 1.1.0", "ipnet", "once_cell", "rand", @@ -666,6 +677,87 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + [[package]] name = "idna" version = "0.3.0" @@ -678,9 +770,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -688,12 +780,23 @@ dependencies = [ [[package]] name = "idna" -version = "0.5.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -763,6 +866,12 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + [[package]] name = "lock_api" version = "0.4.12" @@ -1001,6 +1110,15 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -1337,6 +1455,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "strsim" version = "0.8.0" @@ -1360,6 +1484,17 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "system-configuration" version = "0.5.1" @@ -1454,6 +1589,16 @@ dependencies = [ "time-core", ] +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -1594,6 +1739,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "vcpkg" version = "0.2.15" @@ -1890,6 +2041,35 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -1910,3 +2090,57 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] From dbdc13f24598bc5f83852d2fff8f916429699cbd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Dec 2025 15:36:05 +0000 Subject: [PATCH 57/64] Bump tokio from 1.40.0 to 1.43.1 Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.40.0 to 1.43.1. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.40.0...tokio-1.43.1) --- updated-dependencies: - dependency-name: tokio dependency-version: 1.43.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- Cargo.lock | 8 ++++---- Cargo.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 039705d..5fb54b2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -850,9 +850,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.161" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "linked-hash-map" @@ -1616,9 +1616,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "492a604e2fd7f814268a378409e6c92b5525d747d10db9a229723f55a417958c" dependencies = [ "backtrace", "bytes", diff --git a/Cargo.toml b/Cargo.toml index d8ea103..1951ecf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ serde_json = "1.0.39" serde_yaml = "0.9" url = "2.1.1" linked-hash-map = "0.5.3" -tokio = { version = "1.19.2", features = ["time", "net"] } +tokio = { version = "1.43.1", features = ["time", "net"] } reqwest = { version = "0.11.11", features = ["cookies", "trust-dns"] } async-trait = "0.1.30" futures = "0.3.5" From 7addd7d4dce50ec6b484f354b4b83451ff7a9555 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Dec 2025 15:35:55 +0000 Subject: [PATCH 58/64] Bump cookie, cookie-parser, express and express-session Bumps [cookie](https://github.com/jshttp/cookie) to 0.7.2 and updates ancestor dependencies [cookie](https://github.com/jshttp/cookie), [cookie-parser](https://github.com/expressjs/cookie-parser), [express](https://github.com/expressjs/express) and [express-session](https://github.com/expressjs/session). These dependencies need to be updated together. Updates `cookie` from 0.3.1 to 0.7.2 - [Release notes](https://github.com/jshttp/cookie/releases) - [Commits](https://github.com/jshttp/cookie/compare/v0.3.1...v0.7.2) Updates `cookie-parser` from 1.4.3 to 1.4.7 - [Release notes](https://github.com/expressjs/cookie-parser/releases) - [Changelog](https://github.com/expressjs/cookie-parser/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/cookie-parser/compare/1.4.3...1.4.7) Updates `express` from 4.18.2 to 4.22.1 - [Release notes](https://github.com/expressjs/express/releases) - [Changelog](https://github.com/expressjs/express/blob/v4.22.1/History.md) - [Commits](https://github.com/expressjs/express/compare/4.18.2...v4.22.1) Updates `express-session` from 1.15.6 to 1.18.2 - [Release notes](https://github.com/expressjs/session/releases) - [Changelog](https://github.com/expressjs/session/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/session/compare/v1.15.6...v1.18.2) --- updated-dependencies: - dependency-name: cookie dependency-version: 0.7.2 dependency-type: indirect - dependency-name: cookie-parser dependency-version: 1.4.7 dependency-type: direct:production - dependency-name: express dependency-version: 4.22.1 dependency-type: direct:production - dependency-name: express-session dependency-version: 1.18.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- example/server/package-lock.json | 961 +++++++++++++++++++++---------- 1 file changed, 655 insertions(+), 306 deletions(-) diff --git a/example/server/package-lock.json b/example/server/package-lock.json index 2ff8034..1350e89 100644 --- a/example/server/package-lock.json +++ b/example/server/package-lock.json @@ -1,530 +1,879 @@ { "name": "server", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "accepts": { + "packages": { + "": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cookie-parser": "^1.4.3", + "express": "^4.16.2", + "express-session": "^1.15.6" + } + }, + "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { + "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" } }, - "array-flatten": { + "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "bytes": { + "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "call-bind": { + "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "content-disposition": { + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { + "dependencies": { "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", - "requires": { - "cookie": "0.3.1", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" } }, - "cookie-signature": { + "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, - "crc": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.4.4.tgz", - "integrity": "sha1-naHpgOO9RPxck79as9ozeNheRms=" - }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "requires": { + "dependencies": { "ms": "2.0.0" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "destroy": { + "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, - "ee-first": { + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "escape-html": { + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, - "etag": { + "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - } + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "express-session": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.15.6.tgz", - "integrity": "sha1-R7QWDIj0KrcP6KUI4xy/92dXqwo=", - "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "crc": "3.4.4", + "node_modules/express-session": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.2.tgz", + "integrity": "sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", "debug": "2.6.9", - "depd": "~1.1.1", - "on-headers": "~1.0.1", - "parseurl": "~1.3.2", - "uid-safe": "~2.1.5", - "utils-merge": "1.0.1" + "depd": "~2.0.0", + "on-headers": "~1.1.0", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" } }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { + "node_modules/express-session/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, - "dependencies": { - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - } + "engines": { + "node": ">= 0.8" } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "iconv-lite": { + "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { + "license": "MIT", + "dependencies": { "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "ms": { + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "on-finished": { + "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { + "license": "MIT", + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" } }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "random-bytes": { + "node_modules/random-bytes": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", + "engines": { + "node": ">= 0.8" + } }, - "range-parser": { + "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "engines": { + "node": ">= 0.8.0" } }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "~0.19.1" }, - "dependencies": { - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - } + "engines": { + "node": ">= 0.8.0" } }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "license": "MIT", + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" } }, - "uid-safe": { + "node_modules/uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=", - "requires": { + "dependencies": { "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } } } } From 86d9a7fd010ee602770a4aa22df86caf513c1598 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Dec 2025 15:36:24 +0000 Subject: [PATCH 59/64] Bump crossbeam-channel from 0.5.13 to 0.5.15 Bumps [crossbeam-channel](https://github.com/crossbeam-rs/crossbeam) from 0.5.13 to 0.5.15. - [Release notes](https://github.com/crossbeam-rs/crossbeam/releases) - [Changelog](https://github.com/crossbeam-rs/crossbeam/blob/master/CHANGELOG.md) - [Commits](https://github.com/crossbeam-rs/crossbeam/compare/crossbeam-channel-0.5.13...crossbeam-channel-0.5.15) --- updated-dependencies: - dependency-name: crossbeam-channel dependency-version: 0.5.15 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5fb54b2..ad4cba4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,9 +209,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] From da03fd6e915c0b3659af1087f68b7a8b1f7aeac6 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 29 Dec 2025 20:55:04 +0100 Subject: [PATCH 60/64] Update more deps + audit --- Cargo.lock | 727 +++++++++++++++++++++++++---------------------- Cargo.toml | 2 +- src/benchmark.rs | 2 +- 3 files changed, 389 insertions(+), 342 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ad4cba4..2b6ec38 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -46,6 +46,12 @@ dependencies = [ "syn", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "atty" version = "0.2.14" @@ -84,6 +90,12 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + [[package]] name = "bitflags" version = "1.3.2" @@ -116,10 +128,11 @@ checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.1.31" +version = "1.2.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e7962b54006dcfcc61cb72735f4d89bb97061dd6a7ed882ec6b8ee53714c6f" +checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203" dependencies = [ + "find-msvc-tools", "shlex", ] @@ -156,9 +169,9 @@ dependencies = [ [[package]] name = "cookie" -version = "0.17.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ "percent-encoding", "time", @@ -167,12 +180,13 @@ dependencies = [ [[package]] name = "cookie_store" -version = "0.20.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "387461abbc748185c3a6e1673d826918b450b87ff22639429c694619a83b6cf6" +checksum = "3fc4bff745c9b4c7fb1e97b25d13153da2bc7796260141df62378998d070207f" dependencies = [ "cookie", - "idna 0.3.0", + "document-features", + "idna", "log", "publicsuffix", "serde", @@ -243,12 +257,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - [[package]] name = "deranged" version = "0.3.11" @@ -269,6 +277,15 @@ dependencies = [ "syn", ] +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + [[package]] name = "drill" version = "0.8.3" @@ -304,18 +321,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-as-inner" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -338,6 +343,12 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" +[[package]] +name = "find-msvc-tools" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff" + [[package]] name = "flate2" version = "1.0.34" @@ -486,15 +497,15 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", "indexmap", "slab", @@ -515,7 +526,7 @@ version = "7.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d" dependencies = [ - "base64", + "base64 0.21.7", "byteorder", "crossbeam-channel", "flate2", @@ -523,12 +534,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - [[package]] name = "hermit-abi" version = "0.1.19" @@ -551,80 +556,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "hickory-proto" -version = "0.24.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 1.1.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", -] - -[[package]] -name = "hostname" -version = "0.3.1" +name = "http" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" dependencies = [ - "libc", - "match_cfg", - "winapi", + "bytes", + "itoa", ] [[package]] -name = "http" -version = "0.2.12" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "fnv", - "itoa", + "http", ] [[package]] -name = "http-body" -version = "0.4.6" +name = "http-body-util" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ "bytes", + "futures-core", "http", + "http-body", "pin-project-lite", ] @@ -634,47 +594,84 @@ version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hyper" -version = "0.14.31" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" dependencies = [ + "atomic-waker", "bytes", "futures-channel", "futures-core", - "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", - "socket2", + "pin-utils", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] +[[package]] +name = "hyper-rustls" +version = "0.27.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" +dependencies = [ + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", +] + [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2 0.6.1", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", ] [[package]] @@ -758,26 +755,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.1.0" @@ -809,24 +786,22 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "ipconfig" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" -dependencies = [ - "socket2", - "widestring", - "windows-sys 0.48.0", - "winreg", -] - [[package]] name = "ipnet" version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" +[[package]] +name = "iri-string" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "itoa" version = "1.0.11" @@ -835,10 +810,11 @@ checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.72" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -873,14 +849,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" [[package]] -name = "lock_api" -version = "0.4.12" +name = "litrs" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" -dependencies = [ - "autocfg", - "scopeguard", -] +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" [[package]] name = "log" @@ -888,21 +860,6 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "memchr" version = "2.7.4" @@ -1011,9 +968,9 @@ checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.68" +version = "0.10.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" +checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da" dependencies = [ "bitflags 2.6.0", "cfg-if", @@ -1052,9 +1009,9 @@ dependencies = [ [[package]] name = "openssl-sys" -version = "0.9.104" +version = "0.9.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" +checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" dependencies = [ "cc", "libc", @@ -1063,29 +1020,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "parking_lot" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-targets 0.52.6", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -1151,20 +1085,14 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "publicsuffix" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" dependencies = [ - "idna 0.3.0", + "idna", "psl-types", ] -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - [[package]] name = "quote" version = "1.0.37" @@ -1204,15 +1132,6 @@ dependencies = [ "getrandom", ] -[[package]] -name = "redox_syscall" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "regex" version = "1.11.0" @@ -1244,55 +1163,58 @@ checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.11.27" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ - "base64", + "base64 0.22.1", "bytes", "cookie", "cookie_store", "encoding_rs", "futures-core", - "futures-util", "h2", - "hickory-resolver", "http", "http-body", + "http-body-util", "hyper", + "hyper-rustls", "hyper-tls", - "ipnet", + "hyper-util", "js-sys", "log", "mime", "native-tls", - "once_cell", "percent-encoding", "pin-project-lite", - "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", - "system-configuration", "tokio", "tokio-native-tls", + "tower", + "tower-http", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", ] [[package]] -name = "resolv-conf" -version = "0.7.0" +name = "ring" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ - "hostname", - "quick-error", + "cc", + "cfg-if", + "getrandom", + "libc", + "untrusted", + "windows-sys 0.52.0", ] [[package]] @@ -1315,14 +1237,44 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "1.0.4" +name = "rustls" +version = "0.23.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" dependencies = [ - "base64", + "ring", + "rustls-pki-types", + "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + [[package]] name = "ryu" version = "1.0.18" @@ -1338,12 +1290,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - [[package]] name = "security-framework" version = "2.11.1" @@ -1455,6 +1401,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + [[package]] name = "stable_deref_trait" version = "1.2.1" @@ -1467,6 +1423,12 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + [[package]] name = "syn" version = "2.0.82" @@ -1480,9 +1442,12 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "0.1.2" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -1538,26 +1503,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "thiserror" -version = "1.0.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "time" version = "0.3.36" @@ -1599,21 +1544,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "tinyvec" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" version = "1.43.1" @@ -1625,7 +1555,7 @@ dependencies = [ "libc", "mio", "pin-project-lite", - "socket2", + "socket2 0.5.7", "windows-sys 0.52.0", ] @@ -1639,6 +1569,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.12" @@ -1652,6 +1592,45 @@ dependencies = [ "tokio", ] +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" +dependencies = [ + "bitflags 2.6.0", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + [[package]] name = "tower-service" version = "0.3.3" @@ -1665,21 +1644,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", - "tracing-attributes", "tracing-core", ] -[[package]] -name = "tracing-attributes" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "tracing-core" version = "0.1.32" @@ -1695,27 +1662,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "unicode-bidi" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" - [[package]] name = "unicode-ident" version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" -[[package]] -name = "unicode-normalization" -version = "0.1.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-width" version = "0.1.14" @@ -1728,14 +1680,20 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", - "idna 0.5.0", + "idna", "percent-encoding", ] @@ -1780,27 +1738,14 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.95" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", "wasm-bindgen-shared", ] @@ -1818,9 +1763,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1828,22 +1773,25 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ + "bumpalo", "proc-macro2", "quote", "syn", - "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.95" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" @@ -1855,12 +1803,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - [[package]] name = "winapi" version = "0.3.9" @@ -1883,6 +1825,41 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-registry" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" +dependencies = [ + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -1910,6 +1887,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -1934,13 +1920,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -1953,6 +1956,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.48.5" @@ -1965,6 +1974,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.48.5" @@ -1977,12 +1992,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.48.5" @@ -1995,6 +2022,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.48.5" @@ -2007,6 +2040,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.48.5" @@ -2019,6 +2058,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.48.5" @@ -2032,14 +2077,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.50.0" +name = "windows_x86_64_msvc" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "writeable" @@ -2112,6 +2153,12 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + [[package]] name = "zerotrie" version = "0.2.3" diff --git a/Cargo.toml b/Cargo.toml index 1951ecf..028c53d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ serde_yaml = "0.9" url = "2.1.1" linked-hash-map = "0.5.3" tokio = { version = "1.43.1", features = ["time", "net"] } -reqwest = { version = "0.11.11", features = ["cookies", "trust-dns"] } +reqwest = { version = "0.12.28", features = ["cookies", "trust-dns"] } async-trait = "0.1.30" futures = "0.3.5" lazy_static = "1.4.0" diff --git a/src/benchmark.rs b/src/benchmark.rs index b1005cf..368f4fa 100644 --- a/src/benchmark.rs +++ b/src/benchmark.rs @@ -70,7 +70,7 @@ pub fn execute(benchmark_path: &str, report_path_option: Option<&str>, relaxed_i println!(); let threads = std::cmp::min(num_cpus::get(), config.concurrency as usize); - let rt = runtime::Builder::new_multi_thread().enable_all().worker_threads(threads).build().unwrap(); + let rt = runtime::Builder::new_current_thread().enable_all().worker_threads(threads).build().unwrap(); rt.block_on(async { let mut benchmark: Benchmark = Benchmark::new(); From d68c1b743a1952d63abba446c3253bd454d877c9 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 29 Dec 2025 21:30:04 +0100 Subject: [PATCH 61/64] Update benchmark --- README.md | 2 +- example/benchmark.yml | 4 ++-- example/server/package-lock.json | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cffbb7a..e9f7688 100644 --- a/README.md +++ b/README.md @@ -108,7 +108,7 @@ plan: Content-Type: 'application/json' with_items_from_csv: file_name: ./fixtures/transactions.csv - quote_char: "\'" + quote_char: "\\'" - name: Fetch no relative url request: diff --git a/example/benchmark.yml b/example/benchmark.yml index ff8f661..f9d5aa8 100644 --- a/example/benchmark.yml +++ b/example/benchmark.yml @@ -109,7 +109,7 @@ plan: url: /api/users/contacts/{{ item.id }} with_items_from_csv: file_name: ./fixtures/users.csv - quote_char: "\'" + quote_char: "\\'" - name: POST some crafted JSONs stored in CSV request: @@ -120,7 +120,7 @@ plan: Content-Type: 'application/json' with_items_from_csv: file_name: ./fixtures/transactions.csv - quote_char: "\'" + quote_char: "\\'" - name: Fetch no relative url request: diff --git a/example/server/package-lock.json b/example/server/package-lock.json index 1350e89..2e56901 100644 --- a/example/server/package-lock.json +++ b/example/server/package-lock.json @@ -5,6 +5,7 @@ "requires": true, "packages": { "": { + "name": "server", "version": "1.0.0", "license": "ISC", "dependencies": { From d393afb84a55521d027bdf642c841610d5db143c Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 29 Dec 2025 21:37:08 +0100 Subject: [PATCH 62/64] Fix release process --- .github/workflows/release.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 232bc0a..925711e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,6 +3,8 @@ name: Release on: release: types: [published] + workflow_dispatch: null + push: null jobs: release: @@ -23,9 +25,10 @@ jobs: steps: - uses: actions/checkout@master - name: Compile and release - uses: rust-build/rust-build.action@v1.4.0 + uses: rust-build/rust-build.action@v1.4.5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} RUSTTARGET: ${{ matrix.target }} + TOOLCHAIN_VERSION: 1.83.0 EXTRA_FILES: "README.md" ARCHIVE_TYPES: ${{ matrix.archive }} From c4902a643adb05dfe2009ea668943ab1313592ed Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 29 Dec 2025 21:54:38 +0100 Subject: [PATCH 63/64] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9f7688..d6d9f42 100644 --- a/README.md +++ b/README.md @@ -286,7 +286,7 @@ production environments. Full list of cli options, which is available under `drill --help` ``` -drill 0.8.3 +drill 0.9.0 HTTP load testing application written in Rust inspired by Ansible syntax USAGE: From a7c6877abf2163999b78381c479092c92a7b0227 Mon Sep 17 00:00:00 2001 From: Ferran Basora Date: Mon, 29 Dec 2025 22:08:48 +0100 Subject: [PATCH 64/64] Bump version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b6ec38..883e93e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -288,7 +288,7 @@ dependencies = [ [[package]] name = "drill" -version = "0.8.3" +version = "0.9.0" dependencies = [ "async-trait", "clap", diff --git a/Cargo.toml b/Cargo.toml index 028c53d..794dee7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drill" -version = "0.8.3" +version = "0.9.0" authors = ["Ferran Basora "] description = "Drill is a HTTP load testing application written in Rust inspired by Ansible syntax" repository = "https://github.com/fcsonline/drill"