├── rustfmt.toml ├── .gitignore ├── src ├── dev.rs ├── main.rs ├── hit.rs ├── counter.rs ├── config.rs ├── upgrade.rs ├── common.rs ├── error.rs ├── analyze.rs ├── fetch.rs ├── diff.rs ├── search.rs ├── release.rs └── summaries.rs ├── justfile ├── Cargo.toml ├── README.md └── Cargo.lock /rustfmt.toml: -------------------------------------------------------------------------------- 1 | tab_spaces = 2 2 | max_width = 100 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /fetch 2 | /link 3 | /search 4 | /target 5 | **/*.rs.bk 6 | -------------------------------------------------------------------------------- /src/dev.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | impl Upgrade for Summary { 4 | type Output = Summary; 5 | 6 | fn upgrade(self) -> Self::Output { 7 | self 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | mod analyze; 2 | mod common; 3 | mod config; 4 | mod counter; 5 | mod diff; 6 | mod error; 7 | mod fetch; 8 | mod hit; 9 | mod search; 10 | mod summaries; 11 | mod upgrade; 12 | 13 | mod dev; 14 | mod release; 15 | 16 | use crate::common::*; 17 | 18 | fn main() -> Result<(), Error> { 19 | Config::from_args().run() 20 | } 21 | -------------------------------------------------------------------------------- /justfile: -------------------------------------------------------------------------------- 1 | watch +args='test': 2 | cargo watch --ignore fetch --ignore link --ignore search --clear --exec '{{ args }}' 3 | 4 | run USER-SESSION: (search USER-SESSION) fetch analyze 5 | 6 | search USER-SESSION: 7 | cargo run --release -- search --user-session {{USER-SESSION}} 8 | 9 | fetch: 10 | cargo run --release -- fetch 11 | 12 | analyze: 13 | cargo run --release -- analyze 14 | -------------------------------------------------------------------------------- /src/hit.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | #[derive(Debug, Serialize, Deserialize, Ord, PartialOrd, Eq, PartialEq)] 4 | pub(crate) struct Hit { 5 | pub user: String, 6 | pub repo: String, 7 | pub hash: String, 8 | pub path: String, 9 | } 10 | 11 | impl Hit { 12 | pub(crate) fn load_search_dir() -> Result, Error> { 13 | let mut hits = BTreeSet::new(); 14 | 15 | for result in glob("search/*/*.yaml")? { 16 | let path = result?; 17 | 18 | let text = fs::read_to_string(path)?; 19 | 20 | let page_hits = serde_yaml::from_str::>(&text)?; 21 | 22 | hits.extend(page_hits.into_iter()); 23 | } 24 | 25 | Ok(hits) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "janus" 3 | version = "0.0.0" 4 | authors = ["Casey Rodarmor "] 5 | edition = "2018" 6 | publish = false 7 | 8 | [dependencies] 9 | glob = "0.3.0" 10 | http = "0.2.3" 11 | regex = "1.4.5" 12 | scraper = "0.12.0" 13 | serde = "1.0.125" 14 | serde_derive = "1.0.125" 15 | serde_yaml = "0.8.17" 16 | sha2 = "0.9.3" 17 | structopt = "0.3.21" 18 | colored-diff = "0.2.2" 19 | 20 | [dependencies.reqwest] 21 | version = "0.11.2" 22 | features = ["blocking"] 23 | 24 | [dependencies.just_release] 25 | package = "just" 26 | version = "=1.26.0" 27 | 28 | [dependencies.just_dev] 29 | package = "just" 30 | path = "../just" 31 | -------------------------------------------------------------------------------- /src/counter.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | pub struct Counter { 4 | counts: BTreeMap, 5 | } 6 | 7 | impl Counter { 8 | pub fn new() -> Counter { 9 | Counter { 10 | counts: BTreeMap::new(), 11 | } 12 | } 13 | 14 | pub fn insert(&mut self, value: T) { 15 | *self.counts.entry(value).or_insert(0) += 1; 16 | } 17 | 18 | pub fn counts(&self, cutoff: u64) -> Vec<(u64, T)> { 19 | let mut counts: Vec<(u64, T)> = self 20 | .counts 21 | .iter() 22 | .map(|(value, count)| (*count, value.clone())) 23 | .collect(); 24 | 25 | counts.sort(); 26 | counts.reverse(); 27 | counts.retain(|(count, _)| *count >= cutoff); 28 | 29 | counts 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # janus 2 | 3 | Janus is a tool for collecting and analyzing justfiles on GitHub, 4 | inspired by [Crater](https://github.com/rust-lang-nursery/crater). 5 | 6 | ## search 7 | 8 | Search for justfiles on github and download hits to `search/TIMESTAMP/PAGE.yaml`. 9 | 10 | Requires a user session key, because GitHub doesn't allow site-wide searches via 11 | the API, so we are reduced to screen scraping the search page like a wretched 12 | animal. 13 | 14 | `janus search USER-SESSION-KEY` 15 | 16 | ## fetch 17 | 18 | Download justfiles found by search to `fetch/SHA-256.just`. 19 | 20 | `janus fetch` 21 | 22 | ## analyze 23 | 24 | Analyze justfiles downloaded by fetch. It parses justfiles with `v0.4.1` and a 25 | local development copy of just, and compares the results. 26 | 27 | `janus analyze` 28 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | #[derive(StructOpt)] 4 | pub(crate) enum Config { 5 | #[structopt(name = "search")] 6 | Search { 7 | #[structopt(long = "user-session", name = "USER-SESSION")] 8 | user_session: String, 9 | }, 10 | #[structopt(name = "fetch")] 11 | Fetch, 12 | #[structopt(name = "analyze")] 13 | Analyze { 14 | #[structopt( 15 | long = "recipe-count-cutoff", 16 | name = "RECIPE-COUNT-CUTOFF", 17 | default_value = "20" 18 | )] 19 | recipe_count_cutoff: u64, 20 | }, 21 | } 22 | 23 | impl Config { 24 | pub fn run(self) -> Result<(), Error> { 25 | match self { 26 | Config::Search { user_session } => search(user_session), 27 | Config::Fetch => fetch(), 28 | Config::Analyze { 29 | recipe_count_cutoff, 30 | } => analyze(recipe_count_cutoff), 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/upgrade.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | pub trait Upgrade { 4 | type Output; 5 | 6 | fn upgrade(self) -> Self::Output; 7 | } 8 | 9 | impl Upgrade for Vec { 10 | type Output = Vec; 11 | 12 | fn upgrade(self) -> Self::Output { 13 | self.into_iter().map(Upgrade::upgrade).collect() 14 | } 15 | } 16 | 17 | impl Upgrade for BTreeMap { 18 | type Output = BTreeMap; 19 | 20 | fn upgrade(self) -> Self::Output { 21 | self 22 | .into_iter() 23 | .map(|(name, value)| (name, value.upgrade())) 24 | .collect() 25 | } 26 | } 27 | 28 | impl Upgrade for Option { 29 | type Output = Option; 30 | 31 | fn upgrade(self) -> Self::Output { 32 | self.map(Upgrade::upgrade) 33 | } 34 | } 35 | 36 | impl Upgrade for Result { 37 | type Output = Result; 38 | 39 | fn upgrade(self) -> Self::Output { 40 | self.map(Upgrade::upgrade) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/common.rs: -------------------------------------------------------------------------------- 1 | pub(crate) use std::{ 2 | collections::{BTreeMap, BTreeSet}, 3 | fmt::{self, Display, Formatter}, 4 | fs, io, os, 5 | path::{Path, PathBuf}, 6 | thread, 7 | time::{Duration, Instant}, 8 | }; 9 | 10 | pub(crate) use glob::glob; 11 | pub(crate) use regex::Regex; 12 | pub(crate) use reqwest::{ 13 | blocking::Client, 14 | header::{HeaderMap, COOKIE}, 15 | }; 16 | pub(crate) use scraper::{Html, Selector}; 17 | pub(crate) use serde_derive::{Deserialize, Serialize}; 18 | pub(crate) use sha2::Sha256; 19 | pub(crate) use structopt::StructOpt; 20 | 21 | pub(crate) use just_dev::summary::{ 22 | Assignment, ConditionalOperator, Dependency, Expression, Fragment, Line, Parameter, 23 | ParameterKind, Recipe, Summary, 24 | }; 25 | 26 | pub(crate) use crate::{analyze::analyze, fetch::fetch, search::search}; 27 | 28 | pub(crate) use crate::{ 29 | config::Config, counter::Counter, diff::Diff, error::Error, hit::Hit, summaries::Summaries, 30 | upgrade::Upgrade, 31 | }; 32 | 33 | #[allow(unused_imports)] 34 | pub(crate) use sha2::Digest; 35 | -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | #[derive(Debug)] 4 | pub enum Error { 5 | Reqwest(reqwest::Error), 6 | InvalidHeaderValue(http::header::InvalidHeaderValue), 7 | Io(io::Error), 8 | Serde(serde_yaml::Error), 9 | Pattern(glob::PatternError), 10 | Glob(glob::GlobError), 11 | Status(http::StatusCode), 12 | Empty, 13 | } 14 | 15 | impl From for Error { 16 | fn from(error: reqwest::Error) -> Error { 17 | Error::Reqwest(error) 18 | } 19 | } 20 | 21 | impl From for Error { 22 | fn from(error: http::header::InvalidHeaderValue) -> Error { 23 | Error::InvalidHeaderValue(error) 24 | } 25 | } 26 | 27 | impl From for Error { 28 | fn from(error: io::Error) -> Error { 29 | Error::Io(error) 30 | } 31 | } 32 | 33 | impl From for Error { 34 | fn from(error: serde_yaml::Error) -> Error { 35 | Error::Serde(error) 36 | } 37 | } 38 | 39 | impl From for Error { 40 | fn from(error: glob::PatternError) -> Error { 41 | Error::Pattern(error) 42 | } 43 | } 44 | 45 | impl From for Error { 46 | fn from(error: glob::GlobError) -> Error { 47 | Error::Glob(error) 48 | } 49 | } 50 | 51 | impl From for Error { 52 | fn from(error: http::StatusCode) -> Error { 53 | Error::Status(error) 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/analyze.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | pub(crate) fn analyze(recipe_count_cutoff: u64) -> Result<(), Error> { 4 | let mut paths = glob("fetch/*.just")?.collect::, glob::GlobError>>()?; 5 | 6 | paths.sort(); 7 | 8 | println!("Analyzing {} justfiles...", paths.len()); 9 | 10 | let release = Summaries::collect(&paths, just_release::summary::summary)?; 11 | 12 | let dev = Summaries::collect(&paths, just_dev::summary::summary)?; 13 | 14 | dev.compare(&release); 15 | 16 | println!("{}", dev); 17 | println!("----"); 18 | println!("shebangs:"); 19 | for (count, shebang) in dev.shebang_counts(0) { 20 | println!(" {:3} {}", count, shebang); 21 | } 22 | println!(); 23 | println!("recipes:"); 24 | for (count, recipe) in dev.recipe_names(recipe_count_cutoff) { 25 | println!(" {:3} {}", count, recipe); 26 | } 27 | println!(); 28 | println!("justfile names:"); 29 | let hits = Hit::load_search_dir()?; 30 | let mut counts = BTreeMap::new(); 31 | for hit in hits { 32 | let filename = hit.path.split('/').last().unwrap().to_owned(); 33 | *counts.entry(filename).or_insert(0) += 1; 34 | } 35 | 36 | let mut counts = counts 37 | .into_iter() 38 | .map(|(filename, count)| (count, filename)) 39 | .collect::>(); 40 | 41 | counts.sort(); 42 | counts.reverse(); 43 | 44 | for (count, filename) in counts { 45 | println!(" {:3} {}", count, filename); 46 | } 47 | 48 | Ok(()) 49 | } 50 | -------------------------------------------------------------------------------- /src/fetch.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | fn fetch_url(hit: &Hit) -> String { 4 | format!( 5 | "https://raw.githubusercontent.com/{}/{}/{}{}", 6 | hit.user, hit.repo, hit.hash, hit.path 7 | ) 8 | } 9 | 10 | pub(crate) fn fetch() -> Result<(), Error> { 11 | let hits = Hit::load_search_dir()?; 12 | 13 | eprintln!("Fetching {} hits...", hits.len()); 14 | 15 | let fetch_dir = Path::new("fetch"); 16 | 17 | fs::create_dir_all(fetch_dir)?; 18 | 19 | let mut new = 0; 20 | 21 | for hit in &hits { 22 | let url = fetch_url(hit); 23 | eprint!("/{}/{}{}... ", hit.user, hit.repo, hit.path); 24 | 25 | match reqwest::blocking::get(&url) { 26 | Ok(mut response) => { 27 | let status = response.status(); 28 | 29 | if status == 404 { 30 | eprintln!("missing"); 31 | continue; 32 | } 33 | 34 | if !response.status().is_success() { 35 | return Err(response.status().into()); 36 | } 37 | 38 | let mut data = Vec::new(); 39 | response.copy_to(&mut data)?; 40 | let digest = Sha256::digest(&data); 41 | let filename = format!("{:X}.just", digest); 42 | let path = Path::new("fetch").join(&filename); 43 | 44 | if path.exists() { 45 | eprintln!("old"); 46 | } else { 47 | fs::write(&path, data)?; 48 | eprintln!("new"); 49 | new += 1; 50 | } 51 | 52 | let mut link = Path::new("link") 53 | .join(&hit.user) 54 | .join(&hit.repo) 55 | .join(&hit.hash); 56 | fs::create_dir_all(&link)?; 57 | 58 | link.push(&filename); 59 | 60 | if fs::read_link(&link).is_err() { 61 | let dest = Path::new("..").join("..").join("..").join("..").join(path); 62 | os::unix::fs::symlink(&dest, &link)?; 63 | } 64 | } 65 | 66 | Err(err) => eprintln!("failed: {}", err), 67 | } 68 | } 69 | 70 | println!( 71 | "fetched {} new justfiles out of {} total hits", 72 | new, 73 | hits.len() 74 | ); 75 | 76 | Ok(()) 77 | } 78 | -------------------------------------------------------------------------------- /src/diff.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | #[derive(PartialOrd, Ord, PartialEq, Eq)] 4 | pub enum Diff<'a> { 5 | Summary { old: &'a Summary, new: &'a Summary }, 6 | Error { old: &'a str, new: &'a str }, 7 | SummaryToError { old: &'a Summary, new: &'a str }, 8 | ErrorToSummary { old: &'a str, new: &'a Summary }, 9 | } 10 | 11 | impl<'a> Diff<'a> { 12 | pub fn from_pair( 13 | pair: (&'a Result, &'a Result), 14 | ) -> Option> { 15 | match pair { 16 | (Ok(old), Ok(new)) => { 17 | if new != old { 18 | Some(Diff::Summary { old, new }) 19 | } else { 20 | None 21 | } 22 | } 23 | (Err(old), Err(new)) => { 24 | if new != old { 25 | Some(Diff::Error { old, new }) 26 | } else { 27 | None 28 | } 29 | } 30 | (Err(old), Ok(new)) => Some(Diff::ErrorToSummary { old, new }), 31 | (Ok(old), Err(new)) => Some(Diff::SummaryToError { old, new }), 32 | } 33 | } 34 | } 35 | 36 | impl<'a> Display for Diff<'a> { 37 | fn fmt(&self, f: &mut Formatter) -> fmt::Result { 38 | match self { 39 | Diff::Summary { old, new } => { 40 | writeln!(f, "summary mismatch:")?; 41 | let old = format!("{:?}", old); 42 | let new = format!("{:?}", new); 43 | write!( 44 | f, 45 | "{}", 46 | colored_diff::PrettyDifference { 47 | expected: &old, 48 | actual: &new 49 | } 50 | )?; 51 | } 52 | Diff::Error { old, new } => { 53 | writeln!(f, "error mismatch:")?; 54 | write!( 55 | f, 56 | "{}", 57 | colored_diff::PrettyDifference { 58 | expected: &old, 59 | actual: &new 60 | } 61 | )?; 62 | } 63 | Diff::SummaryToError { old, new } => { 64 | writeln!(f, "old summary is now error:")?; 65 | writeln!(f, "old summary:")?; 66 | writeln!(f, "{:?}", old)?; 67 | writeln!(f, "new error:")?; 68 | write!(f, "{}", new)?; 69 | } 70 | Diff::ErrorToSummary { old, new } => { 71 | writeln!(f, "old error is now summary:")?; 72 | writeln!(f, "old error:")?; 73 | writeln!(f, "{}", old)?; 74 | writeln!(f, "new summary:")?; 75 | write!(f, "{:?}", new)?; 76 | } 77 | } 78 | 79 | Ok(()) 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/search.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | use std::time::{SystemTime, UNIX_EPOCH}; 4 | 5 | const SEARCH_URL_TEMPLATE: &str = "https://github.com/search?q=filename%3Ajustfile&type=Code"; 6 | 7 | const DELAY: Duration = Duration::from_secs(10); 8 | 9 | fn search_url(page: u64) -> String { 10 | format!("{}&p={}", SEARCH_URL_TEMPLATE, page) 11 | } 12 | 13 | pub(crate) fn search(user_session: String) -> Result<(), Error> { 14 | let mut headers = HeaderMap::new(); 15 | 16 | headers.insert(COOKIE, format!("user_session={}", user_session).parse()?); 17 | 18 | let a_href = Selector::parse("a[href]").unwrap(); 19 | 20 | let re = Regex::new( 21 | r"(?ix) 22 | ^ 23 | /(?P[^/]+) 24 | /(?P[^/]+) 25 | /blob 26 | /(?P[0-9a-f]{40}) 27 | (?P.*/justfile) 28 | $ 29 | ", 30 | ) 31 | .unwrap(); 32 | 33 | let client = Client::builder().default_headers(headers).build()?; 34 | 35 | let timestamp = SystemTime::now() 36 | .duration_since(UNIX_EPOCH) 37 | .unwrap() 38 | .as_secs(); 39 | 40 | let search_dir = Path::new("search").join(timestamp.to_string()); 41 | 42 | fs::create_dir_all(&search_dir)?; 43 | 44 | for page in 1.. { 45 | let start = Instant::now(); 46 | 47 | eprint!("Requesting page {}... ", page); 48 | let search_url = search_url(page); 49 | let response = client.get(&search_url).send()?; 50 | let status = response.status(); 51 | let body = response.text()?; 52 | 53 | if status == 404 { 54 | break; 55 | } 56 | 57 | if !status.is_success() { 58 | eprintln!("Request failed: {}", status); 59 | eprintln!("{}", body); 60 | return Err(status.into()); 61 | } 62 | 63 | let html = Html::parse_document(&body); 64 | 65 | let mut hits = BTreeSet::new(); 66 | 67 | for a in html.select(&a_href) { 68 | let value = a.value().attr("href").unwrap(); 69 | 70 | if let Some(captures) = re.captures(value) { 71 | let hit = Hit { 72 | user: captures.name("user").unwrap().as_str().to_owned(), 73 | repo: captures.name("repo").unwrap().as_str().to_owned(), 74 | hash: captures.name("hash").unwrap().as_str().to_owned(), 75 | path: captures.name("path").unwrap().as_str().to_owned(), 76 | }; 77 | 78 | hits.insert(hit); 79 | } 80 | } 81 | 82 | eprintln!("{} hits", hits.len()); 83 | 84 | if hits.is_empty() { 85 | return Err(Error::Empty); 86 | } 87 | 88 | let serialized = serde_yaml::to_string(&hits.into_iter().collect::>()).unwrap(); 89 | 90 | let path = search_dir.join(&format!("{}.yaml", page)); 91 | 92 | fs::write(path, &serialized).unwrap(); 93 | 94 | let end = Instant::now(); 95 | 96 | if start + DELAY > end { 97 | thread::sleep(DELAY); 98 | } 99 | } 100 | 101 | Ok(()) 102 | } 103 | -------------------------------------------------------------------------------- /src/release.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | use just_release::summary as release; 4 | 5 | impl Upgrade for release::Summary { 6 | type Output = Summary; 7 | 8 | fn upgrade(self) -> Self::Output { 9 | Summary { 10 | assignments: self.assignments.upgrade(), 11 | recipes: self.recipes.upgrade(), 12 | } 13 | } 14 | } 15 | 16 | impl Upgrade for release::Assignment { 17 | type Output = Assignment; 18 | 19 | fn upgrade(self) -> Self::Output { 20 | Assignment { 21 | exported: self.exported, 22 | expression: self.expression.upgrade(), 23 | } 24 | } 25 | } 26 | 27 | impl Upgrade for release::Recipe { 28 | type Output = Recipe; 29 | 30 | fn upgrade(self) -> Self::Output { 31 | Recipe { 32 | aliases: self.aliases, 33 | dependencies: self.dependencies.upgrade(), 34 | lines: self.lines.upgrade(), 35 | private: self.private, 36 | quiet: self.quiet, 37 | shebang: self.shebang, 38 | parameters: self.parameters.upgrade(), 39 | } 40 | } 41 | } 42 | 43 | impl Upgrade for release::Line { 44 | type Output = Line; 45 | 46 | fn upgrade(self) -> Self::Output { 47 | Line { 48 | fragments: self.fragments.upgrade(), 49 | } 50 | } 51 | } 52 | 53 | impl Upgrade for release::Fragment { 54 | type Output = Fragment; 55 | 56 | fn upgrade(self) -> Self::Output { 57 | match self { 58 | release::Fragment::Text { text } => Fragment::Text { text }, 59 | release::Fragment::Expression { expression } => Fragment::Expression { 60 | expression: expression.upgrade(), 61 | }, 62 | } 63 | } 64 | } 65 | 66 | impl Upgrade for release::Expression { 67 | type Output = Expression; 68 | 69 | fn upgrade(self) -> Self::Output { 70 | match self { 71 | release::Expression::Conditional { 72 | lhs, 73 | rhs, 74 | then, 75 | otherwise, 76 | operator, 77 | } => Expression::Conditional { 78 | lhs: Box::new(lhs.upgrade()), 79 | rhs: Box::new(rhs.upgrade()), 80 | then: Box::new(then.upgrade()), 81 | otherwise: Box::new(otherwise.upgrade()), 82 | operator: operator.upgrade(), 83 | }, 84 | release::Expression::Backtick { command } => Expression::Backtick { command }, 85 | release::Expression::Call { name, arguments } => Expression::Call { 86 | name, 87 | arguments: arguments.upgrade(), 88 | }, 89 | release::Expression::Concatenation { lhs, rhs } => Expression::Concatenation { 90 | lhs: Box::new(lhs.upgrade()), 91 | rhs: Box::new(rhs.upgrade()), 92 | }, 93 | release::Expression::Join { lhs, rhs } => Expression::Join { 94 | lhs: lhs.map(|lhs| Box::new(lhs.upgrade())), 95 | rhs: Box::new(rhs.upgrade()), 96 | }, 97 | release::Expression::String { text } => Expression::String { text }, 98 | release::Expression::Variable { name } => Expression::Variable { name }, 99 | } 100 | } 101 | } 102 | 103 | impl Upgrade for release::ConditionalOperator { 104 | type Output = ConditionalOperator; 105 | 106 | fn upgrade(self) -> Self::Output { 107 | match self { 108 | Self::Equality => Self::Output::Equality, 109 | Self::Inequality => Self::Output::Inequality, 110 | Self::RegexMatch => Self::Output::RegexMatch, 111 | } 112 | } 113 | } 114 | 115 | impl Upgrade for release::Parameter { 116 | type Output = Parameter; 117 | 118 | fn upgrade(self) -> Self::Output { 119 | Parameter { 120 | kind: self.kind.upgrade(), 121 | name: self.name, 122 | default: self.default.upgrade(), 123 | } 124 | } 125 | } 126 | 127 | impl Upgrade for release::ParameterKind { 128 | type Output = ParameterKind; 129 | 130 | fn upgrade(self) -> Self::Output { 131 | match self { 132 | release::ParameterKind::Plus => ParameterKind::Plus, 133 | release::ParameterKind::Singular => ParameterKind::Singular, 134 | release::ParameterKind::Star => ParameterKind::Star, 135 | } 136 | } 137 | } 138 | 139 | impl Upgrade for release::Dependency { 140 | type Output = Dependency; 141 | 142 | fn upgrade(self) -> Self::Output { 143 | Dependency { 144 | recipe: self.recipe, 145 | arguments: self.arguments.upgrade(), 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /src/summaries.rs: -------------------------------------------------------------------------------- 1 | use crate::common::*; 2 | 3 | pub struct Summaries { 4 | duration: Duration, 5 | paths: Vec, 6 | results: Vec>, 7 | } 8 | 9 | impl Summaries { 10 | pub fn collect>( 11 | paths: &[PathBuf], 12 | f: fn(&Path) -> Result, io::Error>, 13 | ) -> Result { 14 | let mut results = Vec::new(); 15 | 16 | let start = Instant::now(); 17 | 18 | for path in paths { 19 | results.push(f(path)?); 20 | } 21 | 22 | let duration = start.elapsed(); 23 | 24 | let results = results.upgrade(); 25 | 26 | Ok(Summaries { 27 | paths: paths.iter().cloned().collect(), 28 | duration, 29 | results, 30 | }) 31 | } 32 | 33 | pub fn ok(&self) -> impl Iterator { 34 | self.results.iter().flat_map(|result| result.as_ref().ok()) 35 | } 36 | 37 | pub fn err(&self) -> impl Iterator { 38 | self 39 | .results 40 | .iter() 41 | .flat_map(|result| result.as_ref().err().map(String::as_str)) 42 | } 43 | 44 | pub fn justfiles_with_export(&self) -> usize { 45 | self 46 | .ok() 47 | .filter(|summary| { 48 | summary 49 | .assignments 50 | .values() 51 | .any(|assignment| assignment.exported) 52 | }) 53 | .count() 54 | } 55 | 56 | pub fn justfiles_with_private_recipe(&self) -> usize { 57 | self 58 | .ok() 59 | .filter(|summary| summary.recipes.values().any(|recipe| recipe.private)) 60 | .count() 61 | } 62 | 63 | pub fn justfiles_with_quiet_recipe(&self) -> usize { 64 | self 65 | .ok() 66 | .filter(|summary| summary.recipes.values().any(|recipe| recipe.quiet)) 67 | .count() 68 | } 69 | 70 | pub fn justfiles_with_alias(&self) -> usize { 71 | self 72 | .ok() 73 | .filter(|summary| { 74 | summary 75 | .recipes 76 | .values() 77 | .any(|recipe| !recipe.aliases.is_empty()) 78 | }) 79 | .count() 80 | } 81 | 82 | pub fn justfiles_with_shebang_recipe(&self) -> usize { 83 | self 84 | .ok() 85 | .filter(|summary| summary.recipes.values().any(|recipe| recipe.shebang)) 86 | .count() 87 | } 88 | 89 | pub fn justfiles_with_all_quiet_recipes(&self) -> usize { 90 | self 91 | .ok() 92 | .filter(|summary| summary.recipes.values().all(|recipe| recipe.quiet)) 93 | .count() 94 | } 95 | 96 | pub fn shebang_counts(&self, cutoff: u64) -> Vec<(u64, String)> { 97 | let mut counter: Counter = Counter::new(); 98 | 99 | for summary in self.ok() { 100 | for recipe in summary.recipes.values() { 101 | if recipe.shebang { 102 | if let [Fragment::Text { text }] = recipe.lines[0].fragments.as_slice() { 103 | counter.insert(text.clone()); 104 | } 105 | } 106 | } 107 | } 108 | 109 | counter.counts(cutoff) 110 | } 111 | 112 | pub fn recipe_names(&self, cutoff: u64) -> Vec<(u64, String)> { 113 | let mut counter: Counter = Counter::new(); 114 | 115 | for summary in self.ok() { 116 | for name in summary.recipes.keys().cloned() { 117 | counter.insert(name); 118 | } 119 | } 120 | 121 | counter.counts(cutoff) 122 | } 123 | 124 | pub fn compare(&self, old: &Summaries) { 125 | if self.duration > old.duration { 126 | let increase = self.duration - old.duration; 127 | println!( 128 | "new version is slower than old version: +{}s", 129 | increase.as_millis() as f64 / 1000.0 130 | ); 131 | } 132 | 133 | if self.duration < old.duration { 134 | let decrease = old.duration - self.duration; 135 | println!( 136 | "new version is faster than old version: -{}s", 137 | decrease.as_millis() as f64 / 1000.0 138 | ); 139 | } 140 | 141 | if self.results.len() != old.results.len() { 142 | panic!( 143 | "Result length mismatch: {} != {}", 144 | self.results.len(), 145 | old.results.len() 146 | ); 147 | } 148 | 149 | if self.paths != old.paths { 150 | panic!("Summary path mismatch"); 151 | } 152 | 153 | let mut diffs = old 154 | .results 155 | .iter() 156 | .zip(self.results.iter()) 157 | .map(Diff::from_pair) 158 | .zip(self.paths.iter().map(PathBuf::as_path)) 159 | .collect::, &Path)>>(); 160 | 161 | diffs.sort(); 162 | 163 | for (diff, path) in diffs { 164 | if let Some(diff) = diff { 165 | println!("-----------------"); 166 | println!("diff in {}:", path.display()); 167 | println!("{}", diff); 168 | } 169 | } 170 | } 171 | } 172 | 173 | impl Display for Summaries { 174 | fn fmt(&self, f: &mut Formatter) -> fmt::Result { 175 | writeln!( 176 | f, 177 | "total: {}", 178 | self.results.len() 179 | )?; 180 | writeln!(f, "ok: {}", self.ok().count())?; 181 | writeln!( 182 | f, 183 | "err: {}", 184 | self.err().count() 185 | )?; 186 | writeln!( 187 | f, 188 | "time: {}s", 189 | self.duration.as_millis() as f64 / 1000.0 190 | )?; 191 | writeln!( 192 | f, 193 | "justfiles with export: {}", 194 | self.justfiles_with_export() 195 | )?; 196 | writeln!( 197 | f, 198 | "justfiles with private recipe: {}", 199 | self.justfiles_with_private_recipe() 200 | )?; 201 | writeln!( 202 | f, 203 | "justfiles with quiet recipe: {}", 204 | self.justfiles_with_quiet_recipe() 205 | )?; 206 | writeln!( 207 | f, 208 | "justfiles with alias: {}", 209 | self.justfiles_with_alias() 210 | )?; 211 | writeln!( 212 | f, 213 | "justfiles with shebang recipe: {}", 214 | self.justfiles_with_shebang_recipe() 215 | )?; 216 | writeln!( 217 | f, 218 | "justfiles with all quiet recipes: {}", 219 | self.justfiles_with_all_quiet_recipes() 220 | )?; 221 | 222 | Ok(()) 223 | } 224 | } 225 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.21.0" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler" 16 | version = "1.0.2" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.3" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "ansi_term" 31 | version = "0.12.1" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 34 | dependencies = [ 35 | "winapi", 36 | ] 37 | 38 | [[package]] 39 | name = "anstream" 40 | version = "0.6.14" 41 | source = "registry+https://github.com/rust-lang/crates.io-index" 42 | checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" 43 | dependencies = [ 44 | "anstyle", 45 | "anstyle-parse", 46 | "anstyle-query", 47 | "anstyle-wincon", 48 | "colorchoice", 49 | "is_terminal_polyfill", 50 | "utf8parse", 51 | ] 52 | 53 | [[package]] 54 | name = "anstyle" 55 | version = "1.0.7" 56 | source = "registry+https://github.com/rust-lang/crates.io-index" 57 | checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" 58 | 59 | [[package]] 60 | name = "anstyle-parse" 61 | version = "0.2.4" 62 | source = "registry+https://github.com/rust-lang/crates.io-index" 63 | checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" 64 | dependencies = [ 65 | "utf8parse", 66 | ] 67 | 68 | [[package]] 69 | name = "anstyle-query" 70 | version = "1.0.3" 71 | source = "registry+https://github.com/rust-lang/crates.io-index" 72 | checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" 73 | dependencies = [ 74 | "windows-sys 0.52.0", 75 | ] 76 | 77 | [[package]] 78 | name = "anstyle-wincon" 79 | version = "3.0.3" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" 82 | dependencies = [ 83 | "anstyle", 84 | "windows-sys 0.52.0", 85 | ] 86 | 87 | [[package]] 88 | name = "arrayref" 89 | version = "0.3.7" 90 | source = "registry+https://github.com/rust-lang/crates.io-index" 91 | checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" 92 | 93 | [[package]] 94 | name = "arrayvec" 95 | version = "0.7.4" 96 | source = "registry+https://github.com/rust-lang/crates.io-index" 97 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" 98 | 99 | [[package]] 100 | name = "atty" 101 | version = "0.2.14" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 104 | dependencies = [ 105 | "hermit-abi 0.1.19", 106 | "libc", 107 | "winapi", 108 | ] 109 | 110 | [[package]] 111 | name = "autocfg" 112 | version = "1.3.0" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 115 | 116 | [[package]] 117 | name = "backtrace" 118 | version = "0.3.71" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" 121 | dependencies = [ 122 | "addr2line", 123 | "cc", 124 | "cfg-if", 125 | "libc", 126 | "miniz_oxide", 127 | "object", 128 | "rustc-demangle", 129 | ] 130 | 131 | [[package]] 132 | name = "base64" 133 | version = "0.21.7" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 136 | 137 | [[package]] 138 | name = "bitflags" 139 | version = "1.3.2" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 142 | 143 | [[package]] 144 | name = "bitflags" 145 | version = "2.5.0" 146 | source = "registry+https://github.com/rust-lang/crates.io-index" 147 | checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" 148 | 149 | [[package]] 150 | name = "blake3" 151 | version = "1.5.1" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" 154 | dependencies = [ 155 | "arrayref", 156 | "arrayvec", 157 | "cc", 158 | "cfg-if", 159 | "constant_time_eq", 160 | "memmap2", 161 | "rayon", 162 | ] 163 | 164 | [[package]] 165 | name = "block-buffer" 166 | version = "0.9.0" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 169 | dependencies = [ 170 | "generic-array", 171 | ] 172 | 173 | [[package]] 174 | name = "block-buffer" 175 | version = "0.10.4" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 178 | dependencies = [ 179 | "generic-array", 180 | ] 181 | 182 | [[package]] 183 | name = "bstr" 184 | version = "0.2.17" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223" 187 | dependencies = [ 188 | "lazy_static", 189 | "memchr", 190 | "regex-automata 0.1.10", 191 | ] 192 | 193 | [[package]] 194 | name = "bumpalo" 195 | version = "3.16.0" 196 | source = "registry+https://github.com/rust-lang/crates.io-index" 197 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 198 | 199 | [[package]] 200 | name = "byteorder" 201 | version = "1.5.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 204 | 205 | [[package]] 206 | name = "bytes" 207 | version = "1.6.0" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" 210 | 211 | [[package]] 212 | name = "camino" 213 | version = "1.1.7" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" 216 | 217 | [[package]] 218 | name = "cc" 219 | version = "1.0.98" 220 | source = "registry+https://github.com/rust-lang/crates.io-index" 221 | checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" 222 | 223 | [[package]] 224 | name = "cfg-if" 225 | version = "1.0.0" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 228 | 229 | [[package]] 230 | name = "cfg_aliases" 231 | version = "0.1.1" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" 234 | 235 | [[package]] 236 | name = "clap" 237 | version = "2.34.0" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" 240 | dependencies = [ 241 | "ansi_term", 242 | "atty", 243 | "bitflags 1.3.2", 244 | "strsim 0.8.0", 245 | "term_size", 246 | "textwrap", 247 | "unicode-width", 248 | "vec_map", 249 | ] 250 | 251 | [[package]] 252 | name = "clap" 253 | version = "4.5.4" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" 256 | dependencies = [ 257 | "clap_builder", 258 | ] 259 | 260 | [[package]] 261 | name = "clap_builder" 262 | version = "4.5.2" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" 265 | dependencies = [ 266 | "anstream", 267 | "anstyle", 268 | "clap_lex", 269 | "strsim 0.11.1", 270 | "terminal_size", 271 | ] 272 | 273 | [[package]] 274 | name = "clap_complete" 275 | version = "4.5.2" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "dd79504325bf38b10165b02e89b4347300f855f273c4cb30c4a3209e6583275e" 278 | dependencies = [ 279 | "clap 4.5.4", 280 | ] 281 | 282 | [[package]] 283 | name = "clap_lex" 284 | version = "0.7.0" 285 | source = "registry+https://github.com/rust-lang/crates.io-index" 286 | checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" 287 | 288 | [[package]] 289 | name = "clap_mangen" 290 | version = "0.2.20" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | checksum = "e1dd95b5ebb5c1c54581dd6346f3ed6a79a3eef95dd372fc2ac13d535535300e" 293 | dependencies = [ 294 | "clap 4.5.4", 295 | "roff", 296 | ] 297 | 298 | [[package]] 299 | name = "colorchoice" 300 | version = "1.0.1" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" 303 | 304 | [[package]] 305 | name = "colored-diff" 306 | version = "0.2.3" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "410208eb08c3f3ad44b95b51c4fc0d5993cbcc9dd39cfadb4214b9115a97dcb5" 309 | dependencies = [ 310 | "ansi_term", 311 | "dissimilar", 312 | "itertools", 313 | ] 314 | 315 | [[package]] 316 | name = "constant_time_eq" 317 | version = "0.3.0" 318 | source = "registry+https://github.com/rust-lang/crates.io-index" 319 | checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" 320 | 321 | [[package]] 322 | name = "convert_case" 323 | version = "0.4.0" 324 | source = "registry+https://github.com/rust-lang/crates.io-index" 325 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 326 | 327 | [[package]] 328 | name = "core-foundation" 329 | version = "0.9.4" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 332 | dependencies = [ 333 | "core-foundation-sys", 334 | "libc", 335 | ] 336 | 337 | [[package]] 338 | name = "core-foundation-sys" 339 | version = "0.8.6" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" 342 | 343 | [[package]] 344 | name = "cpufeatures" 345 | version = "0.2.12" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" 348 | dependencies = [ 349 | "libc", 350 | ] 351 | 352 | [[package]] 353 | name = "crossbeam-deque" 354 | version = "0.8.5" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 357 | dependencies = [ 358 | "crossbeam-epoch", 359 | "crossbeam-utils", 360 | ] 361 | 362 | [[package]] 363 | name = "crossbeam-epoch" 364 | version = "0.9.18" 365 | source = "registry+https://github.com/rust-lang/crates.io-index" 366 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 367 | dependencies = [ 368 | "crossbeam-utils", 369 | ] 370 | 371 | [[package]] 372 | name = "crossbeam-utils" 373 | version = "0.8.20" 374 | source = "registry+https://github.com/rust-lang/crates.io-index" 375 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 376 | 377 | [[package]] 378 | name = "crypto-common" 379 | version = "0.1.6" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 382 | dependencies = [ 383 | "generic-array", 384 | "typenum", 385 | ] 386 | 387 | [[package]] 388 | name = "cssparser" 389 | version = "0.27.2" 390 | source = "registry+https://github.com/rust-lang/crates.io-index" 391 | checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a" 392 | dependencies = [ 393 | "cssparser-macros", 394 | "dtoa-short", 395 | "itoa 0.4.8", 396 | "matches", 397 | "phf", 398 | "proc-macro2", 399 | "quote", 400 | "smallvec", 401 | "syn 1.0.109", 402 | ] 403 | 404 | [[package]] 405 | name = "cssparser-macros" 406 | version = "0.6.1" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" 409 | dependencies = [ 410 | "quote", 411 | "syn 2.0.66", 412 | ] 413 | 414 | [[package]] 415 | name = "ctrlc" 416 | version = "3.4.4" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345" 419 | dependencies = [ 420 | "nix", 421 | "windows-sys 0.52.0", 422 | ] 423 | 424 | [[package]] 425 | name = "derivative" 426 | version = "2.2.0" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 429 | dependencies = [ 430 | "proc-macro2", 431 | "quote", 432 | "syn 1.0.109", 433 | ] 434 | 435 | [[package]] 436 | name = "derive_more" 437 | version = "0.99.17" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" 440 | dependencies = [ 441 | "convert_case", 442 | "proc-macro2", 443 | "quote", 444 | "rustc_version", 445 | "syn 1.0.109", 446 | ] 447 | 448 | [[package]] 449 | name = "digest" 450 | version = "0.9.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 453 | dependencies = [ 454 | "generic-array", 455 | ] 456 | 457 | [[package]] 458 | name = "digest" 459 | version = "0.10.7" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 462 | dependencies = [ 463 | "block-buffer 0.10.4", 464 | "crypto-common", 465 | ] 466 | 467 | [[package]] 468 | name = "dirs" 469 | version = "5.0.1" 470 | source = "registry+https://github.com/rust-lang/crates.io-index" 471 | checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" 472 | dependencies = [ 473 | "dirs-sys", 474 | ] 475 | 476 | [[package]] 477 | name = "dirs-sys" 478 | version = "0.4.1" 479 | source = "registry+https://github.com/rust-lang/crates.io-index" 480 | checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" 481 | dependencies = [ 482 | "libc", 483 | "option-ext", 484 | "redox_users", 485 | "windows-sys 0.48.0", 486 | ] 487 | 488 | [[package]] 489 | name = "dissimilar" 490 | version = "1.0.9" 491 | source = "registry+https://github.com/rust-lang/crates.io-index" 492 | checksum = "59f8e79d1fbf76bdfbde321e902714bf6c49df88a7dda6fc682fc2979226962d" 493 | 494 | [[package]] 495 | name = "dotenvy" 496 | version = "0.15.7" 497 | source = "registry+https://github.com/rust-lang/crates.io-index" 498 | checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" 499 | 500 | [[package]] 501 | name = "dtoa" 502 | version = "1.0.9" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" 505 | 506 | [[package]] 507 | name = "dtoa-short" 508 | version = "0.3.4" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" 511 | dependencies = [ 512 | "dtoa", 513 | ] 514 | 515 | [[package]] 516 | name = "edit-distance" 517 | version = "2.1.0" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "bbbaaaf38131deb9ca518a274a45bfdb8771f139517b073b16c2d3d32ae5037b" 520 | 521 | [[package]] 522 | name = "ego-tree" 523 | version = "0.6.2" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "3a68a4904193147e0a8dec3314640e6db742afd5f6e634f428a6af230d9b3591" 526 | 527 | [[package]] 528 | name = "either" 529 | version = "1.12.0" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" 532 | 533 | [[package]] 534 | name = "encoding_rs" 535 | version = "0.8.34" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 538 | dependencies = [ 539 | "cfg-if", 540 | ] 541 | 542 | [[package]] 543 | name = "env_filter" 544 | version = "0.1.0" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" 547 | dependencies = [ 548 | "log", 549 | "regex", 550 | ] 551 | 552 | [[package]] 553 | name = "env_logger" 554 | version = "0.11.3" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" 557 | dependencies = [ 558 | "anstream", 559 | "anstyle", 560 | "env_filter", 561 | "humantime", 562 | "log", 563 | ] 564 | 565 | [[package]] 566 | name = "equivalent" 567 | version = "1.0.1" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 570 | 571 | [[package]] 572 | name = "errno" 573 | version = "0.3.9" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 576 | dependencies = [ 577 | "libc", 578 | "windows-sys 0.52.0", 579 | ] 580 | 581 | [[package]] 582 | name = "fastrand" 583 | version = "2.1.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" 586 | 587 | [[package]] 588 | name = "fnv" 589 | version = "1.0.7" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 592 | 593 | [[package]] 594 | name = "foreign-types" 595 | version = "0.3.2" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 598 | dependencies = [ 599 | "foreign-types-shared", 600 | ] 601 | 602 | [[package]] 603 | name = "foreign-types-shared" 604 | version = "0.1.1" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 607 | 608 | [[package]] 609 | name = "form_urlencoded" 610 | version = "1.2.1" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 613 | dependencies = [ 614 | "percent-encoding", 615 | ] 616 | 617 | [[package]] 618 | name = "futf" 619 | version = "0.1.5" 620 | source = "registry+https://github.com/rust-lang/crates.io-index" 621 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 622 | dependencies = [ 623 | "mac", 624 | "new_debug_unreachable", 625 | ] 626 | 627 | [[package]] 628 | name = "futures-channel" 629 | version = "0.3.30" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 632 | dependencies = [ 633 | "futures-core", 634 | ] 635 | 636 | [[package]] 637 | name = "futures-core" 638 | version = "0.3.30" 639 | source = "registry+https://github.com/rust-lang/crates.io-index" 640 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 641 | 642 | [[package]] 643 | name = "futures-io" 644 | version = "0.3.30" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 647 | 648 | [[package]] 649 | name = "futures-sink" 650 | version = "0.3.30" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 653 | 654 | [[package]] 655 | name = "futures-task" 656 | version = "0.3.30" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 659 | 660 | [[package]] 661 | name = "futures-util" 662 | version = "0.3.30" 663 | source = "registry+https://github.com/rust-lang/crates.io-index" 664 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 665 | dependencies = [ 666 | "futures-core", 667 | "futures-io", 668 | "futures-task", 669 | "memchr", 670 | "pin-project-lite", 671 | "pin-utils", 672 | "slab", 673 | ] 674 | 675 | [[package]] 676 | name = "fxhash" 677 | version = "0.2.1" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 680 | dependencies = [ 681 | "byteorder", 682 | ] 683 | 684 | [[package]] 685 | name = "generic-array" 686 | version = "0.14.7" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 689 | dependencies = [ 690 | "typenum", 691 | "version_check", 692 | ] 693 | 694 | [[package]] 695 | name = "getopts" 696 | version = "0.2.21" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" 699 | dependencies = [ 700 | "unicode-width", 701 | ] 702 | 703 | [[package]] 704 | name = "getrandom" 705 | version = "0.1.16" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 708 | dependencies = [ 709 | "cfg-if", 710 | "libc", 711 | "wasi 0.9.0+wasi-snapshot-preview1", 712 | ] 713 | 714 | [[package]] 715 | name = "getrandom" 716 | version = "0.2.15" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 719 | dependencies = [ 720 | "cfg-if", 721 | "libc", 722 | "wasi 0.11.0+wasi-snapshot-preview1", 723 | ] 724 | 725 | [[package]] 726 | name = "gimli" 727 | version = "0.28.1" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" 730 | 731 | [[package]] 732 | name = "glob" 733 | version = "0.3.1" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" 736 | 737 | [[package]] 738 | name = "h2" 739 | version = "0.3.26" 740 | source = "registry+https://github.com/rust-lang/crates.io-index" 741 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 742 | dependencies = [ 743 | "bytes", 744 | "fnv", 745 | "futures-core", 746 | "futures-sink", 747 | "futures-util", 748 | "http", 749 | "indexmap 2.2.6", 750 | "slab", 751 | "tokio", 752 | "tokio-util", 753 | "tracing", 754 | ] 755 | 756 | [[package]] 757 | name = "hashbrown" 758 | version = "0.12.3" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 761 | 762 | [[package]] 763 | name = "hashbrown" 764 | version = "0.14.5" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 767 | 768 | [[package]] 769 | name = "heck" 770 | version = "0.3.3" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" 773 | dependencies = [ 774 | "unicode-segmentation", 775 | ] 776 | 777 | [[package]] 778 | name = "heck" 779 | version = "0.4.1" 780 | source = "registry+https://github.com/rust-lang/crates.io-index" 781 | checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 782 | 783 | [[package]] 784 | name = "heck" 785 | version = "0.5.0" 786 | source = "registry+https://github.com/rust-lang/crates.io-index" 787 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 788 | 789 | [[package]] 790 | name = "hermit-abi" 791 | version = "0.1.19" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 794 | dependencies = [ 795 | "libc", 796 | ] 797 | 798 | [[package]] 799 | name = "hermit-abi" 800 | version = "0.3.9" 801 | source = "registry+https://github.com/rust-lang/crates.io-index" 802 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 803 | 804 | [[package]] 805 | name = "html5ever" 806 | version = "0.25.2" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148" 809 | dependencies = [ 810 | "log", 811 | "mac", 812 | "markup5ever", 813 | "proc-macro2", 814 | "quote", 815 | "syn 1.0.109", 816 | ] 817 | 818 | [[package]] 819 | name = "http" 820 | version = "0.2.12" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 823 | dependencies = [ 824 | "bytes", 825 | "fnv", 826 | "itoa 1.0.11", 827 | ] 828 | 829 | [[package]] 830 | name = "http-body" 831 | version = "0.4.6" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 834 | dependencies = [ 835 | "bytes", 836 | "http", 837 | "pin-project-lite", 838 | ] 839 | 840 | [[package]] 841 | name = "httparse" 842 | version = "1.8.0" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" 845 | 846 | [[package]] 847 | name = "httpdate" 848 | version = "1.0.3" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 851 | 852 | [[package]] 853 | name = "humantime" 854 | version = "2.1.0" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 857 | 858 | [[package]] 859 | name = "hyper" 860 | version = "0.14.28" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" 863 | dependencies = [ 864 | "bytes", 865 | "futures-channel", 866 | "futures-core", 867 | "futures-util", 868 | "h2", 869 | "http", 870 | "http-body", 871 | "httparse", 872 | "httpdate", 873 | "itoa 1.0.11", 874 | "pin-project-lite", 875 | "socket2", 876 | "tokio", 877 | "tower-service", 878 | "tracing", 879 | "want", 880 | ] 881 | 882 | [[package]] 883 | name = "hyper-tls" 884 | version = "0.5.0" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" 887 | dependencies = [ 888 | "bytes", 889 | "hyper", 890 | "native-tls", 891 | "tokio", 892 | "tokio-native-tls", 893 | ] 894 | 895 | [[package]] 896 | name = "idna" 897 | version = "0.5.0" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 900 | dependencies = [ 901 | "unicode-bidi", 902 | "unicode-normalization", 903 | ] 904 | 905 | [[package]] 906 | name = "indexmap" 907 | version = "1.9.3" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 910 | dependencies = [ 911 | "autocfg", 912 | "hashbrown 0.12.3", 913 | ] 914 | 915 | [[package]] 916 | name = "indexmap" 917 | version = "2.2.6" 918 | source = "registry+https://github.com/rust-lang/crates.io-index" 919 | checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" 920 | dependencies = [ 921 | "equivalent", 922 | "hashbrown 0.14.5", 923 | ] 924 | 925 | [[package]] 926 | name = "ipnet" 927 | version = "2.9.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" 930 | 931 | [[package]] 932 | name = "is_terminal_polyfill" 933 | version = "1.70.0" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" 936 | 937 | [[package]] 938 | name = "itertools" 939 | version = "0.10.5" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" 942 | dependencies = [ 943 | "either", 944 | ] 945 | 946 | [[package]] 947 | name = "itoa" 948 | version = "0.4.8" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" 951 | 952 | [[package]] 953 | name = "itoa" 954 | version = "1.0.11" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 957 | 958 | [[package]] 959 | name = "janus" 960 | version = "0.0.0" 961 | dependencies = [ 962 | "colored-diff", 963 | "glob", 964 | "http", 965 | "just 1.26.0", 966 | "just 1.26.0 (registry+https://github.com/rust-lang/crates.io-index)", 967 | "regex", 968 | "reqwest", 969 | "scraper", 970 | "serde", 971 | "serde_derive", 972 | "serde_yaml", 973 | "sha2 0.9.9", 974 | "structopt", 975 | ] 976 | 977 | [[package]] 978 | name = "js-sys" 979 | version = "0.3.69" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" 982 | dependencies = [ 983 | "wasm-bindgen", 984 | ] 985 | 986 | [[package]] 987 | name = "just" 988 | version = "1.26.0" 989 | dependencies = [ 990 | "ansi_term", 991 | "blake3", 992 | "camino", 993 | "clap 4.5.4", 994 | "clap_complete", 995 | "clap_mangen", 996 | "ctrlc", 997 | "derivative", 998 | "dirs", 999 | "dotenvy", 1000 | "edit-distance", 1001 | "env_logger", 1002 | "heck 0.5.0", 1003 | "lexiclean", 1004 | "libc", 1005 | "log", 1006 | "num_cpus", 1007 | "percent-encoding", 1008 | "rand 0.8.5", 1009 | "regex", 1010 | "semver", 1011 | "serde", 1012 | "serde_json", 1013 | "sha2 0.10.8", 1014 | "shellexpand", 1015 | "similar", 1016 | "snafu", 1017 | "strum", 1018 | "target", 1019 | "tempfile", 1020 | "typed-arena", 1021 | "unicode-width", 1022 | "uuid", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "just" 1027 | version = "1.26.0" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "5f99e9e46d3ab85e388a43a5dc537b7bd7ee425891239dd890b8b97117951057" 1030 | dependencies = [ 1031 | "ansi_term", 1032 | "atty", 1033 | "blake3", 1034 | "camino", 1035 | "clap 2.34.0", 1036 | "ctrlc", 1037 | "derivative", 1038 | "dirs", 1039 | "dotenvy", 1040 | "edit-distance", 1041 | "env_logger", 1042 | "heck 0.5.0", 1043 | "lexiclean", 1044 | "libc", 1045 | "log", 1046 | "num_cpus", 1047 | "regex", 1048 | "semver", 1049 | "serde", 1050 | "serde_json", 1051 | "sha2 0.10.8", 1052 | "similar", 1053 | "snafu", 1054 | "strum", 1055 | "target", 1056 | "tempfile", 1057 | "typed-arena", 1058 | "unicode-width", 1059 | "uuid", 1060 | ] 1061 | 1062 | [[package]] 1063 | name = "lazy_static" 1064 | version = "1.4.0" 1065 | source = "registry+https://github.com/rust-lang/crates.io-index" 1066 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1067 | 1068 | [[package]] 1069 | name = "lexiclean" 1070 | version = "0.0.1" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "441225017b106b9f902e97947a6d31e44ebcf274b91bdbfb51e5c477fcd468e5" 1073 | 1074 | [[package]] 1075 | name = "libc" 1076 | version = "0.2.155" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" 1079 | 1080 | [[package]] 1081 | name = "libredox" 1082 | version = "0.1.3" 1083 | source = "registry+https://github.com/rust-lang/crates.io-index" 1084 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" 1085 | dependencies = [ 1086 | "bitflags 2.5.0", 1087 | "libc", 1088 | ] 1089 | 1090 | [[package]] 1091 | name = "linked-hash-map" 1092 | version = "0.5.6" 1093 | source = "registry+https://github.com/rust-lang/crates.io-index" 1094 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1095 | 1096 | [[package]] 1097 | name = "linux-raw-sys" 1098 | version = "0.4.14" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1101 | 1102 | [[package]] 1103 | name = "lock_api" 1104 | version = "0.4.12" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1107 | dependencies = [ 1108 | "autocfg", 1109 | "scopeguard", 1110 | ] 1111 | 1112 | [[package]] 1113 | name = "log" 1114 | version = "0.4.21" 1115 | source = "registry+https://github.com/rust-lang/crates.io-index" 1116 | checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" 1117 | 1118 | [[package]] 1119 | name = "mac" 1120 | version = "0.1.1" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1123 | 1124 | [[package]] 1125 | name = "markup5ever" 1126 | version = "0.10.1" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd" 1129 | dependencies = [ 1130 | "log", 1131 | "phf", 1132 | "phf_codegen", 1133 | "string_cache", 1134 | "string_cache_codegen", 1135 | "tendril", 1136 | ] 1137 | 1138 | [[package]] 1139 | name = "matches" 1140 | version = "0.1.10" 1141 | source = "registry+https://github.com/rust-lang/crates.io-index" 1142 | checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" 1143 | 1144 | [[package]] 1145 | name = "memchr" 1146 | version = "2.7.2" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" 1149 | 1150 | [[package]] 1151 | name = "memmap2" 1152 | version = "0.9.4" 1153 | source = "registry+https://github.com/rust-lang/crates.io-index" 1154 | checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322" 1155 | dependencies = [ 1156 | "libc", 1157 | ] 1158 | 1159 | [[package]] 1160 | name = "mime" 1161 | version = "0.3.17" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1164 | 1165 | [[package]] 1166 | name = "miniz_oxide" 1167 | version = "0.7.3" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" 1170 | dependencies = [ 1171 | "adler", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "mio" 1176 | version = "0.8.11" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" 1179 | dependencies = [ 1180 | "libc", 1181 | "wasi 0.11.0+wasi-snapshot-preview1", 1182 | "windows-sys 0.48.0", 1183 | ] 1184 | 1185 | [[package]] 1186 | name = "native-tls" 1187 | version = "0.2.11" 1188 | source = "registry+https://github.com/rust-lang/crates.io-index" 1189 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" 1190 | dependencies = [ 1191 | "lazy_static", 1192 | "libc", 1193 | "log", 1194 | "openssl", 1195 | "openssl-probe", 1196 | "openssl-sys", 1197 | "schannel", 1198 | "security-framework", 1199 | "security-framework-sys", 1200 | "tempfile", 1201 | ] 1202 | 1203 | [[package]] 1204 | name = "new_debug_unreachable" 1205 | version = "1.0.6" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1208 | 1209 | [[package]] 1210 | name = "nix" 1211 | version = "0.28.0" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" 1214 | dependencies = [ 1215 | "bitflags 2.5.0", 1216 | "cfg-if", 1217 | "cfg_aliases", 1218 | "libc", 1219 | ] 1220 | 1221 | [[package]] 1222 | name = "nodrop" 1223 | version = "0.1.14" 1224 | source = "registry+https://github.com/rust-lang/crates.io-index" 1225 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" 1226 | 1227 | [[package]] 1228 | name = "num_cpus" 1229 | version = "1.16.0" 1230 | source = "registry+https://github.com/rust-lang/crates.io-index" 1231 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 1232 | dependencies = [ 1233 | "hermit-abi 0.3.9", 1234 | "libc", 1235 | ] 1236 | 1237 | [[package]] 1238 | name = "object" 1239 | version = "0.32.2" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" 1242 | dependencies = [ 1243 | "memchr", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "once_cell" 1248 | version = "1.19.0" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 1251 | 1252 | [[package]] 1253 | name = "opaque-debug" 1254 | version = "0.3.1" 1255 | source = "registry+https://github.com/rust-lang/crates.io-index" 1256 | checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 1257 | 1258 | [[package]] 1259 | name = "openssl" 1260 | version = "0.10.64" 1261 | source = "registry+https://github.com/rust-lang/crates.io-index" 1262 | checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" 1263 | dependencies = [ 1264 | "bitflags 2.5.0", 1265 | "cfg-if", 1266 | "foreign-types", 1267 | "libc", 1268 | "once_cell", 1269 | "openssl-macros", 1270 | "openssl-sys", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "openssl-macros" 1275 | version = "0.1.1" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1278 | dependencies = [ 1279 | "proc-macro2", 1280 | "quote", 1281 | "syn 2.0.66", 1282 | ] 1283 | 1284 | [[package]] 1285 | name = "openssl-probe" 1286 | version = "0.1.5" 1287 | source = "registry+https://github.com/rust-lang/crates.io-index" 1288 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1289 | 1290 | [[package]] 1291 | name = "openssl-sys" 1292 | version = "0.9.102" 1293 | source = "registry+https://github.com/rust-lang/crates.io-index" 1294 | checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" 1295 | dependencies = [ 1296 | "cc", 1297 | "libc", 1298 | "pkg-config", 1299 | "vcpkg", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "option-ext" 1304 | version = "0.2.0" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 1307 | 1308 | [[package]] 1309 | name = "parking_lot" 1310 | version = "0.12.3" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1313 | dependencies = [ 1314 | "lock_api", 1315 | "parking_lot_core", 1316 | ] 1317 | 1318 | [[package]] 1319 | name = "parking_lot_core" 1320 | version = "0.9.10" 1321 | source = "registry+https://github.com/rust-lang/crates.io-index" 1322 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1323 | dependencies = [ 1324 | "cfg-if", 1325 | "libc", 1326 | "redox_syscall", 1327 | "smallvec", 1328 | "windows-targets 0.52.5", 1329 | ] 1330 | 1331 | [[package]] 1332 | name = "percent-encoding" 1333 | version = "2.3.1" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1336 | 1337 | [[package]] 1338 | name = "phf" 1339 | version = "0.8.0" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 1342 | dependencies = [ 1343 | "phf_macros", 1344 | "phf_shared 0.8.0", 1345 | "proc-macro-hack", 1346 | ] 1347 | 1348 | [[package]] 1349 | name = "phf_codegen" 1350 | version = "0.8.0" 1351 | source = "registry+https://github.com/rust-lang/crates.io-index" 1352 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" 1353 | dependencies = [ 1354 | "phf_generator 0.8.0", 1355 | "phf_shared 0.8.0", 1356 | ] 1357 | 1358 | [[package]] 1359 | name = "phf_generator" 1360 | version = "0.8.0" 1361 | source = "registry+https://github.com/rust-lang/crates.io-index" 1362 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" 1363 | dependencies = [ 1364 | "phf_shared 0.8.0", 1365 | "rand 0.7.3", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "phf_generator" 1370 | version = "0.10.0" 1371 | source = "registry+https://github.com/rust-lang/crates.io-index" 1372 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" 1373 | dependencies = [ 1374 | "phf_shared 0.10.0", 1375 | "rand 0.8.5", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "phf_macros" 1380 | version = "0.8.0" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" 1383 | dependencies = [ 1384 | "phf_generator 0.8.0", 1385 | "phf_shared 0.8.0", 1386 | "proc-macro-hack", 1387 | "proc-macro2", 1388 | "quote", 1389 | "syn 1.0.109", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "phf_shared" 1394 | version = "0.8.0" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 1397 | dependencies = [ 1398 | "siphasher", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "phf_shared" 1403 | version = "0.10.0" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 1406 | dependencies = [ 1407 | "siphasher", 1408 | ] 1409 | 1410 | [[package]] 1411 | name = "pin-project-lite" 1412 | version = "0.2.14" 1413 | source = "registry+https://github.com/rust-lang/crates.io-index" 1414 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 1415 | 1416 | [[package]] 1417 | name = "pin-utils" 1418 | version = "0.1.0" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1421 | 1422 | [[package]] 1423 | name = "pkg-config" 1424 | version = "0.3.30" 1425 | source = "registry+https://github.com/rust-lang/crates.io-index" 1426 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 1427 | 1428 | [[package]] 1429 | name = "ppv-lite86" 1430 | version = "0.2.17" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" 1433 | 1434 | [[package]] 1435 | name = "precomputed-hash" 1436 | version = "0.1.1" 1437 | source = "registry+https://github.com/rust-lang/crates.io-index" 1438 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1439 | 1440 | [[package]] 1441 | name = "proc-macro-error" 1442 | version = "1.0.4" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 1445 | dependencies = [ 1446 | "proc-macro-error-attr", 1447 | "proc-macro2", 1448 | "quote", 1449 | "syn 1.0.109", 1450 | "version_check", 1451 | ] 1452 | 1453 | [[package]] 1454 | name = "proc-macro-error-attr" 1455 | version = "1.0.4" 1456 | source = "registry+https://github.com/rust-lang/crates.io-index" 1457 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 1458 | dependencies = [ 1459 | "proc-macro2", 1460 | "quote", 1461 | "version_check", 1462 | ] 1463 | 1464 | [[package]] 1465 | name = "proc-macro-hack" 1466 | version = "0.5.20+deprecated" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" 1469 | 1470 | [[package]] 1471 | name = "proc-macro2" 1472 | version = "1.0.83" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" 1475 | dependencies = [ 1476 | "unicode-ident", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "quote" 1481 | version = "1.0.36" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1484 | dependencies = [ 1485 | "proc-macro2", 1486 | ] 1487 | 1488 | [[package]] 1489 | name = "rand" 1490 | version = "0.7.3" 1491 | source = "registry+https://github.com/rust-lang/crates.io-index" 1492 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1493 | dependencies = [ 1494 | "getrandom 0.1.16", 1495 | "libc", 1496 | "rand_chacha 0.2.2", 1497 | "rand_core 0.5.1", 1498 | "rand_hc", 1499 | "rand_pcg", 1500 | ] 1501 | 1502 | [[package]] 1503 | name = "rand" 1504 | version = "0.8.5" 1505 | source = "registry+https://github.com/rust-lang/crates.io-index" 1506 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1507 | dependencies = [ 1508 | "libc", 1509 | "rand_chacha 0.3.1", 1510 | "rand_core 0.6.4", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "rand_chacha" 1515 | version = "0.2.2" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1518 | dependencies = [ 1519 | "ppv-lite86", 1520 | "rand_core 0.5.1", 1521 | ] 1522 | 1523 | [[package]] 1524 | name = "rand_chacha" 1525 | version = "0.3.1" 1526 | source = "registry+https://github.com/rust-lang/crates.io-index" 1527 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1528 | dependencies = [ 1529 | "ppv-lite86", 1530 | "rand_core 0.6.4", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "rand_core" 1535 | version = "0.5.1" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1538 | dependencies = [ 1539 | "getrandom 0.1.16", 1540 | ] 1541 | 1542 | [[package]] 1543 | name = "rand_core" 1544 | version = "0.6.4" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1547 | dependencies = [ 1548 | "getrandom 0.2.15", 1549 | ] 1550 | 1551 | [[package]] 1552 | name = "rand_hc" 1553 | version = "0.2.0" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1556 | dependencies = [ 1557 | "rand_core 0.5.1", 1558 | ] 1559 | 1560 | [[package]] 1561 | name = "rand_pcg" 1562 | version = "0.2.1" 1563 | source = "registry+https://github.com/rust-lang/crates.io-index" 1564 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" 1565 | dependencies = [ 1566 | "rand_core 0.5.1", 1567 | ] 1568 | 1569 | [[package]] 1570 | name = "rayon" 1571 | version = "1.10.0" 1572 | source = "registry+https://github.com/rust-lang/crates.io-index" 1573 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1574 | dependencies = [ 1575 | "either", 1576 | "rayon-core", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "rayon-core" 1581 | version = "1.12.1" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1584 | dependencies = [ 1585 | "crossbeam-deque", 1586 | "crossbeam-utils", 1587 | ] 1588 | 1589 | [[package]] 1590 | name = "redox_syscall" 1591 | version = "0.5.1" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | checksum = "469052894dcb553421e483e4209ee581a45100d31b4018de03e5a7ad86374a7e" 1594 | dependencies = [ 1595 | "bitflags 2.5.0", 1596 | ] 1597 | 1598 | [[package]] 1599 | name = "redox_users" 1600 | version = "0.4.5" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" 1603 | dependencies = [ 1604 | "getrandom 0.2.15", 1605 | "libredox", 1606 | "thiserror", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "regex" 1611 | version = "1.10.4" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" 1614 | dependencies = [ 1615 | "aho-corasick", 1616 | "memchr", 1617 | "regex-automata 0.4.6", 1618 | "regex-syntax", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "regex-automata" 1623 | version = "0.1.10" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1626 | 1627 | [[package]] 1628 | name = "regex-automata" 1629 | version = "0.4.6" 1630 | source = "registry+https://github.com/rust-lang/crates.io-index" 1631 | checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" 1632 | dependencies = [ 1633 | "aho-corasick", 1634 | "memchr", 1635 | "regex-syntax", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "regex-syntax" 1640 | version = "0.8.3" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" 1643 | 1644 | [[package]] 1645 | name = "reqwest" 1646 | version = "0.11.27" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" 1649 | dependencies = [ 1650 | "base64", 1651 | "bytes", 1652 | "encoding_rs", 1653 | "futures-core", 1654 | "futures-util", 1655 | "h2", 1656 | "http", 1657 | "http-body", 1658 | "hyper", 1659 | "hyper-tls", 1660 | "ipnet", 1661 | "js-sys", 1662 | "log", 1663 | "mime", 1664 | "native-tls", 1665 | "once_cell", 1666 | "percent-encoding", 1667 | "pin-project-lite", 1668 | "rustls-pemfile", 1669 | "serde", 1670 | "serde_json", 1671 | "serde_urlencoded", 1672 | "sync_wrapper", 1673 | "system-configuration", 1674 | "tokio", 1675 | "tokio-native-tls", 1676 | "tower-service", 1677 | "url", 1678 | "wasm-bindgen", 1679 | "wasm-bindgen-futures", 1680 | "web-sys", 1681 | "winreg", 1682 | ] 1683 | 1684 | [[package]] 1685 | name = "roff" 1686 | version = "0.2.1" 1687 | source = "registry+https://github.com/rust-lang/crates.io-index" 1688 | checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" 1689 | 1690 | [[package]] 1691 | name = "rustc-demangle" 1692 | version = "0.1.24" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1695 | 1696 | [[package]] 1697 | name = "rustc_version" 1698 | version = "0.4.0" 1699 | source = "registry+https://github.com/rust-lang/crates.io-index" 1700 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" 1701 | dependencies = [ 1702 | "semver", 1703 | ] 1704 | 1705 | [[package]] 1706 | name = "rustix" 1707 | version = "0.38.34" 1708 | source = "registry+https://github.com/rust-lang/crates.io-index" 1709 | checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" 1710 | dependencies = [ 1711 | "bitflags 2.5.0", 1712 | "errno", 1713 | "libc", 1714 | "linux-raw-sys", 1715 | "windows-sys 0.52.0", 1716 | ] 1717 | 1718 | [[package]] 1719 | name = "rustls-pemfile" 1720 | version = "1.0.4" 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" 1722 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 1723 | dependencies = [ 1724 | "base64", 1725 | ] 1726 | 1727 | [[package]] 1728 | name = "rustversion" 1729 | version = "1.0.17" 1730 | source = "registry+https://github.com/rust-lang/crates.io-index" 1731 | checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" 1732 | 1733 | [[package]] 1734 | name = "ryu" 1735 | version = "1.0.18" 1736 | source = "registry+https://github.com/rust-lang/crates.io-index" 1737 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1738 | 1739 | [[package]] 1740 | name = "schannel" 1741 | version = "0.1.23" 1742 | source = "registry+https://github.com/rust-lang/crates.io-index" 1743 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 1744 | dependencies = [ 1745 | "windows-sys 0.52.0", 1746 | ] 1747 | 1748 | [[package]] 1749 | name = "scopeguard" 1750 | version = "1.2.0" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1753 | 1754 | [[package]] 1755 | name = "scraper" 1756 | version = "0.12.0" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "48e02aa790c80c2e494130dec6a522033b6a23603ffc06360e9fe6c611ea2c12" 1759 | dependencies = [ 1760 | "cssparser", 1761 | "ego-tree", 1762 | "getopts", 1763 | "html5ever", 1764 | "matches", 1765 | "selectors", 1766 | "smallvec", 1767 | "tendril", 1768 | ] 1769 | 1770 | [[package]] 1771 | name = "security-framework" 1772 | version = "2.11.0" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" 1775 | dependencies = [ 1776 | "bitflags 2.5.0", 1777 | "core-foundation", 1778 | "core-foundation-sys", 1779 | "libc", 1780 | "security-framework-sys", 1781 | ] 1782 | 1783 | [[package]] 1784 | name = "security-framework-sys" 1785 | version = "2.11.0" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" 1788 | dependencies = [ 1789 | "core-foundation-sys", 1790 | "libc", 1791 | ] 1792 | 1793 | [[package]] 1794 | name = "selectors" 1795 | version = "0.22.0" 1796 | source = "registry+https://github.com/rust-lang/crates.io-index" 1797 | checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe" 1798 | dependencies = [ 1799 | "bitflags 1.3.2", 1800 | "cssparser", 1801 | "derive_more", 1802 | "fxhash", 1803 | "log", 1804 | "matches", 1805 | "phf", 1806 | "phf_codegen", 1807 | "precomputed-hash", 1808 | "servo_arc", 1809 | "smallvec", 1810 | "thin-slice", 1811 | ] 1812 | 1813 | [[package]] 1814 | name = "semver" 1815 | version = "1.0.23" 1816 | source = "registry+https://github.com/rust-lang/crates.io-index" 1817 | checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" 1818 | 1819 | [[package]] 1820 | name = "serde" 1821 | version = "1.0.202" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" 1824 | dependencies = [ 1825 | "serde_derive", 1826 | ] 1827 | 1828 | [[package]] 1829 | name = "serde_derive" 1830 | version = "1.0.202" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" 1833 | dependencies = [ 1834 | "proc-macro2", 1835 | "quote", 1836 | "syn 2.0.66", 1837 | ] 1838 | 1839 | [[package]] 1840 | name = "serde_json" 1841 | version = "1.0.117" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" 1844 | dependencies = [ 1845 | "itoa 1.0.11", 1846 | "ryu", 1847 | "serde", 1848 | ] 1849 | 1850 | [[package]] 1851 | name = "serde_urlencoded" 1852 | version = "0.7.1" 1853 | source = "registry+https://github.com/rust-lang/crates.io-index" 1854 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1855 | dependencies = [ 1856 | "form_urlencoded", 1857 | "itoa 1.0.11", 1858 | "ryu", 1859 | "serde", 1860 | ] 1861 | 1862 | [[package]] 1863 | name = "serde_yaml" 1864 | version = "0.8.26" 1865 | source = "registry+https://github.com/rust-lang/crates.io-index" 1866 | checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" 1867 | dependencies = [ 1868 | "indexmap 1.9.3", 1869 | "ryu", 1870 | "serde", 1871 | "yaml-rust", 1872 | ] 1873 | 1874 | [[package]] 1875 | name = "servo_arc" 1876 | version = "0.1.1" 1877 | source = "registry+https://github.com/rust-lang/crates.io-index" 1878 | checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432" 1879 | dependencies = [ 1880 | "nodrop", 1881 | "stable_deref_trait", 1882 | ] 1883 | 1884 | [[package]] 1885 | name = "sha2" 1886 | version = "0.9.9" 1887 | source = "registry+https://github.com/rust-lang/crates.io-index" 1888 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1889 | dependencies = [ 1890 | "block-buffer 0.9.0", 1891 | "cfg-if", 1892 | "cpufeatures", 1893 | "digest 0.9.0", 1894 | "opaque-debug", 1895 | ] 1896 | 1897 | [[package]] 1898 | name = "sha2" 1899 | version = "0.10.8" 1900 | source = "registry+https://github.com/rust-lang/crates.io-index" 1901 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1902 | dependencies = [ 1903 | "cfg-if", 1904 | "cpufeatures", 1905 | "digest 0.10.7", 1906 | ] 1907 | 1908 | [[package]] 1909 | name = "shellexpand" 1910 | version = "3.1.0" 1911 | source = "registry+https://github.com/rust-lang/crates.io-index" 1912 | checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b" 1913 | dependencies = [ 1914 | "dirs", 1915 | ] 1916 | 1917 | [[package]] 1918 | name = "similar" 1919 | version = "2.5.0" 1920 | source = "registry+https://github.com/rust-lang/crates.io-index" 1921 | checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" 1922 | dependencies = [ 1923 | "bstr", 1924 | "unicode-segmentation", 1925 | ] 1926 | 1927 | [[package]] 1928 | name = "siphasher" 1929 | version = "0.3.11" 1930 | source = "registry+https://github.com/rust-lang/crates.io-index" 1931 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 1932 | 1933 | [[package]] 1934 | name = "slab" 1935 | version = "0.4.9" 1936 | source = "registry+https://github.com/rust-lang/crates.io-index" 1937 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1938 | dependencies = [ 1939 | "autocfg", 1940 | ] 1941 | 1942 | [[package]] 1943 | name = "smallvec" 1944 | version = "1.13.2" 1945 | source = "registry+https://github.com/rust-lang/crates.io-index" 1946 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1947 | 1948 | [[package]] 1949 | name = "snafu" 1950 | version = "0.8.3" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "418b8136fec49956eba89be7da2847ec1909df92a9ae4178b5ff0ff092c8d95e" 1953 | dependencies = [ 1954 | "snafu-derive", 1955 | ] 1956 | 1957 | [[package]] 1958 | name = "snafu-derive" 1959 | version = "0.8.3" 1960 | source = "registry+https://github.com/rust-lang/crates.io-index" 1961 | checksum = "1a4812a669da00d17d8266a0439eddcacbc88b17f732f927e52eeb9d196f7fb5" 1962 | dependencies = [ 1963 | "heck 0.5.0", 1964 | "proc-macro2", 1965 | "quote", 1966 | "syn 2.0.66", 1967 | ] 1968 | 1969 | [[package]] 1970 | name = "socket2" 1971 | version = "0.5.7" 1972 | source = "registry+https://github.com/rust-lang/crates.io-index" 1973 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1974 | dependencies = [ 1975 | "libc", 1976 | "windows-sys 0.52.0", 1977 | ] 1978 | 1979 | [[package]] 1980 | name = "stable_deref_trait" 1981 | version = "1.2.0" 1982 | source = "registry+https://github.com/rust-lang/crates.io-index" 1983 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1984 | 1985 | [[package]] 1986 | name = "string_cache" 1987 | version = "0.8.7" 1988 | source = "registry+https://github.com/rust-lang/crates.io-index" 1989 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 1990 | dependencies = [ 1991 | "new_debug_unreachable", 1992 | "once_cell", 1993 | "parking_lot", 1994 | "phf_shared 0.10.0", 1995 | "precomputed-hash", 1996 | "serde", 1997 | ] 1998 | 1999 | [[package]] 2000 | name = "string_cache_codegen" 2001 | version = "0.5.2" 2002 | source = "registry+https://github.com/rust-lang/crates.io-index" 2003 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" 2004 | dependencies = [ 2005 | "phf_generator 0.10.0", 2006 | "phf_shared 0.10.0", 2007 | "proc-macro2", 2008 | "quote", 2009 | ] 2010 | 2011 | [[package]] 2012 | name = "strsim" 2013 | version = "0.8.0" 2014 | source = "registry+https://github.com/rust-lang/crates.io-index" 2015 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 2016 | 2017 | [[package]] 2018 | name = "strsim" 2019 | version = "0.11.1" 2020 | source = "registry+https://github.com/rust-lang/crates.io-index" 2021 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2022 | 2023 | [[package]] 2024 | name = "structopt" 2025 | version = "0.3.26" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" 2028 | dependencies = [ 2029 | "clap 2.34.0", 2030 | "lazy_static", 2031 | "structopt-derive", 2032 | ] 2033 | 2034 | [[package]] 2035 | name = "structopt-derive" 2036 | version = "0.4.18" 2037 | source = "registry+https://github.com/rust-lang/crates.io-index" 2038 | checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" 2039 | dependencies = [ 2040 | "heck 0.3.3", 2041 | "proc-macro-error", 2042 | "proc-macro2", 2043 | "quote", 2044 | "syn 1.0.109", 2045 | ] 2046 | 2047 | [[package]] 2048 | name = "strum" 2049 | version = "0.26.2" 2050 | source = "registry+https://github.com/rust-lang/crates.io-index" 2051 | checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" 2052 | dependencies = [ 2053 | "strum_macros", 2054 | ] 2055 | 2056 | [[package]] 2057 | name = "strum_macros" 2058 | version = "0.26.2" 2059 | source = "registry+https://github.com/rust-lang/crates.io-index" 2060 | checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" 2061 | dependencies = [ 2062 | "heck 0.4.1", 2063 | "proc-macro2", 2064 | "quote", 2065 | "rustversion", 2066 | "syn 2.0.66", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "syn" 2071 | version = "1.0.109" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2074 | dependencies = [ 2075 | "proc-macro2", 2076 | "quote", 2077 | "unicode-ident", 2078 | ] 2079 | 2080 | [[package]] 2081 | name = "syn" 2082 | version = "2.0.66" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" 2085 | dependencies = [ 2086 | "proc-macro2", 2087 | "quote", 2088 | "unicode-ident", 2089 | ] 2090 | 2091 | [[package]] 2092 | name = "sync_wrapper" 2093 | version = "0.1.2" 2094 | source = "registry+https://github.com/rust-lang/crates.io-index" 2095 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2096 | 2097 | [[package]] 2098 | name = "system-configuration" 2099 | version = "0.5.1" 2100 | source = "registry+https://github.com/rust-lang/crates.io-index" 2101 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 2102 | dependencies = [ 2103 | "bitflags 1.3.2", 2104 | "core-foundation", 2105 | "system-configuration-sys", 2106 | ] 2107 | 2108 | [[package]] 2109 | name = "system-configuration-sys" 2110 | version = "0.5.0" 2111 | source = "registry+https://github.com/rust-lang/crates.io-index" 2112 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 2113 | dependencies = [ 2114 | "core-foundation-sys", 2115 | "libc", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "target" 2120 | version = "2.0.1" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "f4df6b0340c7cc29eb3b955cc588d145ed60651bf1ab939083295d19ec8cc282" 2123 | 2124 | [[package]] 2125 | name = "tempfile" 2126 | version = "3.10.1" 2127 | source = "registry+https://github.com/rust-lang/crates.io-index" 2128 | checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" 2129 | dependencies = [ 2130 | "cfg-if", 2131 | "fastrand", 2132 | "rustix", 2133 | "windows-sys 0.52.0", 2134 | ] 2135 | 2136 | [[package]] 2137 | name = "tendril" 2138 | version = "0.4.3" 2139 | source = "registry+https://github.com/rust-lang/crates.io-index" 2140 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 2141 | dependencies = [ 2142 | "futf", 2143 | "mac", 2144 | "utf-8", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "term_size" 2149 | version = "0.3.2" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" 2152 | dependencies = [ 2153 | "libc", 2154 | "winapi", 2155 | ] 2156 | 2157 | [[package]] 2158 | name = "terminal_size" 2159 | version = "0.3.0" 2160 | source = "registry+https://github.com/rust-lang/crates.io-index" 2161 | checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" 2162 | dependencies = [ 2163 | "rustix", 2164 | "windows-sys 0.48.0", 2165 | ] 2166 | 2167 | [[package]] 2168 | name = "textwrap" 2169 | version = "0.11.0" 2170 | source = "registry+https://github.com/rust-lang/crates.io-index" 2171 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 2172 | dependencies = [ 2173 | "term_size", 2174 | "unicode-width", 2175 | ] 2176 | 2177 | [[package]] 2178 | name = "thin-slice" 2179 | version = "0.1.1" 2180 | source = "registry+https://github.com/rust-lang/crates.io-index" 2181 | checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" 2182 | 2183 | [[package]] 2184 | name = "thiserror" 2185 | version = "1.0.61" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" 2188 | dependencies = [ 2189 | "thiserror-impl", 2190 | ] 2191 | 2192 | [[package]] 2193 | name = "thiserror-impl" 2194 | version = "1.0.61" 2195 | source = "registry+https://github.com/rust-lang/crates.io-index" 2196 | checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" 2197 | dependencies = [ 2198 | "proc-macro2", 2199 | "quote", 2200 | "syn 2.0.66", 2201 | ] 2202 | 2203 | [[package]] 2204 | name = "tinyvec" 2205 | version = "1.6.0" 2206 | source = "registry+https://github.com/rust-lang/crates.io-index" 2207 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 2208 | dependencies = [ 2209 | "tinyvec_macros", 2210 | ] 2211 | 2212 | [[package]] 2213 | name = "tinyvec_macros" 2214 | version = "0.1.1" 2215 | source = "registry+https://github.com/rust-lang/crates.io-index" 2216 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2217 | 2218 | [[package]] 2219 | name = "tokio" 2220 | version = "1.37.0" 2221 | source = "registry+https://github.com/rust-lang/crates.io-index" 2222 | checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" 2223 | dependencies = [ 2224 | "backtrace", 2225 | "bytes", 2226 | "libc", 2227 | "mio", 2228 | "pin-project-lite", 2229 | "socket2", 2230 | "windows-sys 0.48.0", 2231 | ] 2232 | 2233 | [[package]] 2234 | name = "tokio-native-tls" 2235 | version = "0.3.1" 2236 | source = "registry+https://github.com/rust-lang/crates.io-index" 2237 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 2238 | dependencies = [ 2239 | "native-tls", 2240 | "tokio", 2241 | ] 2242 | 2243 | [[package]] 2244 | name = "tokio-util" 2245 | version = "0.7.11" 2246 | source = "registry+https://github.com/rust-lang/crates.io-index" 2247 | checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" 2248 | dependencies = [ 2249 | "bytes", 2250 | "futures-core", 2251 | "futures-sink", 2252 | "pin-project-lite", 2253 | "tokio", 2254 | ] 2255 | 2256 | [[package]] 2257 | name = "tower-service" 2258 | version = "0.3.2" 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" 2260 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 2261 | 2262 | [[package]] 2263 | name = "tracing" 2264 | version = "0.1.40" 2265 | source = "registry+https://github.com/rust-lang/crates.io-index" 2266 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 2267 | dependencies = [ 2268 | "pin-project-lite", 2269 | "tracing-core", 2270 | ] 2271 | 2272 | [[package]] 2273 | name = "tracing-core" 2274 | version = "0.1.32" 2275 | source = "registry+https://github.com/rust-lang/crates.io-index" 2276 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 2277 | dependencies = [ 2278 | "once_cell", 2279 | ] 2280 | 2281 | [[package]] 2282 | name = "try-lock" 2283 | version = "0.2.5" 2284 | source = "registry+https://github.com/rust-lang/crates.io-index" 2285 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2286 | 2287 | [[package]] 2288 | name = "typed-arena" 2289 | version = "2.0.2" 2290 | source = "registry+https://github.com/rust-lang/crates.io-index" 2291 | checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" 2292 | 2293 | [[package]] 2294 | name = "typenum" 2295 | version = "1.17.0" 2296 | source = "registry+https://github.com/rust-lang/crates.io-index" 2297 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2298 | 2299 | [[package]] 2300 | name = "unicode-bidi" 2301 | version = "0.3.15" 2302 | source = "registry+https://github.com/rust-lang/crates.io-index" 2303 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 2304 | 2305 | [[package]] 2306 | name = "unicode-ident" 2307 | version = "1.0.12" 2308 | source = "registry+https://github.com/rust-lang/crates.io-index" 2309 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 2310 | 2311 | [[package]] 2312 | name = "unicode-normalization" 2313 | version = "0.1.23" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 2316 | dependencies = [ 2317 | "tinyvec", 2318 | ] 2319 | 2320 | [[package]] 2321 | name = "unicode-segmentation" 2322 | version = "1.11.0" 2323 | source = "registry+https://github.com/rust-lang/crates.io-index" 2324 | checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" 2325 | 2326 | [[package]] 2327 | name = "unicode-width" 2328 | version = "0.1.12" 2329 | source = "registry+https://github.com/rust-lang/crates.io-index" 2330 | checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" 2331 | 2332 | [[package]] 2333 | name = "url" 2334 | version = "2.5.0" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" 2337 | dependencies = [ 2338 | "form_urlencoded", 2339 | "idna", 2340 | "percent-encoding", 2341 | ] 2342 | 2343 | [[package]] 2344 | name = "utf-8" 2345 | version = "0.7.6" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 2348 | 2349 | [[package]] 2350 | name = "utf8parse" 2351 | version = "0.2.1" 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" 2353 | checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" 2354 | 2355 | [[package]] 2356 | name = "uuid" 2357 | version = "1.8.0" 2358 | source = "registry+https://github.com/rust-lang/crates.io-index" 2359 | checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" 2360 | dependencies = [ 2361 | "getrandom 0.2.15", 2362 | ] 2363 | 2364 | [[package]] 2365 | name = "vcpkg" 2366 | version = "0.2.15" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2369 | 2370 | [[package]] 2371 | name = "vec_map" 2372 | version = "0.8.2" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" 2375 | 2376 | [[package]] 2377 | name = "version_check" 2378 | version = "0.9.4" 2379 | source = "registry+https://github.com/rust-lang/crates.io-index" 2380 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 2381 | 2382 | [[package]] 2383 | name = "want" 2384 | version = "0.3.1" 2385 | source = "registry+https://github.com/rust-lang/crates.io-index" 2386 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2387 | dependencies = [ 2388 | "try-lock", 2389 | ] 2390 | 2391 | [[package]] 2392 | name = "wasi" 2393 | version = "0.9.0+wasi-snapshot-preview1" 2394 | source = "registry+https://github.com/rust-lang/crates.io-index" 2395 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 2396 | 2397 | [[package]] 2398 | name = "wasi" 2399 | version = "0.11.0+wasi-snapshot-preview1" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2402 | 2403 | [[package]] 2404 | name = "wasm-bindgen" 2405 | version = "0.2.92" 2406 | source = "registry+https://github.com/rust-lang/crates.io-index" 2407 | checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" 2408 | dependencies = [ 2409 | "cfg-if", 2410 | "wasm-bindgen-macro", 2411 | ] 2412 | 2413 | [[package]] 2414 | name = "wasm-bindgen-backend" 2415 | version = "0.2.92" 2416 | source = "registry+https://github.com/rust-lang/crates.io-index" 2417 | checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" 2418 | dependencies = [ 2419 | "bumpalo", 2420 | "log", 2421 | "once_cell", 2422 | "proc-macro2", 2423 | "quote", 2424 | "syn 2.0.66", 2425 | "wasm-bindgen-shared", 2426 | ] 2427 | 2428 | [[package]] 2429 | name = "wasm-bindgen-futures" 2430 | version = "0.4.42" 2431 | source = "registry+https://github.com/rust-lang/crates.io-index" 2432 | checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" 2433 | dependencies = [ 2434 | "cfg-if", 2435 | "js-sys", 2436 | "wasm-bindgen", 2437 | "web-sys", 2438 | ] 2439 | 2440 | [[package]] 2441 | name = "wasm-bindgen-macro" 2442 | version = "0.2.92" 2443 | source = "registry+https://github.com/rust-lang/crates.io-index" 2444 | checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" 2445 | dependencies = [ 2446 | "quote", 2447 | "wasm-bindgen-macro-support", 2448 | ] 2449 | 2450 | [[package]] 2451 | name = "wasm-bindgen-macro-support" 2452 | version = "0.2.92" 2453 | source = "registry+https://github.com/rust-lang/crates.io-index" 2454 | checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" 2455 | dependencies = [ 2456 | "proc-macro2", 2457 | "quote", 2458 | "syn 2.0.66", 2459 | "wasm-bindgen-backend", 2460 | "wasm-bindgen-shared", 2461 | ] 2462 | 2463 | [[package]] 2464 | name = "wasm-bindgen-shared" 2465 | version = "0.2.92" 2466 | source = "registry+https://github.com/rust-lang/crates.io-index" 2467 | checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" 2468 | 2469 | [[package]] 2470 | name = "web-sys" 2471 | version = "0.3.69" 2472 | source = "registry+https://github.com/rust-lang/crates.io-index" 2473 | checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" 2474 | dependencies = [ 2475 | "js-sys", 2476 | "wasm-bindgen", 2477 | ] 2478 | 2479 | [[package]] 2480 | name = "winapi" 2481 | version = "0.3.9" 2482 | source = "registry+https://github.com/rust-lang/crates.io-index" 2483 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2484 | dependencies = [ 2485 | "winapi-i686-pc-windows-gnu", 2486 | "winapi-x86_64-pc-windows-gnu", 2487 | ] 2488 | 2489 | [[package]] 2490 | name = "winapi-i686-pc-windows-gnu" 2491 | version = "0.4.0" 2492 | source = "registry+https://github.com/rust-lang/crates.io-index" 2493 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2494 | 2495 | [[package]] 2496 | name = "winapi-x86_64-pc-windows-gnu" 2497 | version = "0.4.0" 2498 | source = "registry+https://github.com/rust-lang/crates.io-index" 2499 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2500 | 2501 | [[package]] 2502 | name = "windows-sys" 2503 | version = "0.48.0" 2504 | source = "registry+https://github.com/rust-lang/crates.io-index" 2505 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2506 | dependencies = [ 2507 | "windows-targets 0.48.5", 2508 | ] 2509 | 2510 | [[package]] 2511 | name = "windows-sys" 2512 | version = "0.52.0" 2513 | source = "registry+https://github.com/rust-lang/crates.io-index" 2514 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2515 | dependencies = [ 2516 | "windows-targets 0.52.5", 2517 | ] 2518 | 2519 | [[package]] 2520 | name = "windows-targets" 2521 | version = "0.48.5" 2522 | source = "registry+https://github.com/rust-lang/crates.io-index" 2523 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2524 | dependencies = [ 2525 | "windows_aarch64_gnullvm 0.48.5", 2526 | "windows_aarch64_msvc 0.48.5", 2527 | "windows_i686_gnu 0.48.5", 2528 | "windows_i686_msvc 0.48.5", 2529 | "windows_x86_64_gnu 0.48.5", 2530 | "windows_x86_64_gnullvm 0.48.5", 2531 | "windows_x86_64_msvc 0.48.5", 2532 | ] 2533 | 2534 | [[package]] 2535 | name = "windows-targets" 2536 | version = "0.52.5" 2537 | source = "registry+https://github.com/rust-lang/crates.io-index" 2538 | checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" 2539 | dependencies = [ 2540 | "windows_aarch64_gnullvm 0.52.5", 2541 | "windows_aarch64_msvc 0.52.5", 2542 | "windows_i686_gnu 0.52.5", 2543 | "windows_i686_gnullvm", 2544 | "windows_i686_msvc 0.52.5", 2545 | "windows_x86_64_gnu 0.52.5", 2546 | "windows_x86_64_gnullvm 0.52.5", 2547 | "windows_x86_64_msvc 0.52.5", 2548 | ] 2549 | 2550 | [[package]] 2551 | name = "windows_aarch64_gnullvm" 2552 | version = "0.48.5" 2553 | source = "registry+https://github.com/rust-lang/crates.io-index" 2554 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2555 | 2556 | [[package]] 2557 | name = "windows_aarch64_gnullvm" 2558 | version = "0.52.5" 2559 | source = "registry+https://github.com/rust-lang/crates.io-index" 2560 | checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" 2561 | 2562 | [[package]] 2563 | name = "windows_aarch64_msvc" 2564 | version = "0.48.5" 2565 | source = "registry+https://github.com/rust-lang/crates.io-index" 2566 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2567 | 2568 | [[package]] 2569 | name = "windows_aarch64_msvc" 2570 | version = "0.52.5" 2571 | source = "registry+https://github.com/rust-lang/crates.io-index" 2572 | checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" 2573 | 2574 | [[package]] 2575 | name = "windows_i686_gnu" 2576 | version = "0.48.5" 2577 | source = "registry+https://github.com/rust-lang/crates.io-index" 2578 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2579 | 2580 | [[package]] 2581 | name = "windows_i686_gnu" 2582 | version = "0.52.5" 2583 | source = "registry+https://github.com/rust-lang/crates.io-index" 2584 | checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" 2585 | 2586 | [[package]] 2587 | name = "windows_i686_gnullvm" 2588 | version = "0.52.5" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" 2591 | 2592 | [[package]] 2593 | name = "windows_i686_msvc" 2594 | version = "0.48.5" 2595 | source = "registry+https://github.com/rust-lang/crates.io-index" 2596 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2597 | 2598 | [[package]] 2599 | name = "windows_i686_msvc" 2600 | version = "0.52.5" 2601 | source = "registry+https://github.com/rust-lang/crates.io-index" 2602 | checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" 2603 | 2604 | [[package]] 2605 | name = "windows_x86_64_gnu" 2606 | version = "0.48.5" 2607 | source = "registry+https://github.com/rust-lang/crates.io-index" 2608 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2609 | 2610 | [[package]] 2611 | name = "windows_x86_64_gnu" 2612 | version = "0.52.5" 2613 | source = "registry+https://github.com/rust-lang/crates.io-index" 2614 | checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" 2615 | 2616 | [[package]] 2617 | name = "windows_x86_64_gnullvm" 2618 | version = "0.48.5" 2619 | source = "registry+https://github.com/rust-lang/crates.io-index" 2620 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2621 | 2622 | [[package]] 2623 | name = "windows_x86_64_gnullvm" 2624 | version = "0.52.5" 2625 | source = "registry+https://github.com/rust-lang/crates.io-index" 2626 | checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" 2627 | 2628 | [[package]] 2629 | name = "windows_x86_64_msvc" 2630 | version = "0.48.5" 2631 | source = "registry+https://github.com/rust-lang/crates.io-index" 2632 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 2633 | 2634 | [[package]] 2635 | name = "windows_x86_64_msvc" 2636 | version = "0.52.5" 2637 | source = "registry+https://github.com/rust-lang/crates.io-index" 2638 | checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" 2639 | 2640 | [[package]] 2641 | name = "winreg" 2642 | version = "0.50.0" 2643 | source = "registry+https://github.com/rust-lang/crates.io-index" 2644 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 2645 | dependencies = [ 2646 | "cfg-if", 2647 | "windows-sys 0.48.0", 2648 | ] 2649 | 2650 | [[package]] 2651 | name = "yaml-rust" 2652 | version = "0.4.5" 2653 | source = "registry+https://github.com/rust-lang/crates.io-index" 2654 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 2655 | dependencies = [ 2656 | "linked-hash-map", 2657 | ] 2658 | --------------------------------------------------------------------------------