├── src ├── models │ ├── mod.rs │ └── gm_model.rs ├── lib.rs ├── cli.rs ├── main.rs ├── run.rs ├── command.rs ├── config.rs └── server.rs ├── .gitignore ├── CHANGELOG.md ├── Cargo.toml ├── .github └── workflows │ └── release.yaml ├── README.md ├── tests └── test.rs └── Cargo.lock /src/models/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod gm_model; -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod config; 2 | mod models; 3 | mod cli; 4 | mod command; 5 | mod run; 6 | mod server; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .idea 3 | .vscode/ 4 | tests/*.yaml 5 | tests/*.sh 6 | tests/*.py 7 | docs/NOTE.md -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | 4 | ## [Unreleased] 5 | 6 | ## [0.1.1] - 2024-09-08 7 | - 更新 Workflow 8 | 9 | ## [0.1.0] - 2024-09-08 10 | 11 | - 支持定时启动执行脚本 12 | -------------------------------------------------------------------------------- /src/cli.rs: -------------------------------------------------------------------------------- 1 | use std::path::PathBuf; 2 | use clap::{Parser}; 3 | 4 | 5 | #[derive(Parser)] 6 | #[command(version, about, long_about = None)] 7 | pub(crate) struct Cli { 8 | /// Sets a custom config file 9 | #[arg(short, long, value_name = "FILE")] 10 | pub(crate) config: Option, 11 | 12 | #[arg(short, long)] 13 | pub(crate) debug: bool, 14 | } 15 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "Qpipe" 3 | version = "0.1.1" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | surf = "2.3.2" 8 | tokio = { version = "1.0.0", features = ["rt", "rt-multi-thread", "macros"] } 9 | serde = { version = "1.0.209", features = ["derive"] } 10 | clap = { version = "4.5.16", features = ["derive"] } 11 | serde_yaml = "0.8.23" 12 | schemars = "0.8.11" 13 | serde_json = "1.0.127" 14 | log = "0.4.22" 15 | futures = "0.3.30" 16 | tiny_http = "0.12.0" 17 | cron = "0.12.1" 18 | chrono = "0.4.23" 19 | chrono-tz = "0.9.0" 20 | rand = "0.8.5" 21 | env_logger = "0.11.5" -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | 2 | use clap::Parser; 3 | use log::{info}; 4 | use crate::command::run_process_group; 5 | use cli::Cli; 6 | 7 | mod config; 8 | mod models; 9 | mod cli; 10 | mod command; 11 | mod run; 12 | mod server; 13 | 14 | #[tokio::main] 15 | async fn main() { 16 | let cli = Cli::parse(); 17 | // env_logger::init(); 18 | env_logger::Builder::from_default_env() 19 | .filter(None, log::LevelFilter::Info) 20 | .init(); 21 | let global = config::Config::new(&cli); 22 | let config = global.unwrap(); 23 | run_process_group(config.process_group.clone()); 24 | let mut workflow_server = server::WorkflowServer::new(config.clone()); 25 | workflow_server.start_server().unwrap(); 26 | info!("[+]Starting server on {}", config.server); 27 | workflow_server.handle_request().await; 28 | } 29 | -------------------------------------------------------------------------------- /src/run.rs: -------------------------------------------------------------------------------- 1 | use crate::config::ProcessGroup; 2 | use crate::{config, models}; 3 | use futures::future::join_all; 4 | use log::debug; 5 | 6 | pub struct Processor { 7 | config: config::Config, 8 | } 9 | 10 | impl Processor { 11 | pub fn new(config: config::Config) -> Self { 12 | Processor { 13 | config 14 | } 15 | } 16 | 17 | pub async fn handle_group(&self, group: & ProcessGroup) -> Result { 18 | debug!("handle_group {:?}", group); 19 | let question = String::new(); 20 | debug!("Question: {}", question); 21 | let model = models::gm_model::GModel::new(&self.config); 22 | let response = model.ask(question).await.clone(); 23 | debug!("{:?}", response); 24 | Ok(true) 25 | } 26 | 27 | pub async fn process(&self) -> Result { 28 | let process_groups = self.config.process_group.clone(); 29 | let mut async_group = vec![]; 30 | for group in process_groups { 31 | debug!("{:?}", group); 32 | // async_group.push(self.handle_group(&clone_group)); 33 | async_group.push(async move { 34 | let _ = self.handle_group(&group).await; 35 | }); 36 | } 37 | 38 | join_all(async_group).await; 39 | Ok(true) 40 | } 41 | 42 | 43 | } -------------------------------------------------------------------------------- /.github/workflows/release.yaml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | permissions: 4 | contents: write 5 | 6 | on: 7 | push: 8 | tags: [ "v[0-9]+.*" ] 9 | 10 | env: 11 | CARGO_TERM_COLOR: always 12 | RUST_BACKTRACE: 1 13 | 14 | defaults: 15 | run: 16 | shell: bash 17 | 18 | jobs: 19 | create-release: 20 | runs-on: ubuntu-latest 21 | permissions: 22 | contents: write 23 | steps: 24 | - uses: actions/checkout@v4 25 | - uses: taiki-e/create-gh-release-action@v1 26 | with: 27 | branch: main 28 | # (Optional) 29 | changelog: CHANGELOG.md 30 | # (Optional) Format of title. 31 | # [default value: $tag] 32 | # [possible values: variables $tag, $version, and any string] 33 | # title: $version 34 | # (Required) GitHub token for creating GitHub Releases. 35 | token: ${{ secrets.RELEASE_TOKEN }} 36 | 37 | upload-assets: 38 | needs: create-release 39 | strategy: 40 | matrix: 41 | os: 42 | - ubuntu-latest 43 | - macos-latest 44 | - windows-latest 45 | runs-on: ${{ matrix.os }} 46 | steps: 47 | - uses: actions/checkout@v4 48 | - uses: taiki-e/upload-rust-binary-action@v1 49 | with: 50 | # (required) Comma-separated list of binary names (non-extension portion of filename) to build and upload. 51 | # Note that glob pattern is not supported yet. 52 | # bin: Qpipe 53 | # (optional) On which platform to distribute the `.tar.gz` file. 54 | # [default value: unix] 55 | # [possible values: all, unix, windows, none] 56 | tar: unix 57 | # (optional) On which platform to distribute the `.zip` file. 58 | # [default value: windows] 59 | # [possible values: all, unix, windows, none] 60 | zip: windows 61 | # (required) GitHub token for uploading assets to GitHub Releases. 62 | token: ${{ secrets.RELEASE_TOKEN }} 63 | 64 | -------------------------------------------------------------------------------- /src/command.rs: -------------------------------------------------------------------------------- 1 | use std::process::Command; 2 | use std::{str, thread}; 3 | use std::str::FromStr; 4 | use cron::Schedule; 5 | use log::{debug, error, info}; 6 | use crate::config::ProcessGroup; 7 | use chrono::{Utc}; 8 | 9 | pub(crate) fn run_process_group(process_group: Vec){ 10 | for process in process_group { 11 | thread::spawn(move || { 12 | let command = process.stream.clone(); 13 | let thread_id = thread::current().id(); 14 | debug!("{:?} thread id : {:?}", process.name, thread_id); 15 | let expression = process.cron.clone(); 16 | match expression.as_str() { 17 | "now" => { execute_command(&command).expect("thread failed to execute command");}, 18 | _ => { 19 | debug!("Running cron expression: {}", expression); 20 | execute_command_with_cron(&command, &expression); 21 | } 22 | } 23 | }); 24 | } 25 | } 26 | 27 | /// Executes a command based on a given cron expression. 28 | /// 29 | /// This function continuously checks the upcoming datetime based on the provided cron expression. 30 | /// When the current datetime matches the cron expression, it executes the given command. 31 | /// 32 | /// # Parameters 33 | /// 34 | /// * `command` - A reference to a string representing the command to be executed. 35 | /// * `expression` - A reference to a string representing the cron expression. 36 | /// 37 | /// # Return 38 | /// 39 | /// This function does not return any value. It continuously executes the command based on the cron expression. 40 | pub(crate) fn execute_command_with_cron(command: &str, expression: &str){ 41 | let schedule = Schedule::from_str(expression).unwrap(); 42 | 43 | loop { 44 | let now = Utc::now(); 45 | if let Some(datetime) = schedule.upcoming(Utc).take(1).next() { 46 | let until_next = datetime - now; 47 | thread::sleep(until_next.to_std().unwrap()); 48 | info!("{} {} Running : {}", datetime, expression, command); 49 | match execute_command(&command){ 50 | Ok(_) => {}, 51 | Err(err) => { 52 | error!("thread failed to execute cron command: {}", err); 53 | } 54 | } 55 | } 56 | } 57 | } 58 | 59 | pub(crate) fn execute_command(command: &str) -> Result { 60 | // 确保日志记录器已经初始化 61 | debug!("Executing command: {}", command); 62 | // 创建 Command 对象 63 | let mut child = Command::new(command) 64 | .spawn() 65 | .map_err(|err| err.to_string())?; 66 | // 等待命令执行完成 67 | let status = child.wait().map_err(|err| err.to_string())?; 68 | // 检查命令是否成功执行 69 | Ok(status.success()) 70 | } 71 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Qpipe 2 | 3 | Qpipe 是一个AI工作流工具,目前集成了免费的智谱开放平台-GLM-4模型,用户可以通过自定义YAML格式的文件来设置定时任务工作流组。 4 | 5 | ## Quickstart 6 | 7 | **参数介绍** 8 | 9 | ```bash 10 | $ Qpipe -h 11 | Usage: Qpipe [OPTIONS] 12 | 13 | Options: 14 | -c, --config Sets a custom config file 15 | -d, --debug 16 | -h, --help Print help 17 | -V, --version Print version 18 | $ Qpipe -c /path/to/config.yaml 19 | ``` 20 | 通过指定YAML文件来声明工作流配置,就可以与AI交互了。 21 | 22 | **执行流程** 23 | 24 | 启动Qpipe后,它将会解析配置文件启动多线程处理任务组,通过每个任务组中的`prompt`对AI进行预设,再由对应的`stream`脚本与本地的AI中转服务进行交互。 25 | 26 | **配置文件结构** 27 | 28 | ```yaml 29 | # model 默认不需要更改 | glm-4-flash 是免费模型 30 | model: "glm-4-flash" 31 | # api_key 通过链接获取: https://open.bigmodel.cn/usercenter/apikeys 32 | api_key: "" 33 | url: "https://open.bigmodel.cn/api/paas/v4/chat/completions" # 默认不需要更改 34 | server: "127.0.0.1:3000" # AI中转服务监听地址 35 | 36 | process_group: 37 | # 每一个 Group 视为一个任务组,包含了 任务名称、定时任务表达式、Prompt、Stream 38 | - name: "history_analysis" 39 | cron: "0/60 * * * * *" 40 | prompt: > 41 | 你现在是一个Linux操作系统专家,请帮我分析执行的历史命令,给出一段话总结。 42 | stream: "/path/to/script/history.sh" 43 | 44 | - name: "document_search" 45 | cron: "now" 46 | prompt: > 47 | 请在我提供的文档中找出 Fofa/fofa 搜索语句,并返回 搜索语句,按照如下格式输出: 48 | {语句} 49 | # 举例 50 | app="abc" 51 | body="def" 52 | stream: "/path/to/script/request_doc.py" 53 | 54 | ``` 55 | 56 | ## 中转服务的交互流程 57 | 58 | 举例,我有一个配置文件如下: 59 | 60 | ```yaml 61 | model: "glm-4-flash" 62 | api_key: "secrets" 63 | url: "https://open.bigmodel.cn/api/paas/v4/chat/completions" 64 | # AI中转服务监听地址 65 | server: "127.0.0.1:3000" 66 | 67 | process_group: 68 | - name: "history_analysis" 69 | cron: "0/60 * * * * *" 70 | prompt: > 71 | 你现在是一个Linux操作系统专家,请帮我分析执行的历史命令,给出一段话总结。 72 | stream: "/path/to/script/history.sh" 73 | ``` 74 | 在Bash脚本中可以先POST请求`127.0.0.1:3000/{name}`,请求体中发送要喂给AI要处理的数据,服务端会在`Header`头中返回`任务ID`,然后再通过`GET`请求读取AI处理的结果(GET请求的Header头中需要携带`任务ID`)。 75 | 76 | ```bash 77 | #!/bin/zsh 78 | # /path/to/script/history.sh 79 | # 获取当前日期 80 | today=$(date +%Y-%m-%d) 81 | 82 | # 执行 atuin history list 命令并过滤出当天的记录,然后保存到一个变量中 83 | today_commands=$(atuin history list | while read -r line; do 84 | # 从每行中提取日期 85 | date_in_line=$(echo "$line" | awk '{print $1}') 86 | 87 | # 比较日期是否为今天 88 | if [[ "$date_in_line" == "$today" ]]; then 89 | echo "$line" 90 | fi 91 | done) 92 | 93 | # 打印保存的命令历史 94 | echo "$today_commands" 95 | 96 | # 使用 curl 发送今天命令历史到服务器,并提取响应头中的 Process-ID 97 | response=$(curl -X POST http://127.0.0.1:3000/history_analysis -d "$today_commands" -i) 98 | 99 | # 提取 Process-ID 响应头的值 100 | process_id=$(echo "$response" | grep "Process-ID" | awk '{print $2}' | tr -d '\r') 101 | 102 | # 打印 Process-ID 103 | echo "Process ID: $process_id" 104 | 105 | curl -X GET http://127.0.0.1:3000/history_analysis -H "Process-ID: $process_id" 106 | ``` 107 | 108 | ## 案例 109 | 110 | - 数据分析与总结:分析当日系统上执行的命令,并给出文字总结 111 | - 数据提取:[提取网络空间搜索引擎语句](https://payloads.online/archivers/2024-09-08/extract-vuln-search-queries/) 112 | - ... 113 | 114 | ## TODO 115 | 116 | -[ ] 支持OpenAI -------------------------------------------------------------------------------- /src/models/gm_model.rs: -------------------------------------------------------------------------------- 1 | use log::{debug, error}; 2 | use crate::config::Config; 3 | use serde::{Deserialize, Serialize}; 4 | use surf::http::{mime::JSON, Method, Url}; 5 | use surf::{Client, Request}; 6 | 7 | #[derive(Serialize, Deserialize)] 8 | struct Usage { 9 | pub completion_tokens: i64, 10 | pub prompt_tokens: i64, 11 | pub total_tokens: i64, 12 | } 13 | 14 | #[derive(Debug, Serialize, Deserialize)] 15 | struct Message { 16 | pub content: String, 17 | pub role: String, 18 | } 19 | 20 | #[derive(Serialize, Deserialize, Debug)] 21 | struct Struct { 22 | pub finish_reason: String, 23 | pub index: i32, 24 | pub message: Message, 25 | } 26 | 27 | 28 | #[derive(Serialize, Deserialize)] 29 | struct ResponseStruct { 30 | pub choices: Vec, 31 | pub created: i64, 32 | pub id: String, 33 | pub model: String, 34 | pub request_id: String, 35 | pub usage: Usage, 36 | } 37 | 38 | pub struct GModel { 39 | model: String, 40 | api_key: String, 41 | url: String, 42 | prompt: String, 43 | } 44 | 45 | 46 | 47 | #[derive(Debug, Serialize, Deserialize)] 48 | struct RequestStruct{ 49 | model: String, 50 | text: String, 51 | messages: Vec, 52 | } 53 | 54 | impl GModel { 55 | pub fn new(config : &Config)-> Self { 56 | GModel { 57 | model: config.model.clone(), 58 | api_key: config.api_key.clone(), 59 | url: config.url.clone(), 60 | prompt: "".to_string(), 61 | } 62 | } 63 | 64 | pub fn set_prompt(&mut self, prompt: String) { 65 | self.prompt = prompt.to_string(); 66 | } 67 | 68 | pub async fn ask(&self, question: String) -> String { 69 | let url = self.url.clone(); 70 | let api_key = self.api_key.clone(); 71 | let model = self.model.clone(); 72 | let data = RequestStruct { 73 | model, 74 | text: question.to_string(), 75 | messages: vec![ 76 | Message { 77 | role: "system".to_string(), 78 | content: self.prompt.to_string(), 79 | }, 80 | Message { 81 | role: "user".to_string(), 82 | content: question.to_string(), 83 | }], 84 | }; 85 | debug!("Request: {:?}", data); 86 | let request = Request::builder(Method::Post, Url::parse(&url).unwrap().clone(),) 87 | .content_type(JSON) 88 | .header("Authorization", format!("Bearer {}", api_key)) 89 | .body_json(&data); 90 | let client = Client::new(); 91 | let mut response = client.send(request.unwrap()).await.unwrap_or_else(|err| { 92 | error!("Error: {}", err); 93 | std::process::exit(1); 94 | }); 95 | // println!("INFO: {:?}", response.body_string().await.unwrap()); 96 | let result : ResponseStruct = response.body_json().await.unwrap_or_else(|err| { 97 | error!("Json Error: {}", err); 98 | std::process::exit(1); 99 | }); 100 | 101 | 102 | result.choices[0].message.content.clone() 103 | } 104 | } -------------------------------------------------------------------------------- /tests/test.rs: -------------------------------------------------------------------------------- 1 | 2 | 3 | #[test] 4 | fn name() { 5 | assert_eq!(1, 1); 6 | } 7 | #[test] 8 | pub fn hello(){ 9 | println!("Hello, world!"); 10 | assert_eq!(1,1); 11 | } 12 | 13 | enum AnyValue { 14 | Tuple(Vec), // 代表一个整数元组 15 | Array([i32; 5]), // 代表一个固定大小的整数数组 16 | Integer(i32), // 代表一个整数 17 | } 18 | 19 | fn print_any_value(value: AnyValue) { 20 | match value { 21 | AnyValue::Tuple(ref tuple) => { 22 | println!("Tuple: {:?}", tuple); 23 | for i in tuple { 24 | println!("{}", i); 25 | } 26 | }, 27 | AnyValue::Array(ref array) => { 28 | println!("Array: {:?}", array); 29 | for &i in array { 30 | println!("{}", i); 31 | } 32 | }, 33 | AnyValue::Integer(integer) => { 34 | println!("Integer: {}", integer); 35 | }, 36 | } 37 | } 38 | 39 | #[cfg(test)] 40 | mod tests { 41 | use chrono::{Local, Utc}; 42 | use cron::Schedule; 43 | use std::fs::File; 44 | use std::io::{BufReader, Read}; 45 | use std::str::FromStr; 46 | use std::thread::sleep; 47 | use std::io; 48 | 49 | pub fn read_from_pipe(pipe_path: &str) -> io::Result { 50 | // 打开命名管道 51 | let file = File::open(pipe_path)?; 52 | let mut reader = BufReader::new(file); 53 | // 创建一个String来存储读取的内容 54 | let mut content = String::new(); 55 | // 循环读取数据直到到达流的末尾 56 | loop { 57 | // 读取数据到content中,返回读取的字节数 58 | let bytes_read = reader.read_to_string(&mut content)?; 59 | // 如果读取到的字节数为0,则表示到达流的末尾 60 | if bytes_read == 0 { 61 | break; 62 | } 63 | // 可以在这里处理读取到的数据,例如,将其追加到content中 64 | // content.push_str(&content); // 这将重复内容,通常不需要这样做 65 | } 66 | Ok(content) 67 | } 68 | 69 | #[test] 70 | fn it_works() { 71 | assert_eq!(2 + 2, 4); 72 | } 73 | #[test] 74 | fn test_config() { 75 | 76 | // let config_path = env::current_dir().unwrap().join("tests/config.yaml"); 77 | // let global_conf = Config::fetch_conf(Some(config_path)); 78 | // println!("{:?}", global_conf); 79 | assert_eq!(1,1); 80 | } 81 | 82 | #[test] 83 | fn write_stdout(){ 84 | let stdout = "file:///dev/stdout"; 85 | } 86 | #[test] 87 | fn read_pipe() { 88 | // 命名管道的路径 89 | let pipe_path = "/tmp/input_pipe"; 90 | // 调用函数并处理结果 91 | match read_from_pipe(pipe_path) { 92 | Ok(content) => { 93 | println!("从管道读取的内容:\n{}", content); 94 | } 95 | Err(e) => { 96 | eprintln!("读取管道时发生错误: {}", e); 97 | } 98 | } 99 | } 100 | 101 | #[test] 102 | fn test_cron() { 103 | let expression = "0/5 * * * * *"; 104 | let schedule = Schedule::from_str(expression).expect("Failed to parse CRON expression"); 105 | 106 | loop { 107 | let now = Utc::now(); 108 | if let Some(next) = schedule.upcoming(Utc).take(1).next() { 109 | let until_next = next - now; 110 | sleep(until_next.to_std().unwrap()); 111 | println!( 112 | "Running every 5 seconds. Current time: {}", 113 | Local::now().format("%Y-%m-%d %H:%M:%S") 114 | ); 115 | } 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use std::path::Path; 2 | use log::{error, info}; 3 | use crate::cli::Cli; 4 | use serde::{Deserialize, Serialize}; 5 | 6 | const MODEL_NAME: &str = "glm-4-flash"; 7 | const API_URL: &str = "https://open.bigmodel.cn/api/paas/v4/chat/completions"; 8 | 9 | const PROMPT: &str = "You are an AI assistant. You will be given a task."; 10 | 11 | const CONFIG_FILE: &str = "config.yaml"; 12 | #[derive(Debug, Serialize, Deserialize, Clone)] 13 | pub struct Config { 14 | pub model: String, 15 | pub api_key: String, 16 | pub url: String, 17 | pub server: String, 18 | pub process_group: Vec, 19 | } 20 | 21 | #[derive(Debug, Serialize, Deserialize, Clone)] 22 | pub struct ProcessGroup{ 23 | pub name: String, 24 | pub cron: String, 25 | pub prompt: String, 26 | pub stream: String, 27 | } 28 | 29 | impl Default for Config { 30 | fn default() -> Self { 31 | let default_process_group = ProcessGroup { 32 | name: String::from("default"), 33 | cron: String::from("now"), 34 | prompt: String::from(PROMPT), 35 | stream: String::from("/path/to/script.py"), 36 | }; 37 | 38 | Self { 39 | model: String::from(MODEL_NAME), 40 | api_key: String::from(""), 41 | url: String::from(API_URL), 42 | process_group: vec![default_process_group], 43 | server: String::from("127.0.0.1:6000"), 44 | } 45 | } 46 | } 47 | 48 | fn generate_default_config() -> Result { 49 | let path = Path::new(CONFIG_FILE); 50 | match std::fs::metadata(path) { 51 | Ok(metadata) => { 52 | info!("config file exists: {:?}", metadata.is_file()); 53 | Ok(true) 54 | } 55 | Err(e) => { 56 | // 文件不存在 57 | match e.kind() { 58 | std::io::ErrorKind::NotFound => { 59 | let config = Config::default(); 60 | let yaml = serde_yaml::to_string(&config).unwrap(); 61 | std::fs::write("config.yaml", yaml).expect("error: failed to write config file"); 62 | info!("generate default config -> config.yaml"); 63 | Err("error: config file not provided. Please provide a config file path via `--config ") 64 | } 65 | _ => { 66 | // 其他错误,比如权限问题 67 | error!("Error checking file: {:?}", e); 68 | Err("error: other error occurred") 69 | } 70 | } 71 | } 72 | } 73 | } 74 | 75 | impl Config { 76 | pub(crate) fn new(cli:&Cli) -> Result { 77 | // 读取配置文件 78 | let mut config_path = CONFIG_FILE; 79 | if let Some(path) = cli.config.as_deref() { 80 | config_path = path.to_str().unwrap(); 81 | eprintln!("error: config file not provided. Please provide a config file path via `--config "); 82 | } 83 | 84 | match std::fs::read_to_string(config_path) { 85 | Ok(yaml_str) => { 86 | Ok(serde_yaml::from_str(&yaml_str).unwrap()) 87 | }, 88 | Err(e) => { 89 | match e.kind() { 90 | std::io::ErrorKind::NotFound => { 91 | error!("error: config file not found at {}", config_path); 92 | let config = Config::default(); 93 | info!("generate default config -> config.yaml"); 94 | let yaml = serde_yaml::to_string(&config).unwrap(); 95 | std::fs::write("config.yaml", yaml).expect("error: failed to write config file"); 96 | Err("error: config file not found") 97 | } 98 | _ => { 99 | error!("error: failed to read config file: {}", e); 100 | Err("error: other error occurred") 101 | } 102 | } 103 | } 104 | } 105 | } 106 | 107 | 108 | 109 | fn set_model_name(&mut self, model_name: &str) { 110 | self.model = model_name.to_string(); 111 | } 112 | 113 | fn set_url(&mut self, url: &str) { 114 | self.url = url.to_string(); 115 | } 116 | 117 | fn get_config(&self) -> &Config { 118 | self 119 | } 120 | 121 | // 加载指定配置文件 122 | pub(crate) fn load_yaml_config(path: &str) -> Self { 123 | let yaml_str = std::fs::read_to_string(path).expect(&format!("failure read config file {}", path)); 124 | serde_yaml::from_str(&yaml_str).unwrap() 125 | } 126 | } 127 | 128 | -------------------------------------------------------------------------------- /src/server.rs: -------------------------------------------------------------------------------- 1 | use crate::{config, models}; 2 | use std::collections::HashMap; 3 | use std::str::FromStr; 4 | use log::{debug, error, info}; 5 | use tiny_http::{Header, Response, Server}; 6 | use rand::{distributions::Alphanumeric, Rng}; 7 | 8 | const JOB_ID_HEADER_NAME: &str = "Process-ID"; 9 | pub(crate) struct WorkflowServer{ 10 | config: config::Config, 11 | server: Option, 12 | answer_cache: HashMap, 13 | } 14 | 15 | impl WorkflowServer { 16 | 17 | 18 | pub fn new(config: config::Config) -> WorkflowServer { 19 | WorkflowServer { 20 | config, 21 | server: None, 22 | answer_cache: HashMap::new(), 23 | } 24 | } 25 | 26 | pub fn start_server(&mut self) -> Result { 27 | if self.server.is_some() { 28 | return Err("Server is already running"); 29 | } 30 | let server = Server::http(self.config.server.clone()).unwrap(); 31 | info!("Server listening on http://{}", self.config.server); 32 | self.server = Some(server); 33 | Ok(true) 34 | } 35 | 36 | /// Handles incoming HTTP requests and processes them based on the defined process groups. 37 | /// 38 | /// # Parameters 39 | /// 40 | /// * `&mut self` - A mutable reference to the `WorkflowServer` instance. 41 | /// 42 | /// # Return 43 | /// 44 | /// This function does not return a value. It is an asynchronous function that handles incoming HTTP requests. 45 | pub async fn handle_request(&mut self) { 46 | // 获取服务器实例的引用 47 | let server = if let Some(server) = &self.server { 48 | server 49 | } else { 50 | error!("Server is not running."); 51 | return; 52 | }; 53 | 54 | loop { 55 | let mut request = server.recv().unwrap(); 56 | 57 | let process_group = self.config.process_group.iter().find(|group| { 58 | request.url() == format!("/{}", group.name) 59 | }); 60 | 61 | if process_group.is_none() { 62 | request.respond(Response::from_string("Route not found")).unwrap(); 63 | continue; 64 | } 65 | 66 | match process_group { 67 | Some(group) => { 68 | let mut question = String::new(); 69 | request.as_reader().read_to_string(&mut question).unwrap(); 70 | match request.method().as_str() { 71 | "POST" => { 72 | debug!("Question: {}", question); 73 | let job_id: String = rand::thread_rng() 74 | .sample_iter(&Alphanumeric) 75 | .take(10) // Set the length of the string 76 | .map(char::from) 77 | .collect(); 78 | info!("{:?} Get Job {:?}", request.url(), job_id); 79 | let mut model = models::gm_model::GModel::new(&self.config); 80 | model.set_prompt(group.prompt.clone()); 81 | let answer = model.ask(question).await.clone(); 82 | self.answer_cache.insert(job_id.clone(), answer); 83 | debug!("--> {:?}", self.answer_cache); 84 | let mut response = Response::from_string(format!( 85 | "Process group {} is running, ID: {}", 86 | group.name, job_id.clone() 87 | )); 88 | response.add_header(Header::from_str(format!( 89 | "{}: {}", 90 | JOB_ID_HEADER_NAME, job_id 91 | ).as_str()).unwrap()); 92 | request.respond(response).unwrap(); 93 | } 94 | "GET" => { 95 | debug!("Get answer for {:?}", self.answer_cache); 96 | let process_id = request.headers().iter().find(|x| { 97 | x.field == JOB_ID_HEADER_NAME.parse().unwrap() 98 | }); 99 | let response = match process_id { 100 | Some(id) => { 101 | let answer = self.answer_cache.remove(&id.value.to_string()).unwrap(); 102 | Response::from_string(answer) 103 | } 104 | None => { 105 | Response::from_string("Not Found ID") 106 | } 107 | }; 108 | request.respond(response).unwrap(); 109 | } 110 | _ => { 111 | request.respond(Response::from_string("Unsupported method")).unwrap(); 112 | } 113 | } 114 | }, 115 | None => { 116 | let response = Response::from_string("Route not found"); 117 | request.respond(response).unwrap(); 118 | } 119 | } 120 | } 121 | } 122 | } 123 | 124 | -------------------------------------------------------------------------------- /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 = "Qpipe" 7 | version = "0.1.1" 8 | dependencies = [ 9 | "chrono", 10 | "chrono-tz", 11 | "clap", 12 | "cron", 13 | "env_logger", 14 | "futures", 15 | "log", 16 | "rand 0.8.5", 17 | "schemars", 18 | "serde", 19 | "serde_json", 20 | "serde_yaml", 21 | "surf", 22 | "tiny_http", 23 | "tokio", 24 | ] 25 | 26 | [[package]] 27 | name = "addr2line" 28 | version = "0.22.0" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" 31 | dependencies = [ 32 | "gimli", 33 | ] 34 | 35 | [[package]] 36 | name = "adler" 37 | version = "1.0.2" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" 40 | 41 | [[package]] 42 | name = "aead" 43 | version = "0.3.2" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" 46 | dependencies = [ 47 | "generic-array", 48 | ] 49 | 50 | [[package]] 51 | name = "aes" 52 | version = "0.6.0" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" 55 | dependencies = [ 56 | "aes-soft", 57 | "aesni", 58 | "cipher", 59 | ] 60 | 61 | [[package]] 62 | name = "aes-gcm" 63 | version = "0.8.0" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" 66 | dependencies = [ 67 | "aead", 68 | "aes", 69 | "cipher", 70 | "ctr", 71 | "ghash", 72 | "subtle", 73 | ] 74 | 75 | [[package]] 76 | name = "aes-soft" 77 | version = "0.6.4" 78 | source = "registry+https://github.com/rust-lang/crates.io-index" 79 | checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" 80 | dependencies = [ 81 | "cipher", 82 | "opaque-debug", 83 | ] 84 | 85 | [[package]] 86 | name = "aesni" 87 | version = "0.10.0" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" 90 | dependencies = [ 91 | "cipher", 92 | "opaque-debug", 93 | ] 94 | 95 | [[package]] 96 | name = "aho-corasick" 97 | version = "1.1.3" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 100 | dependencies = [ 101 | "memchr", 102 | ] 103 | 104 | [[package]] 105 | name = "android-tzdata" 106 | version = "0.1.1" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 109 | 110 | [[package]] 111 | name = "android_system_properties" 112 | version = "0.1.5" 113 | source = "registry+https://github.com/rust-lang/crates.io-index" 114 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 115 | dependencies = [ 116 | "libc", 117 | ] 118 | 119 | [[package]] 120 | name = "anstream" 121 | version = "0.6.15" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" 124 | dependencies = [ 125 | "anstyle", 126 | "anstyle-parse", 127 | "anstyle-query", 128 | "anstyle-wincon", 129 | "colorchoice", 130 | "is_terminal_polyfill", 131 | "utf8parse", 132 | ] 133 | 134 | [[package]] 135 | name = "anstyle" 136 | version = "1.0.8" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" 139 | 140 | [[package]] 141 | name = "anstyle-parse" 142 | version = "0.2.5" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" 145 | dependencies = [ 146 | "utf8parse", 147 | ] 148 | 149 | [[package]] 150 | name = "anstyle-query" 151 | version = "1.1.1" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" 154 | dependencies = [ 155 | "windows-sys 0.52.0", 156 | ] 157 | 158 | [[package]] 159 | name = "anstyle-wincon" 160 | version = "3.0.4" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" 163 | dependencies = [ 164 | "anstyle", 165 | "windows-sys 0.52.0", 166 | ] 167 | 168 | [[package]] 169 | name = "anyhow" 170 | version = "1.0.86" 171 | source = "registry+https://github.com/rust-lang/crates.io-index" 172 | checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" 173 | 174 | [[package]] 175 | name = "ascii" 176 | version = "1.1.0" 177 | source = "registry+https://github.com/rust-lang/crates.io-index" 178 | checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" 179 | 180 | [[package]] 181 | name = "async-channel" 182 | version = "1.9.0" 183 | source = "registry+https://github.com/rust-lang/crates.io-index" 184 | checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" 185 | dependencies = [ 186 | "concurrent-queue", 187 | "event-listener 2.5.3", 188 | "futures-core", 189 | ] 190 | 191 | [[package]] 192 | name = "async-channel" 193 | version = "2.3.1" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 196 | dependencies = [ 197 | "concurrent-queue", 198 | "event-listener-strategy", 199 | "futures-core", 200 | "pin-project-lite", 201 | ] 202 | 203 | [[package]] 204 | name = "async-executor" 205 | version = "1.13.0" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" 208 | dependencies = [ 209 | "async-task", 210 | "concurrent-queue", 211 | "fastrand 2.1.1", 212 | "futures-lite 2.3.0", 213 | "slab", 214 | ] 215 | 216 | [[package]] 217 | name = "async-global-executor" 218 | version = "2.4.1" 219 | source = "registry+https://github.com/rust-lang/crates.io-index" 220 | checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" 221 | dependencies = [ 222 | "async-channel 2.3.1", 223 | "async-executor", 224 | "async-io 2.3.4", 225 | "async-lock 3.4.0", 226 | "blocking", 227 | "futures-lite 2.3.0", 228 | "once_cell", 229 | ] 230 | 231 | [[package]] 232 | name = "async-io" 233 | version = "1.13.0" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" 236 | dependencies = [ 237 | "async-lock 2.8.0", 238 | "autocfg", 239 | "cfg-if", 240 | "concurrent-queue", 241 | "futures-lite 1.13.0", 242 | "log", 243 | "parking", 244 | "polling 2.8.0", 245 | "rustix 0.37.27", 246 | "slab", 247 | "socket2 0.4.10", 248 | "waker-fn", 249 | ] 250 | 251 | [[package]] 252 | name = "async-io" 253 | version = "2.3.4" 254 | source = "registry+https://github.com/rust-lang/crates.io-index" 255 | checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" 256 | dependencies = [ 257 | "async-lock 3.4.0", 258 | "cfg-if", 259 | "concurrent-queue", 260 | "futures-io", 261 | "futures-lite 2.3.0", 262 | "parking", 263 | "polling 3.7.3", 264 | "rustix 0.38.35", 265 | "slab", 266 | "tracing", 267 | "windows-sys 0.59.0", 268 | ] 269 | 270 | [[package]] 271 | name = "async-lock" 272 | version = "2.8.0" 273 | source = "registry+https://github.com/rust-lang/crates.io-index" 274 | checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" 275 | dependencies = [ 276 | "event-listener 2.5.3", 277 | ] 278 | 279 | [[package]] 280 | name = "async-lock" 281 | version = "3.4.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 284 | dependencies = [ 285 | "event-listener 5.3.1", 286 | "event-listener-strategy", 287 | "pin-project-lite", 288 | ] 289 | 290 | [[package]] 291 | name = "async-std" 292 | version = "1.12.0" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" 295 | dependencies = [ 296 | "async-channel 1.9.0", 297 | "async-global-executor", 298 | "async-io 1.13.0", 299 | "async-lock 2.8.0", 300 | "crossbeam-utils", 301 | "futures-channel", 302 | "futures-core", 303 | "futures-io", 304 | "futures-lite 1.13.0", 305 | "gloo-timers", 306 | "kv-log-macro", 307 | "log", 308 | "memchr", 309 | "once_cell", 310 | "pin-project-lite", 311 | "pin-utils", 312 | "slab", 313 | "wasm-bindgen-futures", 314 | ] 315 | 316 | [[package]] 317 | name = "async-task" 318 | version = "4.7.1" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 321 | 322 | [[package]] 323 | name = "async-trait" 324 | version = "0.1.81" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" 327 | dependencies = [ 328 | "proc-macro2", 329 | "quote", 330 | "syn 2.0.75", 331 | ] 332 | 333 | [[package]] 334 | name = "atomic-waker" 335 | version = "1.1.2" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 338 | 339 | [[package]] 340 | name = "autocfg" 341 | version = "1.3.0" 342 | source = "registry+https://github.com/rust-lang/crates.io-index" 343 | checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" 344 | 345 | [[package]] 346 | name = "backtrace" 347 | version = "0.3.73" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" 350 | dependencies = [ 351 | "addr2line", 352 | "cc", 353 | "cfg-if", 354 | "libc", 355 | "miniz_oxide", 356 | "object", 357 | "rustc-demangle", 358 | ] 359 | 360 | [[package]] 361 | name = "base-x" 362 | version = "0.2.11" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 365 | 366 | [[package]] 367 | name = "base64" 368 | version = "0.13.1" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 371 | 372 | [[package]] 373 | name = "bitflags" 374 | version = "1.3.2" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 377 | 378 | [[package]] 379 | name = "bitflags" 380 | version = "2.6.0" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 383 | 384 | [[package]] 385 | name = "block-buffer" 386 | version = "0.9.0" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" 389 | dependencies = [ 390 | "generic-array", 391 | ] 392 | 393 | [[package]] 394 | name = "blocking" 395 | version = "1.6.1" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" 398 | dependencies = [ 399 | "async-channel 2.3.1", 400 | "async-task", 401 | "futures-io", 402 | "futures-lite 2.3.0", 403 | "piper", 404 | ] 405 | 406 | [[package]] 407 | name = "bumpalo" 408 | version = "3.16.0" 409 | source = "registry+https://github.com/rust-lang/crates.io-index" 410 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 411 | 412 | [[package]] 413 | name = "byteorder" 414 | version = "1.5.0" 415 | source = "registry+https://github.com/rust-lang/crates.io-index" 416 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 417 | 418 | [[package]] 419 | name = "bytes" 420 | version = "0.5.6" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" 423 | 424 | [[package]] 425 | name = "bytes" 426 | version = "1.7.1" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" 429 | 430 | [[package]] 431 | name = "cc" 432 | version = "1.1.15" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" 435 | dependencies = [ 436 | "shlex", 437 | ] 438 | 439 | [[package]] 440 | name = "cfg-if" 441 | version = "1.0.0" 442 | source = "registry+https://github.com/rust-lang/crates.io-index" 443 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 444 | 445 | [[package]] 446 | name = "chrono" 447 | version = "0.4.38" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" 450 | dependencies = [ 451 | "android-tzdata", 452 | "iana-time-zone", 453 | "js-sys", 454 | "num-traits", 455 | "wasm-bindgen", 456 | "windows-targets 0.52.6", 457 | ] 458 | 459 | [[package]] 460 | name = "chrono-tz" 461 | version = "0.9.0" 462 | source = "registry+https://github.com/rust-lang/crates.io-index" 463 | checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" 464 | dependencies = [ 465 | "chrono", 466 | "chrono-tz-build", 467 | "phf", 468 | ] 469 | 470 | [[package]] 471 | name = "chrono-tz-build" 472 | version = "0.3.0" 473 | source = "registry+https://github.com/rust-lang/crates.io-index" 474 | checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" 475 | dependencies = [ 476 | "parse-zoneinfo", 477 | "phf", 478 | "phf_codegen", 479 | ] 480 | 481 | [[package]] 482 | name = "chunked_transfer" 483 | version = "1.5.0" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" 486 | 487 | [[package]] 488 | name = "cipher" 489 | version = "0.2.5" 490 | source = "registry+https://github.com/rust-lang/crates.io-index" 491 | checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" 492 | dependencies = [ 493 | "generic-array", 494 | ] 495 | 496 | [[package]] 497 | name = "clap" 498 | version = "4.5.16" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" 501 | dependencies = [ 502 | "clap_builder", 503 | "clap_derive", 504 | ] 505 | 506 | [[package]] 507 | name = "clap_builder" 508 | version = "4.5.15" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" 511 | dependencies = [ 512 | "anstream", 513 | "anstyle", 514 | "clap_lex", 515 | "strsim", 516 | ] 517 | 518 | [[package]] 519 | name = "clap_derive" 520 | version = "4.5.13" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" 523 | dependencies = [ 524 | "heck", 525 | "proc-macro2", 526 | "quote", 527 | "syn 2.0.75", 528 | ] 529 | 530 | [[package]] 531 | name = "clap_lex" 532 | version = "0.7.2" 533 | source = "registry+https://github.com/rust-lang/crates.io-index" 534 | checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" 535 | 536 | [[package]] 537 | name = "colorchoice" 538 | version = "1.0.2" 539 | source = "registry+https://github.com/rust-lang/crates.io-index" 540 | checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" 541 | 542 | [[package]] 543 | name = "concurrent-queue" 544 | version = "2.5.0" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 547 | dependencies = [ 548 | "crossbeam-utils", 549 | ] 550 | 551 | [[package]] 552 | name = "const_fn" 553 | version = "0.4.10" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" 556 | 557 | [[package]] 558 | name = "cookie" 559 | version = "0.14.4" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" 562 | dependencies = [ 563 | "aes-gcm", 564 | "base64", 565 | "hkdf", 566 | "hmac", 567 | "percent-encoding", 568 | "rand 0.8.5", 569 | "sha2", 570 | "time", 571 | "version_check", 572 | ] 573 | 574 | [[package]] 575 | name = "core-foundation-sys" 576 | version = "0.8.7" 577 | source = "registry+https://github.com/rust-lang/crates.io-index" 578 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 579 | 580 | [[package]] 581 | name = "cpufeatures" 582 | version = "0.2.13" 583 | source = "registry+https://github.com/rust-lang/crates.io-index" 584 | checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" 585 | dependencies = [ 586 | "libc", 587 | ] 588 | 589 | [[package]] 590 | name = "cpuid-bool" 591 | version = "0.2.0" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" 594 | 595 | [[package]] 596 | name = "cron" 597 | version = "0.12.1" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" 600 | dependencies = [ 601 | "chrono", 602 | "nom", 603 | "once_cell", 604 | ] 605 | 606 | [[package]] 607 | name = "crossbeam-utils" 608 | version = "0.8.20" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 611 | 612 | [[package]] 613 | name = "crypto-mac" 614 | version = "0.10.1" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a" 617 | dependencies = [ 618 | "generic-array", 619 | "subtle", 620 | ] 621 | 622 | [[package]] 623 | name = "ctr" 624 | version = "0.6.0" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" 627 | dependencies = [ 628 | "cipher", 629 | ] 630 | 631 | [[package]] 632 | name = "curl" 633 | version = "0.4.46" 634 | source = "registry+https://github.com/rust-lang/crates.io-index" 635 | checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" 636 | dependencies = [ 637 | "curl-sys", 638 | "libc", 639 | "openssl-probe", 640 | "openssl-sys", 641 | "schannel", 642 | "socket2 0.5.7", 643 | "windows-sys 0.52.0", 644 | ] 645 | 646 | [[package]] 647 | name = "curl-sys" 648 | version = "0.4.74+curl-8.9.0" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "8af10b986114528fcdc4b63b6f5f021b7057618411046a4de2ba0f0149a097bf" 651 | dependencies = [ 652 | "cc", 653 | "libc", 654 | "libnghttp2-sys", 655 | "libz-sys", 656 | "openssl-sys", 657 | "pkg-config", 658 | "vcpkg", 659 | "windows-sys 0.52.0", 660 | ] 661 | 662 | [[package]] 663 | name = "digest" 664 | version = "0.9.0" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" 667 | dependencies = [ 668 | "generic-array", 669 | ] 670 | 671 | [[package]] 672 | name = "discard" 673 | version = "1.0.4" 674 | source = "registry+https://github.com/rust-lang/crates.io-index" 675 | checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" 676 | 677 | [[package]] 678 | name = "dyn-clone" 679 | version = "1.0.17" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" 682 | 683 | [[package]] 684 | name = "encoding_rs" 685 | version = "0.8.34" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" 688 | dependencies = [ 689 | "cfg-if", 690 | ] 691 | 692 | [[package]] 693 | name = "env_filter" 694 | version = "0.1.2" 695 | source = "registry+https://github.com/rust-lang/crates.io-index" 696 | checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" 697 | dependencies = [ 698 | "log", 699 | "regex", 700 | ] 701 | 702 | [[package]] 703 | name = "env_logger" 704 | version = "0.11.5" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" 707 | dependencies = [ 708 | "anstream", 709 | "anstyle", 710 | "env_filter", 711 | "humantime", 712 | "log", 713 | ] 714 | 715 | [[package]] 716 | name = "errno" 717 | version = "0.3.9" 718 | source = "registry+https://github.com/rust-lang/crates.io-index" 719 | checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 720 | dependencies = [ 721 | "libc", 722 | "windows-sys 0.52.0", 723 | ] 724 | 725 | [[package]] 726 | name = "event-listener" 727 | version = "2.5.3" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 730 | 731 | [[package]] 732 | name = "event-listener" 733 | version = "5.3.1" 734 | source = "registry+https://github.com/rust-lang/crates.io-index" 735 | checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" 736 | dependencies = [ 737 | "concurrent-queue", 738 | "parking", 739 | "pin-project-lite", 740 | ] 741 | 742 | [[package]] 743 | name = "event-listener-strategy" 744 | version = "0.5.2" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" 747 | dependencies = [ 748 | "event-listener 5.3.1", 749 | "pin-project-lite", 750 | ] 751 | 752 | [[package]] 753 | name = "fastrand" 754 | version = "1.9.0" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" 757 | dependencies = [ 758 | "instant", 759 | ] 760 | 761 | [[package]] 762 | name = "fastrand" 763 | version = "2.1.1" 764 | source = "registry+https://github.com/rust-lang/crates.io-index" 765 | checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 766 | 767 | [[package]] 768 | name = "flume" 769 | version = "0.9.2" 770 | source = "registry+https://github.com/rust-lang/crates.io-index" 771 | checksum = "1bebadab126f8120d410b677ed95eee4ba6eb7c6dd8e34a5ec88a08050e26132" 772 | dependencies = [ 773 | "futures-core", 774 | "futures-sink", 775 | "spinning_top", 776 | ] 777 | 778 | [[package]] 779 | name = "fnv" 780 | version = "1.0.7" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 783 | 784 | [[package]] 785 | name = "form_urlencoded" 786 | version = "1.2.1" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 789 | dependencies = [ 790 | "percent-encoding", 791 | ] 792 | 793 | [[package]] 794 | name = "futures" 795 | version = "0.3.30" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 798 | dependencies = [ 799 | "futures-channel", 800 | "futures-core", 801 | "futures-executor", 802 | "futures-io", 803 | "futures-sink", 804 | "futures-task", 805 | "futures-util", 806 | ] 807 | 808 | [[package]] 809 | name = "futures-channel" 810 | version = "0.3.30" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 813 | dependencies = [ 814 | "futures-core", 815 | "futures-sink", 816 | ] 817 | 818 | [[package]] 819 | name = "futures-core" 820 | version = "0.3.30" 821 | source = "registry+https://github.com/rust-lang/crates.io-index" 822 | checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 823 | 824 | [[package]] 825 | name = "futures-executor" 826 | version = "0.3.30" 827 | source = "registry+https://github.com/rust-lang/crates.io-index" 828 | checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 829 | dependencies = [ 830 | "futures-core", 831 | "futures-task", 832 | "futures-util", 833 | ] 834 | 835 | [[package]] 836 | name = "futures-io" 837 | version = "0.3.30" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 840 | 841 | [[package]] 842 | name = "futures-lite" 843 | version = "1.13.0" 844 | source = "registry+https://github.com/rust-lang/crates.io-index" 845 | checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" 846 | dependencies = [ 847 | "fastrand 1.9.0", 848 | "futures-core", 849 | "futures-io", 850 | "memchr", 851 | "parking", 852 | "pin-project-lite", 853 | "waker-fn", 854 | ] 855 | 856 | [[package]] 857 | name = "futures-lite" 858 | version = "2.3.0" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" 861 | dependencies = [ 862 | "fastrand 2.1.1", 863 | "futures-core", 864 | "futures-io", 865 | "parking", 866 | "pin-project-lite", 867 | ] 868 | 869 | [[package]] 870 | name = "futures-macro" 871 | version = "0.3.30" 872 | source = "registry+https://github.com/rust-lang/crates.io-index" 873 | checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 874 | dependencies = [ 875 | "proc-macro2", 876 | "quote", 877 | "syn 2.0.75", 878 | ] 879 | 880 | [[package]] 881 | name = "futures-sink" 882 | version = "0.3.30" 883 | source = "registry+https://github.com/rust-lang/crates.io-index" 884 | checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 885 | 886 | [[package]] 887 | name = "futures-task" 888 | version = "0.3.30" 889 | source = "registry+https://github.com/rust-lang/crates.io-index" 890 | checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 891 | 892 | [[package]] 893 | name = "futures-util" 894 | version = "0.3.30" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 897 | dependencies = [ 898 | "futures-channel", 899 | "futures-core", 900 | "futures-io", 901 | "futures-macro", 902 | "futures-sink", 903 | "futures-task", 904 | "memchr", 905 | "pin-project-lite", 906 | "pin-utils", 907 | "slab", 908 | ] 909 | 910 | [[package]] 911 | name = "generic-array" 912 | version = "0.14.7" 913 | source = "registry+https://github.com/rust-lang/crates.io-index" 914 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 915 | dependencies = [ 916 | "typenum", 917 | "version_check", 918 | ] 919 | 920 | [[package]] 921 | name = "getrandom" 922 | version = "0.1.16" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" 925 | dependencies = [ 926 | "cfg-if", 927 | "libc", 928 | "wasi 0.9.0+wasi-snapshot-preview1", 929 | ] 930 | 931 | [[package]] 932 | name = "getrandom" 933 | version = "0.2.15" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 936 | dependencies = [ 937 | "cfg-if", 938 | "libc", 939 | "wasi 0.11.0+wasi-snapshot-preview1", 940 | ] 941 | 942 | [[package]] 943 | name = "ghash" 944 | version = "0.3.1" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375" 947 | dependencies = [ 948 | "opaque-debug", 949 | "polyval", 950 | ] 951 | 952 | [[package]] 953 | name = "gimli" 954 | version = "0.29.0" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" 957 | 958 | [[package]] 959 | name = "gloo-timers" 960 | version = "0.2.6" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" 963 | dependencies = [ 964 | "futures-channel", 965 | "futures-core", 966 | "js-sys", 967 | "wasm-bindgen", 968 | ] 969 | 970 | [[package]] 971 | name = "hashbrown" 972 | version = "0.12.3" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 975 | 976 | [[package]] 977 | name = "heck" 978 | version = "0.5.0" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 981 | 982 | [[package]] 983 | name = "hermit-abi" 984 | version = "0.3.9" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 987 | 988 | [[package]] 989 | name = "hermit-abi" 990 | version = "0.4.0" 991 | source = "registry+https://github.com/rust-lang/crates.io-index" 992 | checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" 993 | 994 | [[package]] 995 | name = "hkdf" 996 | version = "0.10.0" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" 999 | dependencies = [ 1000 | "digest", 1001 | "hmac", 1002 | ] 1003 | 1004 | [[package]] 1005 | name = "hmac" 1006 | version = "0.10.1" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15" 1009 | dependencies = [ 1010 | "crypto-mac", 1011 | "digest", 1012 | ] 1013 | 1014 | [[package]] 1015 | name = "http" 1016 | version = "0.2.12" 1017 | source = "registry+https://github.com/rust-lang/crates.io-index" 1018 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1019 | dependencies = [ 1020 | "bytes 1.7.1", 1021 | "fnv", 1022 | "itoa", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "http-client" 1027 | version = "6.5.3" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "1947510dc91e2bf586ea5ffb412caad7673264e14bb39fb9078da114a94ce1a5" 1030 | dependencies = [ 1031 | "async-std", 1032 | "async-trait", 1033 | "cfg-if", 1034 | "http-types", 1035 | "isahc", 1036 | "log", 1037 | ] 1038 | 1039 | [[package]] 1040 | name = "http-types" 1041 | version = "2.12.0" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" 1044 | dependencies = [ 1045 | "anyhow", 1046 | "async-channel 1.9.0", 1047 | "async-std", 1048 | "base64", 1049 | "cookie", 1050 | "futures-lite 1.13.0", 1051 | "infer", 1052 | "pin-project-lite", 1053 | "rand 0.7.3", 1054 | "serde", 1055 | "serde_json", 1056 | "serde_qs", 1057 | "serde_urlencoded", 1058 | "url", 1059 | ] 1060 | 1061 | [[package]] 1062 | name = "httpdate" 1063 | version = "1.0.3" 1064 | source = "registry+https://github.com/rust-lang/crates.io-index" 1065 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1066 | 1067 | [[package]] 1068 | name = "humantime" 1069 | version = "2.1.0" 1070 | source = "registry+https://github.com/rust-lang/crates.io-index" 1071 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1072 | 1073 | [[package]] 1074 | name = "iana-time-zone" 1075 | version = "0.1.60" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" 1078 | dependencies = [ 1079 | "android_system_properties", 1080 | "core-foundation-sys", 1081 | "iana-time-zone-haiku", 1082 | "js-sys", 1083 | "wasm-bindgen", 1084 | "windows-core", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "iana-time-zone-haiku" 1089 | version = "0.1.2" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1092 | dependencies = [ 1093 | "cc", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "idna" 1098 | version = "0.5.0" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" 1101 | dependencies = [ 1102 | "unicode-bidi", 1103 | "unicode-normalization", 1104 | ] 1105 | 1106 | [[package]] 1107 | name = "indexmap" 1108 | version = "1.9.3" 1109 | source = "registry+https://github.com/rust-lang/crates.io-index" 1110 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1111 | dependencies = [ 1112 | "autocfg", 1113 | "hashbrown", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "infer" 1118 | version = "0.2.3" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" 1121 | 1122 | [[package]] 1123 | name = "instant" 1124 | version = "0.1.13" 1125 | source = "registry+https://github.com/rust-lang/crates.io-index" 1126 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" 1127 | dependencies = [ 1128 | "cfg-if", 1129 | ] 1130 | 1131 | [[package]] 1132 | name = "io-lifetimes" 1133 | version = "1.0.11" 1134 | source = "registry+https://github.com/rust-lang/crates.io-index" 1135 | checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" 1136 | dependencies = [ 1137 | "hermit-abi 0.3.9", 1138 | "libc", 1139 | "windows-sys 0.48.0", 1140 | ] 1141 | 1142 | [[package]] 1143 | name = "is_terminal_polyfill" 1144 | version = "1.70.1" 1145 | source = "registry+https://github.com/rust-lang/crates.io-index" 1146 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1147 | 1148 | [[package]] 1149 | name = "isahc" 1150 | version = "0.9.14" 1151 | source = "registry+https://github.com/rust-lang/crates.io-index" 1152 | checksum = "e2948a0ce43e2c2ef11d7edf6816508998d99e13badd1150be0914205df9388a" 1153 | dependencies = [ 1154 | "bytes 0.5.6", 1155 | "crossbeam-utils", 1156 | "curl", 1157 | "curl-sys", 1158 | "flume", 1159 | "futures-lite 1.13.0", 1160 | "http", 1161 | "log", 1162 | "once_cell", 1163 | "slab", 1164 | "sluice", 1165 | "tracing", 1166 | "tracing-futures", 1167 | "url", 1168 | "waker-fn", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "itoa" 1173 | version = "1.0.11" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" 1176 | 1177 | [[package]] 1178 | name = "js-sys" 1179 | version = "0.3.70" 1180 | source = "registry+https://github.com/rust-lang/crates.io-index" 1181 | checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" 1182 | dependencies = [ 1183 | "wasm-bindgen", 1184 | ] 1185 | 1186 | [[package]] 1187 | name = "kv-log-macro" 1188 | version = "1.0.7" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" 1191 | dependencies = [ 1192 | "log", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "libc" 1197 | version = "0.2.158" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" 1200 | 1201 | [[package]] 1202 | name = "libnghttp2-sys" 1203 | version = "0.1.10+1.61.0" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "959c25552127d2e1fa72f0e52548ec04fc386e827ba71a7bd01db46a447dc135" 1206 | dependencies = [ 1207 | "cc", 1208 | "libc", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "libz-sys" 1213 | version = "1.1.20" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" 1216 | dependencies = [ 1217 | "cc", 1218 | "libc", 1219 | "pkg-config", 1220 | "vcpkg", 1221 | ] 1222 | 1223 | [[package]] 1224 | name = "linked-hash-map" 1225 | version = "0.5.6" 1226 | source = "registry+https://github.com/rust-lang/crates.io-index" 1227 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1228 | 1229 | [[package]] 1230 | name = "linux-raw-sys" 1231 | version = "0.3.8" 1232 | source = "registry+https://github.com/rust-lang/crates.io-index" 1233 | checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" 1234 | 1235 | [[package]] 1236 | name = "linux-raw-sys" 1237 | version = "0.4.14" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1240 | 1241 | [[package]] 1242 | name = "lock_api" 1243 | version = "0.4.12" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1246 | dependencies = [ 1247 | "autocfg", 1248 | "scopeguard", 1249 | ] 1250 | 1251 | [[package]] 1252 | name = "log" 1253 | version = "0.4.22" 1254 | source = "registry+https://github.com/rust-lang/crates.io-index" 1255 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 1256 | dependencies = [ 1257 | "value-bag", 1258 | ] 1259 | 1260 | [[package]] 1261 | name = "memchr" 1262 | version = "2.7.4" 1263 | source = "registry+https://github.com/rust-lang/crates.io-index" 1264 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1265 | 1266 | [[package]] 1267 | name = "mime" 1268 | version = "0.3.17" 1269 | source = "registry+https://github.com/rust-lang/crates.io-index" 1270 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1271 | 1272 | [[package]] 1273 | name = "mime_guess" 1274 | version = "2.0.5" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1277 | dependencies = [ 1278 | "mime", 1279 | "unicase", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "minimal-lexical" 1284 | version = "0.2.1" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1287 | 1288 | [[package]] 1289 | name = "miniz_oxide" 1290 | version = "0.7.4" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" 1293 | dependencies = [ 1294 | "adler", 1295 | ] 1296 | 1297 | [[package]] 1298 | name = "nom" 1299 | version = "7.1.3" 1300 | source = "registry+https://github.com/rust-lang/crates.io-index" 1301 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1302 | dependencies = [ 1303 | "memchr", 1304 | "minimal-lexical", 1305 | ] 1306 | 1307 | [[package]] 1308 | name = "num-traits" 1309 | version = "0.2.19" 1310 | source = "registry+https://github.com/rust-lang/crates.io-index" 1311 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1312 | dependencies = [ 1313 | "autocfg", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "object" 1318 | version = "0.36.3" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" 1321 | dependencies = [ 1322 | "memchr", 1323 | ] 1324 | 1325 | [[package]] 1326 | name = "once_cell" 1327 | version = "1.19.0" 1328 | source = "registry+https://github.com/rust-lang/crates.io-index" 1329 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 1330 | 1331 | [[package]] 1332 | name = "opaque-debug" 1333 | version = "0.3.1" 1334 | source = "registry+https://github.com/rust-lang/crates.io-index" 1335 | checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 1336 | 1337 | [[package]] 1338 | name = "openssl-probe" 1339 | version = "0.1.5" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 1342 | 1343 | [[package]] 1344 | name = "openssl-sys" 1345 | version = "0.9.103" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" 1348 | dependencies = [ 1349 | "cc", 1350 | "libc", 1351 | "pkg-config", 1352 | "vcpkg", 1353 | ] 1354 | 1355 | [[package]] 1356 | name = "parking" 1357 | version = "2.2.0" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" 1360 | 1361 | [[package]] 1362 | name = "parse-zoneinfo" 1363 | version = "0.3.1" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" 1366 | dependencies = [ 1367 | "regex", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "percent-encoding" 1372 | version = "2.3.1" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1375 | 1376 | [[package]] 1377 | name = "phf" 1378 | version = "0.11.2" 1379 | source = "registry+https://github.com/rust-lang/crates.io-index" 1380 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 1381 | dependencies = [ 1382 | "phf_shared", 1383 | ] 1384 | 1385 | [[package]] 1386 | name = "phf_codegen" 1387 | version = "0.11.2" 1388 | source = "registry+https://github.com/rust-lang/crates.io-index" 1389 | checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" 1390 | dependencies = [ 1391 | "phf_generator", 1392 | "phf_shared", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "phf_generator" 1397 | version = "0.11.2" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" 1400 | dependencies = [ 1401 | "phf_shared", 1402 | "rand 0.8.5", 1403 | ] 1404 | 1405 | [[package]] 1406 | name = "phf_shared" 1407 | version = "0.11.2" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 1410 | dependencies = [ 1411 | "siphasher", 1412 | ] 1413 | 1414 | [[package]] 1415 | name = "pin-project" 1416 | version = "1.1.5" 1417 | source = "registry+https://github.com/rust-lang/crates.io-index" 1418 | checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" 1419 | dependencies = [ 1420 | "pin-project-internal", 1421 | ] 1422 | 1423 | [[package]] 1424 | name = "pin-project-internal" 1425 | version = "1.1.5" 1426 | source = "registry+https://github.com/rust-lang/crates.io-index" 1427 | checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" 1428 | dependencies = [ 1429 | "proc-macro2", 1430 | "quote", 1431 | "syn 2.0.75", 1432 | ] 1433 | 1434 | [[package]] 1435 | name = "pin-project-lite" 1436 | version = "0.2.14" 1437 | source = "registry+https://github.com/rust-lang/crates.io-index" 1438 | checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 1439 | 1440 | [[package]] 1441 | name = "pin-utils" 1442 | version = "0.1.0" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1445 | 1446 | [[package]] 1447 | name = "piper" 1448 | version = "0.2.4" 1449 | source = "registry+https://github.com/rust-lang/crates.io-index" 1450 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 1451 | dependencies = [ 1452 | "atomic-waker", 1453 | "fastrand 2.1.1", 1454 | "futures-io", 1455 | ] 1456 | 1457 | [[package]] 1458 | name = "pkg-config" 1459 | version = "0.3.30" 1460 | source = "registry+https://github.com/rust-lang/crates.io-index" 1461 | checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" 1462 | 1463 | [[package]] 1464 | name = "polling" 1465 | version = "2.8.0" 1466 | source = "registry+https://github.com/rust-lang/crates.io-index" 1467 | checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" 1468 | dependencies = [ 1469 | "autocfg", 1470 | "bitflags 1.3.2", 1471 | "cfg-if", 1472 | "concurrent-queue", 1473 | "libc", 1474 | "log", 1475 | "pin-project-lite", 1476 | "windows-sys 0.48.0", 1477 | ] 1478 | 1479 | [[package]] 1480 | name = "polling" 1481 | version = "3.7.3" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" 1484 | dependencies = [ 1485 | "cfg-if", 1486 | "concurrent-queue", 1487 | "hermit-abi 0.4.0", 1488 | "pin-project-lite", 1489 | "rustix 0.38.35", 1490 | "tracing", 1491 | "windows-sys 0.59.0", 1492 | ] 1493 | 1494 | [[package]] 1495 | name = "polyval" 1496 | version = "0.4.5" 1497 | source = "registry+https://github.com/rust-lang/crates.io-index" 1498 | checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" 1499 | dependencies = [ 1500 | "cpuid-bool", 1501 | "opaque-debug", 1502 | "universal-hash", 1503 | ] 1504 | 1505 | [[package]] 1506 | name = "ppv-lite86" 1507 | version = "0.2.20" 1508 | source = "registry+https://github.com/rust-lang/crates.io-index" 1509 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1510 | dependencies = [ 1511 | "zerocopy", 1512 | ] 1513 | 1514 | [[package]] 1515 | name = "proc-macro-hack" 1516 | version = "0.5.20+deprecated" 1517 | source = "registry+https://github.com/rust-lang/crates.io-index" 1518 | checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" 1519 | 1520 | [[package]] 1521 | name = "proc-macro2" 1522 | version = "1.0.86" 1523 | source = "registry+https://github.com/rust-lang/crates.io-index" 1524 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 1525 | dependencies = [ 1526 | "unicode-ident", 1527 | ] 1528 | 1529 | [[package]] 1530 | name = "quote" 1531 | version = "1.0.36" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" 1534 | dependencies = [ 1535 | "proc-macro2", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "rand" 1540 | version = "0.7.3" 1541 | source = "registry+https://github.com/rust-lang/crates.io-index" 1542 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 1543 | dependencies = [ 1544 | "getrandom 0.1.16", 1545 | "libc", 1546 | "rand_chacha 0.2.2", 1547 | "rand_core 0.5.1", 1548 | "rand_hc", 1549 | ] 1550 | 1551 | [[package]] 1552 | name = "rand" 1553 | version = "0.8.5" 1554 | source = "registry+https://github.com/rust-lang/crates.io-index" 1555 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1556 | dependencies = [ 1557 | "libc", 1558 | "rand_chacha 0.3.1", 1559 | "rand_core 0.6.4", 1560 | ] 1561 | 1562 | [[package]] 1563 | name = "rand_chacha" 1564 | version = "0.2.2" 1565 | source = "registry+https://github.com/rust-lang/crates.io-index" 1566 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 1567 | dependencies = [ 1568 | "ppv-lite86", 1569 | "rand_core 0.5.1", 1570 | ] 1571 | 1572 | [[package]] 1573 | name = "rand_chacha" 1574 | version = "0.3.1" 1575 | source = "registry+https://github.com/rust-lang/crates.io-index" 1576 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1577 | dependencies = [ 1578 | "ppv-lite86", 1579 | "rand_core 0.6.4", 1580 | ] 1581 | 1582 | [[package]] 1583 | name = "rand_core" 1584 | version = "0.5.1" 1585 | source = "registry+https://github.com/rust-lang/crates.io-index" 1586 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 1587 | dependencies = [ 1588 | "getrandom 0.1.16", 1589 | ] 1590 | 1591 | [[package]] 1592 | name = "rand_core" 1593 | version = "0.6.4" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1596 | dependencies = [ 1597 | "getrandom 0.2.15", 1598 | ] 1599 | 1600 | [[package]] 1601 | name = "rand_hc" 1602 | version = "0.2.0" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 1605 | dependencies = [ 1606 | "rand_core 0.5.1", 1607 | ] 1608 | 1609 | [[package]] 1610 | name = "regex" 1611 | version = "1.10.6" 1612 | source = "registry+https://github.com/rust-lang/crates.io-index" 1613 | checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" 1614 | dependencies = [ 1615 | "aho-corasick", 1616 | "memchr", 1617 | "regex-automata", 1618 | "regex-syntax", 1619 | ] 1620 | 1621 | [[package]] 1622 | name = "regex-automata" 1623 | version = "0.4.7" 1624 | source = "registry+https://github.com/rust-lang/crates.io-index" 1625 | checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" 1626 | dependencies = [ 1627 | "aho-corasick", 1628 | "memchr", 1629 | "regex-syntax", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "regex-syntax" 1634 | version = "0.8.4" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" 1637 | 1638 | [[package]] 1639 | name = "rustc-demangle" 1640 | version = "0.1.24" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1643 | 1644 | [[package]] 1645 | name = "rustc_version" 1646 | version = "0.2.3" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 1649 | dependencies = [ 1650 | "semver", 1651 | ] 1652 | 1653 | [[package]] 1654 | name = "rustix" 1655 | version = "0.37.27" 1656 | source = "registry+https://github.com/rust-lang/crates.io-index" 1657 | checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" 1658 | dependencies = [ 1659 | "bitflags 1.3.2", 1660 | "errno", 1661 | "io-lifetimes", 1662 | "libc", 1663 | "linux-raw-sys 0.3.8", 1664 | "windows-sys 0.48.0", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "rustix" 1669 | version = "0.38.35" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" 1672 | dependencies = [ 1673 | "bitflags 2.6.0", 1674 | "errno", 1675 | "libc", 1676 | "linux-raw-sys 0.4.14", 1677 | "windows-sys 0.52.0", 1678 | ] 1679 | 1680 | [[package]] 1681 | name = "ryu" 1682 | version = "1.0.18" 1683 | source = "registry+https://github.com/rust-lang/crates.io-index" 1684 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1685 | 1686 | [[package]] 1687 | name = "schannel" 1688 | version = "0.1.23" 1689 | source = "registry+https://github.com/rust-lang/crates.io-index" 1690 | checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" 1691 | dependencies = [ 1692 | "windows-sys 0.52.0", 1693 | ] 1694 | 1695 | [[package]] 1696 | name = "schemars" 1697 | version = "0.8.21" 1698 | source = "registry+https://github.com/rust-lang/crates.io-index" 1699 | checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" 1700 | dependencies = [ 1701 | "dyn-clone", 1702 | "schemars_derive", 1703 | "serde", 1704 | "serde_json", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "schemars_derive" 1709 | version = "0.8.21" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" 1712 | dependencies = [ 1713 | "proc-macro2", 1714 | "quote", 1715 | "serde_derive_internals", 1716 | "syn 2.0.75", 1717 | ] 1718 | 1719 | [[package]] 1720 | name = "scopeguard" 1721 | version = "1.2.0" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1724 | 1725 | [[package]] 1726 | name = "semver" 1727 | version = "0.9.0" 1728 | source = "registry+https://github.com/rust-lang/crates.io-index" 1729 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 1730 | dependencies = [ 1731 | "semver-parser", 1732 | ] 1733 | 1734 | [[package]] 1735 | name = "semver-parser" 1736 | version = "0.7.0" 1737 | source = "registry+https://github.com/rust-lang/crates.io-index" 1738 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 1739 | 1740 | [[package]] 1741 | name = "serde" 1742 | version = "1.0.209" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" 1745 | dependencies = [ 1746 | "serde_derive", 1747 | ] 1748 | 1749 | [[package]] 1750 | name = "serde_derive" 1751 | version = "1.0.209" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" 1754 | dependencies = [ 1755 | "proc-macro2", 1756 | "quote", 1757 | "syn 2.0.75", 1758 | ] 1759 | 1760 | [[package]] 1761 | name = "serde_derive_internals" 1762 | version = "0.29.1" 1763 | source = "registry+https://github.com/rust-lang/crates.io-index" 1764 | checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" 1765 | dependencies = [ 1766 | "proc-macro2", 1767 | "quote", 1768 | "syn 2.0.75", 1769 | ] 1770 | 1771 | [[package]] 1772 | name = "serde_json" 1773 | version = "1.0.127" 1774 | source = "registry+https://github.com/rust-lang/crates.io-index" 1775 | checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" 1776 | dependencies = [ 1777 | "itoa", 1778 | "memchr", 1779 | "ryu", 1780 | "serde", 1781 | ] 1782 | 1783 | [[package]] 1784 | name = "serde_qs" 1785 | version = "0.8.5" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" 1788 | dependencies = [ 1789 | "percent-encoding", 1790 | "serde", 1791 | "thiserror", 1792 | ] 1793 | 1794 | [[package]] 1795 | name = "serde_urlencoded" 1796 | version = "0.7.1" 1797 | source = "registry+https://github.com/rust-lang/crates.io-index" 1798 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1799 | dependencies = [ 1800 | "form_urlencoded", 1801 | "itoa", 1802 | "ryu", 1803 | "serde", 1804 | ] 1805 | 1806 | [[package]] 1807 | name = "serde_yaml" 1808 | version = "0.8.26" 1809 | source = "registry+https://github.com/rust-lang/crates.io-index" 1810 | checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" 1811 | dependencies = [ 1812 | "indexmap", 1813 | "ryu", 1814 | "serde", 1815 | "yaml-rust", 1816 | ] 1817 | 1818 | [[package]] 1819 | name = "sha1" 1820 | version = "0.6.1" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" 1823 | dependencies = [ 1824 | "sha1_smol", 1825 | ] 1826 | 1827 | [[package]] 1828 | name = "sha1_smol" 1829 | version = "1.0.1" 1830 | source = "registry+https://github.com/rust-lang/crates.io-index" 1831 | checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 1832 | 1833 | [[package]] 1834 | name = "sha2" 1835 | version = "0.9.9" 1836 | source = "registry+https://github.com/rust-lang/crates.io-index" 1837 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" 1838 | dependencies = [ 1839 | "block-buffer", 1840 | "cfg-if", 1841 | "cpufeatures", 1842 | "digest", 1843 | "opaque-debug", 1844 | ] 1845 | 1846 | [[package]] 1847 | name = "shlex" 1848 | version = "1.3.0" 1849 | source = "registry+https://github.com/rust-lang/crates.io-index" 1850 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1851 | 1852 | [[package]] 1853 | name = "siphasher" 1854 | version = "0.3.11" 1855 | source = "registry+https://github.com/rust-lang/crates.io-index" 1856 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 1857 | 1858 | [[package]] 1859 | name = "slab" 1860 | version = "0.4.9" 1861 | source = "registry+https://github.com/rust-lang/crates.io-index" 1862 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1863 | dependencies = [ 1864 | "autocfg", 1865 | ] 1866 | 1867 | [[package]] 1868 | name = "sluice" 1869 | version = "0.5.5" 1870 | source = "registry+https://github.com/rust-lang/crates.io-index" 1871 | checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" 1872 | dependencies = [ 1873 | "async-channel 1.9.0", 1874 | "futures-core", 1875 | "futures-io", 1876 | ] 1877 | 1878 | [[package]] 1879 | name = "socket2" 1880 | version = "0.4.10" 1881 | source = "registry+https://github.com/rust-lang/crates.io-index" 1882 | checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" 1883 | dependencies = [ 1884 | "libc", 1885 | "winapi", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "socket2" 1890 | version = "0.5.7" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" 1893 | dependencies = [ 1894 | "libc", 1895 | "windows-sys 0.52.0", 1896 | ] 1897 | 1898 | [[package]] 1899 | name = "spinning_top" 1900 | version = "0.2.5" 1901 | source = "registry+https://github.com/rust-lang/crates.io-index" 1902 | checksum = "5b9eb1a2f4c41445a3a0ff9abc5221c5fcd28e1f13cd7c0397706f9ac938ddb0" 1903 | dependencies = [ 1904 | "lock_api", 1905 | ] 1906 | 1907 | [[package]] 1908 | name = "standback" 1909 | version = "0.2.17" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" 1912 | dependencies = [ 1913 | "version_check", 1914 | ] 1915 | 1916 | [[package]] 1917 | name = "stdweb" 1918 | version = "0.4.20" 1919 | source = "registry+https://github.com/rust-lang/crates.io-index" 1920 | checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" 1921 | dependencies = [ 1922 | "discard", 1923 | "rustc_version", 1924 | "stdweb-derive", 1925 | "stdweb-internal-macros", 1926 | "stdweb-internal-runtime", 1927 | "wasm-bindgen", 1928 | ] 1929 | 1930 | [[package]] 1931 | name = "stdweb-derive" 1932 | version = "0.5.3" 1933 | source = "registry+https://github.com/rust-lang/crates.io-index" 1934 | checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" 1935 | dependencies = [ 1936 | "proc-macro2", 1937 | "quote", 1938 | "serde", 1939 | "serde_derive", 1940 | "syn 1.0.109", 1941 | ] 1942 | 1943 | [[package]] 1944 | name = "stdweb-internal-macros" 1945 | version = "0.2.9" 1946 | source = "registry+https://github.com/rust-lang/crates.io-index" 1947 | checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" 1948 | dependencies = [ 1949 | "base-x", 1950 | "proc-macro2", 1951 | "quote", 1952 | "serde", 1953 | "serde_derive", 1954 | "serde_json", 1955 | "sha1", 1956 | "syn 1.0.109", 1957 | ] 1958 | 1959 | [[package]] 1960 | name = "stdweb-internal-runtime" 1961 | version = "0.1.5" 1962 | source = "registry+https://github.com/rust-lang/crates.io-index" 1963 | checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" 1964 | 1965 | [[package]] 1966 | name = "strsim" 1967 | version = "0.11.1" 1968 | source = "registry+https://github.com/rust-lang/crates.io-index" 1969 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1970 | 1971 | [[package]] 1972 | name = "subtle" 1973 | version = "2.4.1" 1974 | source = "registry+https://github.com/rust-lang/crates.io-index" 1975 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1976 | 1977 | [[package]] 1978 | name = "surf" 1979 | version = "2.3.2" 1980 | source = "registry+https://github.com/rust-lang/crates.io-index" 1981 | checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7" 1982 | dependencies = [ 1983 | "async-std", 1984 | "async-trait", 1985 | "cfg-if", 1986 | "encoding_rs", 1987 | "futures-util", 1988 | "getrandom 0.2.15", 1989 | "http-client", 1990 | "http-types", 1991 | "log", 1992 | "mime_guess", 1993 | "once_cell", 1994 | "pin-project-lite", 1995 | "serde", 1996 | "serde_json", 1997 | "web-sys", 1998 | ] 1999 | 2000 | [[package]] 2001 | name = "syn" 2002 | version = "1.0.109" 2003 | source = "registry+https://github.com/rust-lang/crates.io-index" 2004 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2005 | dependencies = [ 2006 | "proc-macro2", 2007 | "quote", 2008 | "unicode-ident", 2009 | ] 2010 | 2011 | [[package]] 2012 | name = "syn" 2013 | version = "2.0.75" 2014 | source = "registry+https://github.com/rust-lang/crates.io-index" 2015 | checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" 2016 | dependencies = [ 2017 | "proc-macro2", 2018 | "quote", 2019 | "unicode-ident", 2020 | ] 2021 | 2022 | [[package]] 2023 | name = "thiserror" 2024 | version = "1.0.63" 2025 | source = "registry+https://github.com/rust-lang/crates.io-index" 2026 | checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" 2027 | dependencies = [ 2028 | "thiserror-impl", 2029 | ] 2030 | 2031 | [[package]] 2032 | name = "thiserror-impl" 2033 | version = "1.0.63" 2034 | source = "registry+https://github.com/rust-lang/crates.io-index" 2035 | checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" 2036 | dependencies = [ 2037 | "proc-macro2", 2038 | "quote", 2039 | "syn 2.0.75", 2040 | ] 2041 | 2042 | [[package]] 2043 | name = "time" 2044 | version = "0.2.27" 2045 | source = "registry+https://github.com/rust-lang/crates.io-index" 2046 | checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" 2047 | dependencies = [ 2048 | "const_fn", 2049 | "libc", 2050 | "standback", 2051 | "stdweb", 2052 | "time-macros", 2053 | "version_check", 2054 | "winapi", 2055 | ] 2056 | 2057 | [[package]] 2058 | name = "time-macros" 2059 | version = "0.1.1" 2060 | source = "registry+https://github.com/rust-lang/crates.io-index" 2061 | checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" 2062 | dependencies = [ 2063 | "proc-macro-hack", 2064 | "time-macros-impl", 2065 | ] 2066 | 2067 | [[package]] 2068 | name = "time-macros-impl" 2069 | version = "0.1.2" 2070 | source = "registry+https://github.com/rust-lang/crates.io-index" 2071 | checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" 2072 | dependencies = [ 2073 | "proc-macro-hack", 2074 | "proc-macro2", 2075 | "quote", 2076 | "standback", 2077 | "syn 1.0.109", 2078 | ] 2079 | 2080 | [[package]] 2081 | name = "tiny_http" 2082 | version = "0.12.0" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" 2085 | dependencies = [ 2086 | "ascii", 2087 | "chunked_transfer", 2088 | "httpdate", 2089 | "log", 2090 | ] 2091 | 2092 | [[package]] 2093 | name = "tinyvec" 2094 | version = "1.8.0" 2095 | source = "registry+https://github.com/rust-lang/crates.io-index" 2096 | checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" 2097 | dependencies = [ 2098 | "tinyvec_macros", 2099 | ] 2100 | 2101 | [[package]] 2102 | name = "tinyvec_macros" 2103 | version = "0.1.1" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2106 | 2107 | [[package]] 2108 | name = "tokio" 2109 | version = "1.39.3" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "9babc99b9923bfa4804bd74722ff02c0381021eafa4db9949217e3be8e84fff5" 2112 | dependencies = [ 2113 | "backtrace", 2114 | "pin-project-lite", 2115 | "tokio-macros", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "tokio-macros" 2120 | version = "2.4.0" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" 2123 | dependencies = [ 2124 | "proc-macro2", 2125 | "quote", 2126 | "syn 2.0.75", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "tracing" 2131 | version = "0.1.40" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 2134 | dependencies = [ 2135 | "log", 2136 | "pin-project-lite", 2137 | "tracing-attributes", 2138 | "tracing-core", 2139 | ] 2140 | 2141 | [[package]] 2142 | name = "tracing-attributes" 2143 | version = "0.1.27" 2144 | source = "registry+https://github.com/rust-lang/crates.io-index" 2145 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" 2146 | dependencies = [ 2147 | "proc-macro2", 2148 | "quote", 2149 | "syn 2.0.75", 2150 | ] 2151 | 2152 | [[package]] 2153 | name = "tracing-core" 2154 | version = "0.1.32" 2155 | source = "registry+https://github.com/rust-lang/crates.io-index" 2156 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 2157 | dependencies = [ 2158 | "once_cell", 2159 | ] 2160 | 2161 | [[package]] 2162 | name = "tracing-futures" 2163 | version = "0.2.5" 2164 | source = "registry+https://github.com/rust-lang/crates.io-index" 2165 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 2166 | dependencies = [ 2167 | "pin-project", 2168 | "tracing", 2169 | ] 2170 | 2171 | [[package]] 2172 | name = "typenum" 2173 | version = "1.17.0" 2174 | source = "registry+https://github.com/rust-lang/crates.io-index" 2175 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2176 | 2177 | [[package]] 2178 | name = "unicase" 2179 | version = "2.7.0" 2180 | source = "registry+https://github.com/rust-lang/crates.io-index" 2181 | checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" 2182 | dependencies = [ 2183 | "version_check", 2184 | ] 2185 | 2186 | [[package]] 2187 | name = "unicode-bidi" 2188 | version = "0.3.15" 2189 | source = "registry+https://github.com/rust-lang/crates.io-index" 2190 | checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" 2191 | 2192 | [[package]] 2193 | name = "unicode-ident" 2194 | version = "1.0.12" 2195 | source = "registry+https://github.com/rust-lang/crates.io-index" 2196 | checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" 2197 | 2198 | [[package]] 2199 | name = "unicode-normalization" 2200 | version = "0.1.23" 2201 | source = "registry+https://github.com/rust-lang/crates.io-index" 2202 | checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" 2203 | dependencies = [ 2204 | "tinyvec", 2205 | ] 2206 | 2207 | [[package]] 2208 | name = "universal-hash" 2209 | version = "0.4.1" 2210 | source = "registry+https://github.com/rust-lang/crates.io-index" 2211 | checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" 2212 | dependencies = [ 2213 | "generic-array", 2214 | "subtle", 2215 | ] 2216 | 2217 | [[package]] 2218 | name = "url" 2219 | version = "2.5.2" 2220 | source = "registry+https://github.com/rust-lang/crates.io-index" 2221 | checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" 2222 | dependencies = [ 2223 | "form_urlencoded", 2224 | "idna", 2225 | "percent-encoding", 2226 | "serde", 2227 | ] 2228 | 2229 | [[package]] 2230 | name = "utf8parse" 2231 | version = "0.2.2" 2232 | source = "registry+https://github.com/rust-lang/crates.io-index" 2233 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2234 | 2235 | [[package]] 2236 | name = "value-bag" 2237 | version = "1.9.0" 2238 | source = "registry+https://github.com/rust-lang/crates.io-index" 2239 | checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" 2240 | 2241 | [[package]] 2242 | name = "vcpkg" 2243 | version = "0.2.15" 2244 | source = "registry+https://github.com/rust-lang/crates.io-index" 2245 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2246 | 2247 | [[package]] 2248 | name = "version_check" 2249 | version = "0.9.5" 2250 | source = "registry+https://github.com/rust-lang/crates.io-index" 2251 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2252 | 2253 | [[package]] 2254 | name = "waker-fn" 2255 | version = "1.2.0" 2256 | source = "registry+https://github.com/rust-lang/crates.io-index" 2257 | checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" 2258 | 2259 | [[package]] 2260 | name = "wasi" 2261 | version = "0.9.0+wasi-snapshot-preview1" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 2264 | 2265 | [[package]] 2266 | name = "wasi" 2267 | version = "0.11.0+wasi-snapshot-preview1" 2268 | source = "registry+https://github.com/rust-lang/crates.io-index" 2269 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2270 | 2271 | [[package]] 2272 | name = "wasm-bindgen" 2273 | version = "0.2.93" 2274 | source = "registry+https://github.com/rust-lang/crates.io-index" 2275 | checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" 2276 | dependencies = [ 2277 | "cfg-if", 2278 | "once_cell", 2279 | "wasm-bindgen-macro", 2280 | ] 2281 | 2282 | [[package]] 2283 | name = "wasm-bindgen-backend" 2284 | version = "0.2.93" 2285 | source = "registry+https://github.com/rust-lang/crates.io-index" 2286 | checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" 2287 | dependencies = [ 2288 | "bumpalo", 2289 | "log", 2290 | "once_cell", 2291 | "proc-macro2", 2292 | "quote", 2293 | "syn 2.0.75", 2294 | "wasm-bindgen-shared", 2295 | ] 2296 | 2297 | [[package]] 2298 | name = "wasm-bindgen-futures" 2299 | version = "0.4.43" 2300 | source = "registry+https://github.com/rust-lang/crates.io-index" 2301 | checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" 2302 | dependencies = [ 2303 | "cfg-if", 2304 | "js-sys", 2305 | "wasm-bindgen", 2306 | "web-sys", 2307 | ] 2308 | 2309 | [[package]] 2310 | name = "wasm-bindgen-macro" 2311 | version = "0.2.93" 2312 | source = "registry+https://github.com/rust-lang/crates.io-index" 2313 | checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" 2314 | dependencies = [ 2315 | "quote", 2316 | "wasm-bindgen-macro-support", 2317 | ] 2318 | 2319 | [[package]] 2320 | name = "wasm-bindgen-macro-support" 2321 | version = "0.2.93" 2322 | source = "registry+https://github.com/rust-lang/crates.io-index" 2323 | checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" 2324 | dependencies = [ 2325 | "proc-macro2", 2326 | "quote", 2327 | "syn 2.0.75", 2328 | "wasm-bindgen-backend", 2329 | "wasm-bindgen-shared", 2330 | ] 2331 | 2332 | [[package]] 2333 | name = "wasm-bindgen-shared" 2334 | version = "0.2.93" 2335 | source = "registry+https://github.com/rust-lang/crates.io-index" 2336 | checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" 2337 | 2338 | [[package]] 2339 | name = "web-sys" 2340 | version = "0.3.70" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" 2343 | dependencies = [ 2344 | "js-sys", 2345 | "wasm-bindgen", 2346 | ] 2347 | 2348 | [[package]] 2349 | name = "winapi" 2350 | version = "0.3.9" 2351 | source = "registry+https://github.com/rust-lang/crates.io-index" 2352 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 2353 | dependencies = [ 2354 | "winapi-i686-pc-windows-gnu", 2355 | "winapi-x86_64-pc-windows-gnu", 2356 | ] 2357 | 2358 | [[package]] 2359 | name = "winapi-i686-pc-windows-gnu" 2360 | version = "0.4.0" 2361 | source = "registry+https://github.com/rust-lang/crates.io-index" 2362 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2363 | 2364 | [[package]] 2365 | name = "winapi-x86_64-pc-windows-gnu" 2366 | version = "0.4.0" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2369 | 2370 | [[package]] 2371 | name = "windows-core" 2372 | version = "0.52.0" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2375 | dependencies = [ 2376 | "windows-targets 0.52.6", 2377 | ] 2378 | 2379 | [[package]] 2380 | name = "windows-sys" 2381 | version = "0.48.0" 2382 | source = "registry+https://github.com/rust-lang/crates.io-index" 2383 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 2384 | dependencies = [ 2385 | "windows-targets 0.48.5", 2386 | ] 2387 | 2388 | [[package]] 2389 | name = "windows-sys" 2390 | version = "0.52.0" 2391 | source = "registry+https://github.com/rust-lang/crates.io-index" 2392 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2393 | dependencies = [ 2394 | "windows-targets 0.52.6", 2395 | ] 2396 | 2397 | [[package]] 2398 | name = "windows-sys" 2399 | version = "0.59.0" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2402 | dependencies = [ 2403 | "windows-targets 0.52.6", 2404 | ] 2405 | 2406 | [[package]] 2407 | name = "windows-targets" 2408 | version = "0.48.5" 2409 | source = "registry+https://github.com/rust-lang/crates.io-index" 2410 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 2411 | dependencies = [ 2412 | "windows_aarch64_gnullvm 0.48.5", 2413 | "windows_aarch64_msvc 0.48.5", 2414 | "windows_i686_gnu 0.48.5", 2415 | "windows_i686_msvc 0.48.5", 2416 | "windows_x86_64_gnu 0.48.5", 2417 | "windows_x86_64_gnullvm 0.48.5", 2418 | "windows_x86_64_msvc 0.48.5", 2419 | ] 2420 | 2421 | [[package]] 2422 | name = "windows-targets" 2423 | version = "0.52.6" 2424 | source = "registry+https://github.com/rust-lang/crates.io-index" 2425 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2426 | dependencies = [ 2427 | "windows_aarch64_gnullvm 0.52.6", 2428 | "windows_aarch64_msvc 0.52.6", 2429 | "windows_i686_gnu 0.52.6", 2430 | "windows_i686_gnullvm", 2431 | "windows_i686_msvc 0.52.6", 2432 | "windows_x86_64_gnu 0.52.6", 2433 | "windows_x86_64_gnullvm 0.52.6", 2434 | "windows_x86_64_msvc 0.52.6", 2435 | ] 2436 | 2437 | [[package]] 2438 | name = "windows_aarch64_gnullvm" 2439 | version = "0.48.5" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 2442 | 2443 | [[package]] 2444 | name = "windows_aarch64_gnullvm" 2445 | version = "0.52.6" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2448 | 2449 | [[package]] 2450 | name = "windows_aarch64_msvc" 2451 | version = "0.48.5" 2452 | source = "registry+https://github.com/rust-lang/crates.io-index" 2453 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 2454 | 2455 | [[package]] 2456 | name = "windows_aarch64_msvc" 2457 | version = "0.52.6" 2458 | source = "registry+https://github.com/rust-lang/crates.io-index" 2459 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2460 | 2461 | [[package]] 2462 | name = "windows_i686_gnu" 2463 | version = "0.48.5" 2464 | source = "registry+https://github.com/rust-lang/crates.io-index" 2465 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 2466 | 2467 | [[package]] 2468 | name = "windows_i686_gnu" 2469 | version = "0.52.6" 2470 | source = "registry+https://github.com/rust-lang/crates.io-index" 2471 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2472 | 2473 | [[package]] 2474 | name = "windows_i686_gnullvm" 2475 | version = "0.52.6" 2476 | source = "registry+https://github.com/rust-lang/crates.io-index" 2477 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2478 | 2479 | [[package]] 2480 | name = "windows_i686_msvc" 2481 | version = "0.48.5" 2482 | source = "registry+https://github.com/rust-lang/crates.io-index" 2483 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 2484 | 2485 | [[package]] 2486 | name = "windows_i686_msvc" 2487 | version = "0.52.6" 2488 | source = "registry+https://github.com/rust-lang/crates.io-index" 2489 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2490 | 2491 | [[package]] 2492 | name = "windows_x86_64_gnu" 2493 | version = "0.48.5" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 2496 | 2497 | [[package]] 2498 | name = "windows_x86_64_gnu" 2499 | version = "0.52.6" 2500 | source = "registry+https://github.com/rust-lang/crates.io-index" 2501 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2502 | 2503 | [[package]] 2504 | name = "windows_x86_64_gnullvm" 2505 | version = "0.48.5" 2506 | source = "registry+https://github.com/rust-lang/crates.io-index" 2507 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 2508 | 2509 | [[package]] 2510 | name = "windows_x86_64_gnullvm" 2511 | version = "0.52.6" 2512 | source = "registry+https://github.com/rust-lang/crates.io-index" 2513 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2514 | 2515 | [[package]] 2516 | name = "windows_x86_64_msvc" 2517 | version = "0.48.5" 2518 | source = "registry+https://github.com/rust-lang/crates.io-index" 2519 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 2520 | 2521 | [[package]] 2522 | name = "windows_x86_64_msvc" 2523 | version = "0.52.6" 2524 | source = "registry+https://github.com/rust-lang/crates.io-index" 2525 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2526 | 2527 | [[package]] 2528 | name = "yaml-rust" 2529 | version = "0.4.5" 2530 | source = "registry+https://github.com/rust-lang/crates.io-index" 2531 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 2532 | dependencies = [ 2533 | "linked-hash-map", 2534 | ] 2535 | 2536 | [[package]] 2537 | name = "zerocopy" 2538 | version = "0.7.35" 2539 | source = "registry+https://github.com/rust-lang/crates.io-index" 2540 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2541 | dependencies = [ 2542 | "byteorder", 2543 | "zerocopy-derive", 2544 | ] 2545 | 2546 | [[package]] 2547 | name = "zerocopy-derive" 2548 | version = "0.7.35" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2551 | dependencies = [ 2552 | "proc-macro2", 2553 | "quote", 2554 | "syn 2.0.75", 2555 | ] 2556 | --------------------------------------------------------------------------------