├── test └── test.txt ├── .gitignore ├── Cargo.toml ├── crates ├── get_grades │ ├── Cargo.toml │ └── src │ │ ├── bin │ │ ├── calc_gpa.rs │ │ └── get_grades.rs │ │ ├── lib.rs │ │ └── utils.rs └── choose_classes │ ├── src │ ├── lib.rs │ ├── bin │ │ ├── choose_classes.rs │ │ └── get_tokens.rs │ └── utils.rs │ └── Cargo.toml ├── .github └── workflows │ └── release.yml ├── README.md └── Cargo.lock /test/test.txt: -------------------------------------------------------------------------------- 1 | test0001 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | 3 | .idea 4 | 5 | resource/*.json 6 | resource/*.yaml 7 | resource/*.txt 8 | resource/*.png -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [workspace] 2 | members = ["crates/*"] 3 | resolver = "2" 4 | 5 | 6 | [workspace.package] 7 | version = "0.1.0" 8 | edition = "2021" 9 | 10 | [workspace.dependencies] 11 | tokio = "1.43.0" 12 | serde = { version = "1.0.218", features = ["derive"] } 13 | reqwest = "0.12.12" 14 | serde_json = "1.0.139" 15 | clap = "4.5.30" 16 | -------------------------------------------------------------------------------- /crates/get_grades/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "get_grades" 3 | version.workspace = true 4 | edition.workspace = true 5 | 6 | [dependencies] 7 | tokio = { workspace = true, features = ["full"] } 8 | serde = { workspace = true } 9 | reqwest = { workspace = true } 10 | serde_json = { workspace = true } 11 | clap = { workspace = true, features = ["derive"] } 12 | 13 | 14 | [[bin]] 15 | name = "get_grades" 16 | path = "src/bin/get_grades.rs" -------------------------------------------------------------------------------- /crates/choose_classes/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod utils; 2 | 3 | use serde::{Deserialize, Serialize}; 4 | 5 | #[derive(Serialize, Deserialize)] 6 | pub struct Config { 7 | /// 选课系统的token 8 | pub token: String, 9 | /// 选课系统的batch_id 10 | pub batch_id: String, 11 | /// 一卡通号 12 | pub loginname: String, 13 | /// 选课系统的加密密码 14 | pub password: String, 15 | } 16 | 17 | #[derive(Serialize, Deserialize, Debug)] 18 | pub struct WantCourse { 19 | pub name: String, 20 | pub course_type: String, 21 | pub course_id: String, 22 | pub course_secret: String, 23 | } 24 | -------------------------------------------------------------------------------- /crates/choose_classes/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "choose_classes" 3 | version.workspace = true 4 | edition.workspace = true 5 | 6 | [dependencies] 7 | reqwest = { workspace = true, features = ["json"] } 8 | serde = { workspace = true } 9 | serde_json = { workspace = true } 10 | tokio = { workspace = true, features = ["full"] } 11 | urlencoding = "2.1.3" 12 | serde_yaml = "0.9.34" 13 | base64 = "0.22.1" 14 | image = "0.25.5" 15 | clap = { version = "4.5.30", features = ["derive"] } 16 | cfg-if = "1.0" 17 | 18 | 19 | [[bin]] 20 | name = "choose_classes" 21 | path = "src/bin/choose_classes.rs" 22 | 23 | [[bin]] 24 | name = "get_tokens" 25 | path = "src/bin/get_tokens.rs" -------------------------------------------------------------------------------- /crates/get_grades/src/bin/calc_gpa.rs: -------------------------------------------------------------------------------- 1 | use clap::Parser; 2 | use get_grades::utils::calc_with_terms; 3 | use get_grades::{Course, Term}; 4 | use std::fs; 5 | use std::path::PathBuf; 6 | 7 | #[derive(Parser)] 8 | #[clap(version, name = "calc_gpa")] 9 | #[command(version, about, long_about = None)] 10 | struct Cli { 11 | /// 保存导出成绩的json文件路径 IN_NEED 12 | #[clap(long, default_value = "resource/grades.json")] 13 | grades_json: PathBuf, 14 | /// 学期列表,逗号隔开,不填则默认计算所有学期 [example: 2024-2025-1, 2024-2025-2] 15 | #[clap(long, default_value = "")] 16 | terms: String, 17 | } 18 | 19 | fn main() { 20 | let cli = Cli::parse(); 21 | let grades: Vec = 22 | serde_json::from_str(&fs::read_to_string(&cli.grades_json).unwrap()).unwrap(); 23 | let terms = if cli.terms.is_empty() { 24 | vec![] 25 | } else { 26 | cli.terms 27 | .split(',') 28 | .map(|s| s.trim().into()) 29 | .collect::>() 30 | }; 31 | 32 | calc_with_terms(grades, terms); 33 | } 34 | -------------------------------------------------------------------------------- /crates/get_grades/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod utils; 2 | 3 | use serde::{Deserialize, Serialize}; 4 | 5 | /// 学期 6 | #[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] 7 | pub struct Term { 8 | /// 起始年份 9 | pub start_year: u16, 10 | /// 结束年份 11 | pub end_year: u16, 12 | /// 学期 13 | pub term: u8, 14 | } 15 | impl From<&str> for Term { 16 | fn from(s: &str) -> Self { 17 | let mut iter = s.split('-'); 18 | let start_year = iter.next().unwrap().parse().unwrap(); 19 | let end_year = iter.next().unwrap().parse().unwrap(); 20 | let term = iter.next().unwrap().parse().unwrap(); 21 | Term { 22 | start_year, 23 | end_year, 24 | term, 25 | } 26 | } 27 | } 28 | 29 | /// 课程 30 | #[derive(Debug, Serialize, Deserialize)] 31 | pub struct Course { 32 | /// 课程名称 33 | pub name: String, 34 | /// 课程类型 35 | pub class_type: String, 36 | /// 课程分数 37 | pub score: u8, 38 | /// 课程学分 39 | pub credit: f32, 40 | /// 课程学期 41 | pub term: Term, 42 | } 43 | -------------------------------------------------------------------------------- /crates/choose_classes/src/bin/choose_classes.rs: -------------------------------------------------------------------------------- 1 | use choose_classes::utils::{choose_courses, gene_wish_list}; 2 | use choose_classes::Config; 3 | use clap::Parser; 4 | use reqwest::Client; 5 | use std::fs; 6 | use std::io::{self, Write}; 7 | use std::path::PathBuf; 8 | 9 | #[derive(Parser)] 10 | #[clap(version, name = "get_tokens")] 11 | #[command(version, about, long_about = None)] 12 | struct Cli { 13 | /// 配置文件路径 IN_NEED 14 | #[clap(long, default_value = "resource/config.yaml")] 15 | config_yaml: PathBuf, 16 | /// 全部课程路径 17 | #[clap(long, default_value = "resource/classes.json")] 18 | classes_json: PathBuf, 19 | /// 选择课程路径 20 | #[clap(long, default_value = "resource/choose.json")] 21 | choose_json: PathBuf, 22 | } 23 | 24 | #[tokio::main] 25 | async fn main() { 26 | let cli = Cli::parse(); 27 | let config: Config = 28 | serde_yaml::from_str(&fs::read_to_string(&cli.config_yaml).unwrap()).unwrap(); 29 | let token = &config.token; 30 | let batch_id = &config.batch_id; 31 | println!("Token: {}", token); 32 | println!("Batch ID: {}", batch_id); 33 | 34 | let client = Client::new(); 35 | 36 | print!("是否需要重新生成志愿表?(y/n):"); 37 | io::stdout().flush().unwrap(); 38 | let mut input = String::new(); 39 | io::stdin().read_line(&mut input).unwrap(); 40 | let input = input.trim(); 41 | 42 | gene_wish_list( 43 | &client, 44 | token, 45 | batch_id, 46 | &cli.classes_json, 47 | &cli.choose_json, 48 | input.eq_ignore_ascii_case("y"), 49 | ) 50 | .await 51 | .unwrap(); 52 | 53 | print!("按下回车开始选课..."); 54 | io::stdout().flush().unwrap(); 55 | let mut input = String::new(); 56 | io::stdin().read_line(&mut input).unwrap(); 57 | 58 | choose_courses(&client, token, batch_id, &cli.choose_json) 59 | .await 60 | .unwrap(); 61 | } 62 | -------------------------------------------------------------------------------- /crates/get_grades/src/utils.rs: -------------------------------------------------------------------------------- 1 | //! Utilities for get_grades 2 | use crate::{Course, Term}; 3 | 4 | /// Get GPA from grade 5 | fn get_gpa(grade: u8) -> f32 { 6 | match grade { 7 | 96..=100 => 4.8, 8 | 93..=95 => 4.5, 9 | 90..=92 => 4.0, 10 | 86..=89 => 3.8, 11 | 83..=85 => 3.5, 12 | 80..=82 => 3.0, 13 | 76..=79 => 2.8, 14 | 73..=75 => 2.5, 15 | 70..=72 => 2.0, 16 | 66..=69 => 1.8, 17 | 63..=65 => 1.5, 18 | 60..=62 => 1.0, 19 | _ => 0.0, 20 | } 21 | } 22 | 23 | /// Calculate GPA with terms 24 | /// 25 | /// # Returns 26 | /// - The GPA 27 | /// 28 | /// # Note 29 | /// - If `terms` is empty, all terms will be calculated 30 | /// - The result will be printed 31 | /// 32 | /// # Example 33 | /// ```rust 34 | /// use get_grades::{Course, Term}; 35 | /// use get_grades::utils::calc_with_terms; 36 | /// let grades: Vec = vec![ 37 | /// Course { 38 | /// name: "Course 1".into(), 39 | /// class_type: "必修".into(), 40 | /// score: 90, 41 | /// credit: 3.0, 42 | /// term: "2024-2025-1".into(), 43 | /// }, 44 | /// Course { 45 | /// name: "Course 2".into(), 46 | /// class_type: "必修".into(), 47 | /// score: 80, 48 | /// credit: 2.0, 49 | /// term: "2024-2025-2".into(), 50 | /// }, 51 | /// ]; 52 | /// let terms: Vec = vec!["2024-2025-1".into(), "2024-2025-2".into()]; 53 | /// let gpa = calc_with_terms(grades, terms); 54 | /// assert_eq!(gpa, 3.6); 55 | /// ``` 56 | /// 57 | pub fn calc_with_terms(grades: Vec, terms: Vec) -> f32 { 58 | let mut total_gpa = 0.0; 59 | let mut total_credit = 0.0; 60 | if !grades.is_empty() { 61 | println!( 62 | "{:<8}{:<8}{:<5}{:<30} ", 63 | "Credit", "Score", "GPA", "CourseName" 64 | ); 65 | } 66 | grades 67 | .iter() 68 | .filter(|course| course.class_type != "任选") 69 | .filter(|course| terms.is_empty() || terms.iter().any(|term| term == &course.term)) 70 | .for_each(|course| { 71 | let gpa = get_gpa(course.score); 72 | println!( 73 | "{:<8}{:<8}{:<5.1}{:<30} ", 74 | course.credit, course.score, gpa, course.name 75 | ); 76 | total_gpa += gpa * course.credit; 77 | total_credit += course.credit; 78 | }); 79 | let gpa = total_gpa / total_credit; 80 | println!("Total GPA: {:.4}", total_gpa); 81 | println!("Total Credit: {:.4}", total_credit); 82 | println!("Your GPA is: {:.4}", gpa); 83 | gpa 84 | } 85 | -------------------------------------------------------------------------------- /crates/get_grades/src/bin/get_grades.rs: -------------------------------------------------------------------------------- 1 | use clap::Parser; 2 | use get_grades::Course; 3 | use reqwest::Client; 4 | use serde_json::Value; 5 | use std::fs; 6 | use std::io::Write; 7 | use std::path::PathBuf; 8 | use tokio; 9 | 10 | #[derive(Parser)] 11 | #[clap(version, name = "get_grades")] 12 | #[command(version, about, long_about = None)] 13 | struct Cli { 14 | /// cookie路径 IN_NEED 15 | #[clap(short, long, default_value = "resource/grades_cookie.txt")] 16 | cookie_txt: PathBuf, 17 | /// 保存导出成绩的json文件路径 18 | #[clap(short, long, default_value = "resource/grades.json")] 19 | grades_json: PathBuf, 20 | /// 保存原始成绩的json文件路径 21 | #[clap(short, long, default_value = "resource/raw_grades.json")] 22 | raw_grades_json: PathBuf, 23 | } 24 | 25 | #[tokio::main] 26 | async fn main() { 27 | let cli = Cli::parse(); 28 | 29 | let cookie = fs::read_to_string(cli.cookie_txt) 30 | .unwrap() 31 | .trim() 32 | .to_string(); 33 | let client = Client::new(); 34 | let grades_url = "https://ehall.seu.edu.cn/jwapp/sys/cjcx/modules/cjcx/xscjcx.do"; 35 | let response = client.post(grades_url) 36 | .header("Cookie", cookie) 37 | .header( 38 | "user-agent", 39 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0" 40 | ) 41 | .header("Content-Length", "0") 42 | .send().await.unwrap(); 43 | if response.status() != 200 { 44 | panic!("Failed to get grades"); 45 | } 46 | let text = response.text().await.unwrap(); 47 | let formatted_json = { 48 | let parsed: Value = serde_json::from_str(&text).unwrap(); 49 | serde_json::to_string_pretty(&parsed).unwrap() 50 | }; 51 | let mut raw_grades_file = fs::File::create(&cli.raw_grades_json).unwrap(); 52 | raw_grades_file 53 | .write_all(formatted_json.as_bytes()) 54 | .unwrap(); 55 | let response: Value = serde_json::from_str(&text).unwrap(); 56 | 57 | let grades = response["datas"]["xscjcx"]["rows"].as_array().unwrap(); 58 | let grades = grades 59 | .iter() 60 | .map(|grade| Course { 61 | name: grade["KCM"].as_str().unwrap().to_string(), 62 | class_type: grade["KCXZDM_DISPLAY"].as_str().unwrap().to_string(), 63 | score: grade["ZCJ"].as_str().unwrap().parse().unwrap(), 64 | credit: grade["XF"].as_str().unwrap().parse().unwrap(), 65 | term: grade["XNXQDM"].as_str().unwrap().into(), 66 | }) 67 | .collect::>(); 68 | let mut grades_file = fs::File::create(&cli.grades_json).unwrap(); 69 | grades_file 70 | .write_all(serde_json::to_string_pretty(&grades).unwrap().as_bytes()) 71 | .unwrap(); 72 | } 73 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build and Release 2 | 3 | on: 4 | push: 5 | tags: 6 | - 'v*' # 只在 tag 以 'v' 开头时触发,如 v1.0.0 7 | 8 | jobs: 9 | build: 10 | runs-on: windows-latest # 运行环境改为 Windows 11 | 12 | steps: 13 | # 1. 检出代码 14 | - name: Checkout code 15 | uses: actions/checkout@v3 16 | 17 | # 2. 设置 Rust 环境 18 | - name: Set up Rust 19 | uses: dtolnay/rust-toolchain@stable 20 | with: 21 | components: clippy, rustfmt # 需要的话可以添加 22 | 23 | # 3. 编译项目 (Windows 平台) 24 | - name: Build project 25 | run: cargo build --release # 生成 Windows EXE 文件 26 | 27 | # 4. 生成空的 JSON 文件 28 | - name: Create empty JSON files 29 | run: | 30 | "token: `nbatch_id: `nloginname: `npassword: " | Set-Content -Path config.yaml 31 | echo {} > grades_cookie.txt 32 | 33 | # 5. 创建 release 目录并移动构建产物 34 | - name: Package the build 35 | run: | 36 | mkdir release 37 | mkdir release\resource 38 | copy config.yaml release\resource\ 39 | copy grades_cookie.txt release\resource\ 40 | Get-ChildItem -Path target\release -Filter *.exe | ForEach-Object { Copy-Item $_.FullName -Destination release\ } 41 | 42 | # 6. 打包 release 目录 43 | - name: Create zip archive 44 | run: Compress-Archive -Path release\* -DestinationPath release_windows_x64.zip 45 | 46 | # 7. 获取 tag message 47 | - name: Build Changelog 48 | id: build_changelog 49 | uses: mikepenz/release-changelog-builder-action@v5 50 | with: 51 | fromTag: "v1.0" 52 | configurationJson: | 53 | { 54 | "template": "#{{CHANGELOG}}\n\n
\nUncategorized\n\n#{{UNCATEGORIZED}}\n
", 55 | "categories": [ 56 | { 57 | "title": "## 🚀 Features", 58 | "labels": ["feature"] 59 | }, 60 | { 61 | "title": "## 🐛 Fixes", 62 | "labels": ["fix"] 63 | }, 64 | { 65 | "title": "## 🧪 Tests", 66 | "labels": ["test"] 67 | }, 68 | { 69 | "title": "## 💬 Other", 70 | "labels": ["other", "chore", "docs", "refactor", "style", "CI/CD"] 71 | }, 72 | { 73 | "title": "## 📦 Dependencies", 74 | "labels": ["dependencies"] 75 | } 76 | ] 77 | } 78 | env: 79 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 80 | 81 | # 8. 创建 GitHub Release 82 | - name: Create Release and Upload Release Asset 83 | uses: softprops/action-gh-release@v2 84 | with: 85 | tag_name: ${{ github.ref_name }} 86 | name: ${{ github.ref_name }} 87 | body: ${{ steps.build_changelog.outputs.changelog }} 88 | files: release_windows_x64.zip 89 | env: 90 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SEU Utils 🛠️ 2 | 3 | ## 简介 🚀 4 | 5 | SEU Utils 是一款专为东南大学(SEU)学生打造的工具集合,旨在提升选课、成绩查询以及绩点计算等日常操作的效率。当前包含以下功能: 6 | 7 | - 获取选课系统token和batch_id 8 | - 选课课程查询(推荐课程) 9 | - 生成选课计划并自动选课 10 | - 课程成绩查询 11 | - 绩点计算 12 | 13 | **新增:**[桌面应用版本](https://github.com/twilight0702/SEU-utils-frontend),提供可视化操作页面 14 | 15 | --- 16 | 17 | ## 使用指南 📚 18 | 19 | **⚠️ 注意事项:** 20 | 21 | - 作者能力精力财力有限,本工具仅保证 64bit Windows 22 | 平台的正常使用,其他平台请自行测试,如果你愿意对多平台进行适配,请提交 [PR](https://github.com/harkerhand/seu_utils/pulls) 23 | - 本工具仅供学习交流使用,不得用于任何商业用途,否则后果自负 24 | - 所有的可执行文件都需要在命令行中运行,不支持图形化界面 25 | - 特殊标记 **IN_NEED** 的文件,需要手动提供,其他文件会自动生成 26 | - 默认的资源文件路径为 `resource/`,可以通过命令行参数进行修改,但不建议修改 27 | 28 | --- 29 | 30 | ### 获取选课系统token和batch_id 31 | 32 | **编译命令** 33 | 34 | ```text 35 | cargo run -p choose_classes --bin get_tokens -- 36 | ``` 37 | 38 | **使用说明** 39 | 40 | ```text 41 | 42 | Usage: get_tokens.exe [OPTIONS] 43 | 44 | Options: 45 | --config-yaml 配置文件路径 IN_NEED [default: resource/config.yaml] 46 | --captcha-png 临时验证码路径 [default: resource/captcha.png] 47 | -h, --help Print help 48 | -V, --version Print version 49 | ``` 50 | 51 | #### 配置文件解析 `config.yaml` 52 | 53 | ```yaml 54 | token: 55 | batch_id: 56 | loginname: 57 | password: 58 | ``` 59 | 60 | - `token` 留空即可 61 | - `batch_id` 需要你进入选课系统后,在开发者调试台中查看网络请求 `list` 的请求头 `Referer` 字段获取 62 | - `loginname` 为你的一卡通号 63 | - `password` 需要你在选课系统登录页面,点击登录后,在开发者调试台中查看网络请求 `login` 的负载 `password` 字段获取。 64 | 65 | --- 66 | 67 | ### 选课课程查询 & 课程信息解析 & 生成选课计划并自动选课 68 | 69 | **编译命令** 70 | 71 | ```text 72 | cargo run -p choose_classes --bin choose_classes -- 73 | ``` 74 | 75 | **使用说明** 76 | 77 | ```text 78 | Usage: choose_classes.exe [OPTIONS] 79 | 80 | Options: 81 | --config-yaml 配置文件路径 IN_NEED [default: resource/config.yaml] 82 | --classes-json 全部课程路径 [default: resource/classes.json] 83 | --choose-json 选择课程路径 [default: resource/choose.json] 84 | -h, --help Print help 85 | -V, --version Print version 86 | ``` 87 | 88 | - 配置文件同上 89 | - `classes.json` 为全部课程信息,`choose.json` 为你想要选择的课程信息,会自动生成 90 | 91 | --- 92 | 93 | ### 课程成绩查询 94 | 95 | **编译命令** 96 | 97 | ```text 98 | cargo run -p get_grades --bin get_grades -- 99 | ``` 100 | 101 | **使用说明** 102 | 103 | ```text 104 | Usage: get_grades.exe [OPTIONS] 105 | 106 | Options: 107 | -c, --cookie-txt cookie路径 IN_NEED [default: resource/grades_cookie.txt] 108 | -g, --grades-json 保存导出成绩的json文件路径 [default: resource/grades.json] 109 | -r, --raw-grades-json 保存原始成绩的json文件路径 [default: resource/raw_grades.json] 110 | -h, --help Print help 111 | -V, --version Print version 112 | ``` 113 | 114 | cookie 需要进入成绩查询系统后,在开发者调试台中查看任意后缀为 `.do` 的请求头 `Cookie` 字段获取。此cookie时效性很强,建议每次使用前都重新获取。 115 | 116 | --- 117 | 118 | ### 绩点计算 119 | 120 | **编译命令** 121 | 122 | ```text 123 | cargo run -p get_grades --bin calc_gpa -- 124 | ``` 125 | 126 | **使用说明** 127 | 128 | ```text 129 | Usage: calc_gpa.exe [OPTIONS] 130 | 131 | Options: 132 | --grades-json 保存导出成绩的json文件路径 IN_NEED [default: resource/grades.json] 133 | --terms 学期列表,逗号隔开,不填则默认计算所有学期 [example: 2024-2025-1, 2024-2025-2] [default: ] 134 | -h, --help Print help 135 | -V, --version Print version 136 | ``` 137 | 138 | 学期列表的格式为 `yyyy-yyyy-x`,其中 `x` 为学期,`1` 为暑期学校,`2` 为秋季学期,`3` 为春季学期。 139 | -------------------------------------------------------------------------------- /crates/choose_classes/src/bin/get_tokens.rs: -------------------------------------------------------------------------------- 1 | use base64::Engine; 2 | use cfg_if::cfg_if; 3 | use choose_classes::Config; 4 | use clap::Parser; 5 | use reqwest::{Client, Error}; 6 | use serde::{Deserialize, Serialize}; 7 | use serde_json::Value; 8 | use std::fs; 9 | use std::path::PathBuf; 10 | use std::process::Command; 11 | use tokio; 12 | 13 | #[derive(Parser)] 14 | #[clap(version, name = "get_tokens")] 15 | #[command(version, about, long_about = None)] 16 | struct Cli { 17 | /// 配置文件路径 IN_NEED 18 | #[clap(long, default_value = "resource/config.yaml")] 19 | config_yaml: PathBuf, 20 | /// 临时验证码路径 21 | #[clap(long, default_value = "resource/captcha.png")] 22 | captcha_png: PathBuf, 23 | } 24 | 25 | #[derive(Debug, Serialize, Deserialize)] 26 | struct LoginData { 27 | loginname: String, 28 | password: String, 29 | captcha: String, 30 | uuid: String, 31 | } 32 | 33 | fn decode_and_show_image( 34 | encoded_image: &str, 35 | captcha_png: &PathBuf, 36 | ) -> Result<(), Box> { 37 | let img_data = 38 | base64::engine::general_purpose::STANDARD.decode(&encoded_image.as_bytes().to_vec())?; 39 | let img = image::load_from_memory(&img_data)?; 40 | img.save(&captcha_png)?; 41 | 42 | let current_dir = std::env::current_dir().unwrap(); 43 | let captcha_png = current_dir.join(captcha_png); 44 | cfg_if! { 45 | if #[cfg(target_os = "windows")] { 46 | Command::new("cmd") 47 | .arg("/C") 48 | .arg(format!("start {}", captcha_png.to_str().unwrap())) 49 | .spawn()?; 50 | } else if #[cfg(target_os = "macos")] { 51 | Command::new("open").arg(captcha_png).spawn()?; 52 | } else { 53 | Command::new("xdg-open").arg(captcha_png).spawn()?; 54 | } 55 | } 56 | 57 | Ok(()) 58 | } 59 | 60 | async fn get_login_data(cli: &Cli) -> Result { 61 | let config: Config = 62 | serde_yaml::from_str(&fs::read_to_string(&cli.config_yaml).unwrap()).unwrap(); 63 | let loginname = config.loginname; 64 | let password = config.password; 65 | let captcha_url = "https://newxk.urp.seu.edu.cn/xsxk/auth/captcha"; 66 | let client = Client::new(); 67 | let response = client 68 | .post(captcha_url) 69 | .header("Content-Length", "0") 70 | .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36") 71 | .send() 72 | .await?; 73 | let response: Value = serde_json::from_str(&response.text().await?).unwrap(); 74 | println!("Response: {}", response["msg"]); 75 | let uuid = response["data"]["uuid"].as_str().unwrap(); 76 | let captcha = response["data"]["captcha"].as_str().unwrap(); 77 | let encoded_image = captcha.split(",").nth(1).unwrap(); 78 | decode_and_show_image(encoded_image, &cli.captcha_png).unwrap(); 79 | 80 | println!("Please input the captcha:"); 81 | let mut input = String::new(); 82 | std::io::stdin().read_line(&mut input).unwrap(); 83 | let captcha = input.trim(); 84 | Ok(LoginData { 85 | loginname, 86 | password, 87 | captcha: captcha.to_string(), 88 | uuid: uuid.to_string(), 89 | }) 90 | } 91 | 92 | async fn get_token(data: &LoginData) -> Result { 93 | let auth_url = "https://newxk.urp.seu.edu.cn/xsxk/auth/login"; 94 | let client = Client::new(); 95 | 96 | let response = client 97 | .post(auth_url) 98 | .header("Content-Type", "application/x-www-form-urlencoded") 99 | .header("Accept", "application/json, text/plain, */*") 100 | .header("Origin", "https://newxk.urp.seu.edu.cn") 101 | .header( 102 | "Referer", 103 | "https://newxk.urp.seu.edu.cn/xsxk/profile/index.html", 104 | ) 105 | .form(&data) 106 | .send() 107 | .await?; 108 | 109 | let response_text = &response.text().await?; 110 | println!("Token response: {}", response_text); 111 | let response: Value = serde_json::from_str(response_text).unwrap(); 112 | Ok(response["data"]["token"].as_str().unwrap().to_string()) 113 | } 114 | 115 | #[tokio::main] 116 | async fn main() { 117 | let cli = Cli::parse(); 118 | let mut config: Config = 119 | serde_yaml::from_str(&fs::read_to_string(&cli.config_yaml).unwrap()).unwrap(); 120 | let batch_id = &config.batch_id; 121 | let login_data = get_login_data(&cli).await.unwrap(); 122 | let token = get_token(&login_data).await.unwrap(); 123 | println!("Token: {}", token); 124 | config.token = token.clone(); 125 | fs::write(cli.config_yaml, serde_yaml::to_string(&config).unwrap()).unwrap(); 126 | 127 | let elective_url = format!( 128 | "https://newxk.urp.seu.edu.cn/xsxk/elective/grablessons?batchId={}&token={}", 129 | batch_id, token 130 | ); 131 | println!("Elective URL: {}", elective_url); 132 | let client = Client::new(); 133 | client 134 | .get(&elective_url) 135 | .header("Content-Type", "application/json;charset=UTF-8") 136 | .header("Accept", "application/json, text/plain, */*") 137 | .header("Origin", "https://newxk.urp.seu.edu.cn") 138 | .header( 139 | "Referer", 140 | "https://newxk.urp.seu.edu.cn/xsxk/profile/index.html", 141 | ) 142 | .send() 143 | .await 144 | .unwrap(); 145 | } 146 | -------------------------------------------------------------------------------- /crates/choose_classes/src/utils.rs: -------------------------------------------------------------------------------- 1 | use crate::WantCourse; 2 | use reqwest::{Client, Error}; 3 | use serde_json::Value; 4 | use std::fs; 5 | use std::io::Write; 6 | use std::path::PathBuf; 7 | use std::time::Duration; 8 | use tokio::time::sleep; 9 | use urlencoding::encode; 10 | 11 | /// 选择一个单独课程 12 | pub async fn select_course( 13 | course_type: &str, 14 | course_id: &str, 15 | course_secret: &str, 16 | client: &Client, 17 | token: &str, 18 | batch_id: &str, 19 | ) -> Result<(), Error> { 20 | let form_data = format!( 21 | "clazzType={}&clazzId={}&secretVal={}", 22 | course_type, 23 | course_id, 24 | encode(course_secret) 25 | ); 26 | 27 | let course_select_url = "https://newxk.urp.seu.edu.cn/xsxk/elective/clazz/add"; 28 | 29 | let res = client 30 | .post(course_select_url) 31 | .header("Authorization", token) 32 | .header("Content-Type", "application/x-www-form-urlencoded") 33 | .header("Accept", "application/json, text/plain, */*") 34 | .header("Origin", "https://newxk.urp.seu.edu.cn") 35 | .header( 36 | "Referer", 37 | format!( 38 | "https://newxk.urp.seu.edu.cn/xsxk/elective/grablessons?batchId={}&token={}", 39 | batch_id, token 40 | ), 41 | ) 42 | .body(form_data) 43 | .send() 44 | .await?; 45 | 46 | let status_code = res.status(); 47 | println!("Status Code: {}", status_code); 48 | 49 | let body = res.text().await?; 50 | let body: Value = serde_json::from_str(&body).unwrap(); 51 | println!("Message: {}", body["msg"].as_str().unwrap()); 52 | 53 | Ok(()) 54 | } 55 | 56 | /// 获取课程列表 57 | pub async fn get_course_list( 58 | class_type: &str, 59 | client: &Client, 60 | token: &str, 61 | batch_id: &str, 62 | classes_json: &PathBuf, 63 | ) -> Result { 64 | let request_body = serde_json::json!({ 65 | "teachingClassType": class_type, 66 | "pageNumber": 1, 67 | "pageSize": 99, 68 | "orderBy": "", 69 | "campus": "1", 70 | }); 71 | 72 | let course_list_url = "https://newxk.urp.seu.edu.cn/xsxk/elective/clazz/list"; 73 | let res = client 74 | .post(course_list_url) 75 | .header("Authorization", token) 76 | .header("Content-Type", "application/json;charset=UTF-8") 77 | .header("Accept", "application/json, text/plain, */*") 78 | .header("Origin", "https://newxk.urp.seu.edu.cn") 79 | .header( 80 | "Referer", 81 | format!( 82 | "https://newxk.urp.seu.edu.cn/xsxk/elective/grablessons?batchId={}&token={}", 83 | batch_id, token 84 | ), 85 | ) 86 | .json(&request_body) 87 | .send() 88 | .await?; 89 | 90 | let status_code = res.status(); 91 | println!("Status Code: {}", status_code); 92 | 93 | let body = res.text().await?; 94 | println!("Content: {}", body); 95 | 96 | let mut file = fs::File::create(classes_json).unwrap(); 97 | file.write_all(body.as_bytes()).unwrap(); 98 | 99 | Ok(serde_json::from_str(&body).unwrap()) 100 | } 101 | 102 | /// 生成选课列表 103 | pub async fn gene_wish_list( 104 | client: &Client, 105 | token: &str, 106 | batch_id: &str, 107 | classes_json: &PathBuf, 108 | choose_json: &PathBuf, 109 | re_generate: bool, 110 | ) -> Result<(), Error> { 111 | if !re_generate { 112 | return Ok(()) 113 | } 114 | println!("Generating wish list..."); 115 | let courses = get_course_list("TJKC", client, token, batch_id, classes_json).await?; 116 | let data = courses["data"]["rows"].as_array().unwrap(); 117 | 118 | let mut want_courses = Vec::new(); 119 | 120 | for course in data { 121 | let tclist = course["tcList"].as_array().unwrap(); 122 | for clss in tclist { 123 | let jxb_id = clss["JXBID"].as_str().unwrap(); 124 | let secret = clss["secretVal"].as_str().unwrap(); 125 | let name = clss["KCM"].as_str().unwrap(); 126 | let unknow = Value::String("unknow".to_string()); 127 | let skjs = clss.get("SKJS").unwrap_or(&unknow).as_str().unwrap(); 128 | let teaching_place = clss.get("teachingPlace").unwrap_or(&unknow).as_str().unwrap(); 129 | 130 | println!( 131 | "Do you want to select the course {}({}) at \"{}\"? (y/n): ", 132 | name, skjs, teaching_place 133 | ); 134 | let mut user_input = String::new(); 135 | std::io::stdin().read_line(&mut user_input).unwrap(); 136 | 137 | if user_input.trim().to_lowercase() != "y" { 138 | continue; 139 | } 140 | 141 | want_courses.push(WantCourse { 142 | name: format!("{}({})", name, skjs), 143 | course_type: "TJKC".to_string(), 144 | course_id: jxb_id.to_string(), 145 | course_secret: secret.to_string(), 146 | }); 147 | } 148 | } 149 | 150 | let json_data = serde_json::to_string_pretty(&want_courses).unwrap(); 151 | let mut file = fs::File::create(choose_json).unwrap(); 152 | file.write_all(json_data.as_bytes()).unwrap(); 153 | 154 | Ok(()) 155 | } 156 | 157 | /// 选课 158 | pub async fn choose_courses( 159 | client: &Client, 160 | token: &str, 161 | batch_id: &str, 162 | choose_json: &PathBuf, 163 | ) -> Result<(), Error> { 164 | println!("Choosing courses..."); 165 | let want_courses: Vec = 166 | serde_json::from_str(&fs::read_to_string(choose_json).unwrap()).unwrap(); 167 | 168 | if want_courses.is_empty() { 169 | println!("No courses to choose from. Please generate a wish list first."); 170 | return Ok(()); 171 | } 172 | 173 | let mut i = 0; 174 | loop { 175 | for course in &want_courses { 176 | select_course( 177 | &course.course_type, 178 | &course.course_id, 179 | &course.course_secret, 180 | client, 181 | token, 182 | batch_id, 183 | ) 184 | .await?; 185 | println!("Selected course: {}", course.name); 186 | i += 1; 187 | 188 | if i % 3 == 0 { 189 | sleep(Duration::from_secs(1)).await; 190 | } 191 | } 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "addr2line" 7 | version = "0.24.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 10 | dependencies = [ 11 | "gimli", 12 | ] 13 | 14 | [[package]] 15 | name = "adler2" 16 | version = "2.0.0" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 19 | 20 | [[package]] 21 | name = "aligned-vec" 22 | version = "0.5.0" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" 25 | 26 | [[package]] 27 | name = "anstream" 28 | version = "0.6.18" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 31 | dependencies = [ 32 | "anstyle", 33 | "anstyle-parse", 34 | "anstyle-query", 35 | "anstyle-wincon", 36 | "colorchoice", 37 | "is_terminal_polyfill", 38 | "utf8parse", 39 | ] 40 | 41 | [[package]] 42 | name = "anstyle" 43 | version = "1.0.10" 44 | source = "registry+https://github.com/rust-lang/crates.io-index" 45 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 46 | 47 | [[package]] 48 | name = "anstyle-parse" 49 | version = "0.2.6" 50 | source = "registry+https://github.com/rust-lang/crates.io-index" 51 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 52 | dependencies = [ 53 | "utf8parse", 54 | ] 55 | 56 | [[package]] 57 | name = "anstyle-query" 58 | version = "1.1.2" 59 | source = "registry+https://github.com/rust-lang/crates.io-index" 60 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 61 | dependencies = [ 62 | "windows-sys 0.59.0", 63 | ] 64 | 65 | [[package]] 66 | name = "anstyle-wincon" 67 | version = "3.0.7" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 70 | dependencies = [ 71 | "anstyle", 72 | "once_cell", 73 | "windows-sys 0.59.0", 74 | ] 75 | 76 | [[package]] 77 | name = "anyhow" 78 | version = "1.0.96" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" 81 | 82 | [[package]] 83 | name = "arbitrary" 84 | version = "1.4.1" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" 87 | 88 | [[package]] 89 | name = "arg_enum_proc_macro" 90 | version = "0.3.4" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" 93 | dependencies = [ 94 | "proc-macro2", 95 | "quote", 96 | "syn", 97 | ] 98 | 99 | [[package]] 100 | name = "arrayvec" 101 | version = "0.7.6" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 104 | 105 | [[package]] 106 | name = "atomic-waker" 107 | version = "1.1.2" 108 | source = "registry+https://github.com/rust-lang/crates.io-index" 109 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 110 | 111 | [[package]] 112 | name = "autocfg" 113 | version = "1.4.0" 114 | source = "registry+https://github.com/rust-lang/crates.io-index" 115 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 116 | 117 | [[package]] 118 | name = "av1-grain" 119 | version = "0.2.3" 120 | source = "registry+https://github.com/rust-lang/crates.io-index" 121 | checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf" 122 | dependencies = [ 123 | "anyhow", 124 | "arrayvec", 125 | "log", 126 | "nom", 127 | "num-rational", 128 | "v_frame", 129 | ] 130 | 131 | [[package]] 132 | name = "avif-serialize" 133 | version = "0.8.2" 134 | source = "registry+https://github.com/rust-lang/crates.io-index" 135 | checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" 136 | dependencies = [ 137 | "arrayvec", 138 | ] 139 | 140 | [[package]] 141 | name = "backtrace" 142 | version = "0.3.74" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 145 | dependencies = [ 146 | "addr2line", 147 | "cfg-if", 148 | "libc", 149 | "miniz_oxide", 150 | "object", 151 | "rustc-demangle", 152 | "windows-targets", 153 | ] 154 | 155 | [[package]] 156 | name = "base64" 157 | version = "0.22.1" 158 | source = "registry+https://github.com/rust-lang/crates.io-index" 159 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 160 | 161 | [[package]] 162 | name = "bit_field" 163 | version = "0.10.2" 164 | source = "registry+https://github.com/rust-lang/crates.io-index" 165 | checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" 166 | 167 | [[package]] 168 | name = "bitflags" 169 | version = "1.3.2" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 172 | 173 | [[package]] 174 | name = "bitflags" 175 | version = "2.8.0" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" 178 | 179 | [[package]] 180 | name = "bitstream-io" 181 | version = "2.6.0" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" 184 | 185 | [[package]] 186 | name = "built" 187 | version = "0.7.7" 188 | source = "registry+https://github.com/rust-lang/crates.io-index" 189 | checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b" 190 | 191 | [[package]] 192 | name = "bumpalo" 193 | version = "3.17.0" 194 | source = "registry+https://github.com/rust-lang/crates.io-index" 195 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 196 | 197 | [[package]] 198 | name = "bytemuck" 199 | version = "1.21.0" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" 202 | 203 | [[package]] 204 | name = "byteorder" 205 | version = "1.5.0" 206 | source = "registry+https://github.com/rust-lang/crates.io-index" 207 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 208 | 209 | [[package]] 210 | name = "byteorder-lite" 211 | version = "0.1.0" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 214 | 215 | [[package]] 216 | name = "bytes" 217 | version = "1.10.0" 218 | source = "registry+https://github.com/rust-lang/crates.io-index" 219 | checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" 220 | 221 | [[package]] 222 | name = "cc" 223 | version = "1.2.14" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" 226 | dependencies = [ 227 | "jobserver", 228 | "libc", 229 | "shlex", 230 | ] 231 | 232 | [[package]] 233 | name = "cfg-expr" 234 | version = "0.15.8" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" 237 | dependencies = [ 238 | "smallvec", 239 | "target-lexicon", 240 | ] 241 | 242 | [[package]] 243 | name = "cfg-if" 244 | version = "1.0.0" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 247 | 248 | [[package]] 249 | name = "choose_classes" 250 | version = "0.1.0" 251 | dependencies = [ 252 | "base64", 253 | "cfg-if", 254 | "clap", 255 | "image", 256 | "reqwest", 257 | "serde", 258 | "serde_json", 259 | "serde_yaml", 260 | "tokio", 261 | "urlencoding", 262 | ] 263 | 264 | [[package]] 265 | name = "clap" 266 | version = "4.5.30" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" 269 | dependencies = [ 270 | "clap_builder", 271 | "clap_derive", 272 | ] 273 | 274 | [[package]] 275 | name = "clap_builder" 276 | version = "4.5.30" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" 279 | dependencies = [ 280 | "anstream", 281 | "anstyle", 282 | "clap_lex", 283 | "strsim", 284 | ] 285 | 286 | [[package]] 287 | name = "clap_derive" 288 | version = "4.5.28" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" 291 | dependencies = [ 292 | "heck", 293 | "proc-macro2", 294 | "quote", 295 | "syn", 296 | ] 297 | 298 | [[package]] 299 | name = "clap_lex" 300 | version = "0.7.4" 301 | source = "registry+https://github.com/rust-lang/crates.io-index" 302 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 303 | 304 | [[package]] 305 | name = "color_quant" 306 | version = "1.1.0" 307 | source = "registry+https://github.com/rust-lang/crates.io-index" 308 | checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" 309 | 310 | [[package]] 311 | name = "colorchoice" 312 | version = "1.0.3" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 315 | 316 | [[package]] 317 | name = "core-foundation" 318 | version = "0.9.4" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 321 | dependencies = [ 322 | "core-foundation-sys", 323 | "libc", 324 | ] 325 | 326 | [[package]] 327 | name = "core-foundation-sys" 328 | version = "0.8.7" 329 | source = "registry+https://github.com/rust-lang/crates.io-index" 330 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 331 | 332 | [[package]] 333 | name = "crc32fast" 334 | version = "1.4.2" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 337 | dependencies = [ 338 | "cfg-if", 339 | ] 340 | 341 | [[package]] 342 | name = "crossbeam-deque" 343 | version = "0.8.6" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 346 | dependencies = [ 347 | "crossbeam-epoch", 348 | "crossbeam-utils", 349 | ] 350 | 351 | [[package]] 352 | name = "crossbeam-epoch" 353 | version = "0.9.18" 354 | source = "registry+https://github.com/rust-lang/crates.io-index" 355 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 356 | dependencies = [ 357 | "crossbeam-utils", 358 | ] 359 | 360 | [[package]] 361 | name = "crossbeam-utils" 362 | version = "0.8.21" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 365 | 366 | [[package]] 367 | name = "crunchy" 368 | version = "0.2.3" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" 371 | 372 | [[package]] 373 | name = "displaydoc" 374 | version = "0.2.5" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 377 | dependencies = [ 378 | "proc-macro2", 379 | "quote", 380 | "syn", 381 | ] 382 | 383 | [[package]] 384 | name = "either" 385 | version = "1.13.0" 386 | source = "registry+https://github.com/rust-lang/crates.io-index" 387 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 388 | 389 | [[package]] 390 | name = "encoding_rs" 391 | version = "0.8.35" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 394 | dependencies = [ 395 | "cfg-if", 396 | ] 397 | 398 | [[package]] 399 | name = "equivalent" 400 | version = "1.0.2" 401 | source = "registry+https://github.com/rust-lang/crates.io-index" 402 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 403 | 404 | [[package]] 405 | name = "errno" 406 | version = "0.3.10" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 409 | dependencies = [ 410 | "libc", 411 | "windows-sys 0.59.0", 412 | ] 413 | 414 | [[package]] 415 | name = "exr" 416 | version = "1.73.0" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" 419 | dependencies = [ 420 | "bit_field", 421 | "half", 422 | "lebe", 423 | "miniz_oxide", 424 | "rayon-core", 425 | "smallvec", 426 | "zune-inflate", 427 | ] 428 | 429 | [[package]] 430 | name = "fastrand" 431 | version = "2.3.0" 432 | source = "registry+https://github.com/rust-lang/crates.io-index" 433 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 434 | 435 | [[package]] 436 | name = "fdeflate" 437 | version = "0.3.7" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" 440 | dependencies = [ 441 | "simd-adler32", 442 | ] 443 | 444 | [[package]] 445 | name = "flate2" 446 | version = "1.0.35" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 449 | dependencies = [ 450 | "crc32fast", 451 | "miniz_oxide", 452 | ] 453 | 454 | [[package]] 455 | name = "fnv" 456 | version = "1.0.7" 457 | source = "registry+https://github.com/rust-lang/crates.io-index" 458 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 459 | 460 | [[package]] 461 | name = "foreign-types" 462 | version = "0.3.2" 463 | source = "registry+https://github.com/rust-lang/crates.io-index" 464 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 465 | dependencies = [ 466 | "foreign-types-shared", 467 | ] 468 | 469 | [[package]] 470 | name = "foreign-types-shared" 471 | version = "0.1.1" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 474 | 475 | [[package]] 476 | name = "form_urlencoded" 477 | version = "1.2.1" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 480 | dependencies = [ 481 | "percent-encoding", 482 | ] 483 | 484 | [[package]] 485 | name = "futures-channel" 486 | version = "0.3.31" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 489 | dependencies = [ 490 | "futures-core", 491 | ] 492 | 493 | [[package]] 494 | name = "futures-core" 495 | version = "0.3.31" 496 | source = "registry+https://github.com/rust-lang/crates.io-index" 497 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 498 | 499 | [[package]] 500 | name = "futures-sink" 501 | version = "0.3.31" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 504 | 505 | [[package]] 506 | name = "futures-task" 507 | version = "0.3.31" 508 | source = "registry+https://github.com/rust-lang/crates.io-index" 509 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 510 | 511 | [[package]] 512 | name = "futures-util" 513 | version = "0.3.31" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 516 | dependencies = [ 517 | "futures-core", 518 | "futures-task", 519 | "pin-project-lite", 520 | "pin-utils", 521 | ] 522 | 523 | [[package]] 524 | name = "get_grades" 525 | version = "0.1.0" 526 | dependencies = [ 527 | "clap", 528 | "reqwest", 529 | "serde", 530 | "serde_json", 531 | "tokio", 532 | ] 533 | 534 | [[package]] 535 | name = "getrandom" 536 | version = "0.2.15" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 539 | dependencies = [ 540 | "cfg-if", 541 | "libc", 542 | "wasi 0.11.0+wasi-snapshot-preview1", 543 | ] 544 | 545 | [[package]] 546 | name = "getrandom" 547 | version = "0.3.1" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" 550 | dependencies = [ 551 | "cfg-if", 552 | "libc", 553 | "wasi 0.13.3+wasi-0.2.2", 554 | "windows-targets", 555 | ] 556 | 557 | [[package]] 558 | name = "gif" 559 | version = "0.13.1" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" 562 | dependencies = [ 563 | "color_quant", 564 | "weezl", 565 | ] 566 | 567 | [[package]] 568 | name = "gimli" 569 | version = "0.31.1" 570 | source = "registry+https://github.com/rust-lang/crates.io-index" 571 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 572 | 573 | [[package]] 574 | name = "h2" 575 | version = "0.4.8" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "5017294ff4bb30944501348f6f8e42e6ad28f42c8bbef7a74029aff064a4e3c2" 578 | dependencies = [ 579 | "atomic-waker", 580 | "bytes", 581 | "fnv", 582 | "futures-core", 583 | "futures-sink", 584 | "http", 585 | "indexmap", 586 | "slab", 587 | "tokio", 588 | "tokio-util", 589 | "tracing", 590 | ] 591 | 592 | [[package]] 593 | name = "half" 594 | version = "2.4.1" 595 | source = "registry+https://github.com/rust-lang/crates.io-index" 596 | checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" 597 | dependencies = [ 598 | "cfg-if", 599 | "crunchy", 600 | ] 601 | 602 | [[package]] 603 | name = "hashbrown" 604 | version = "0.15.2" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 607 | 608 | [[package]] 609 | name = "heck" 610 | version = "0.5.0" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 613 | 614 | [[package]] 615 | name = "http" 616 | version = "1.2.0" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" 619 | dependencies = [ 620 | "bytes", 621 | "fnv", 622 | "itoa", 623 | ] 624 | 625 | [[package]] 626 | name = "http-body" 627 | version = "1.0.1" 628 | source = "registry+https://github.com/rust-lang/crates.io-index" 629 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 630 | dependencies = [ 631 | "bytes", 632 | "http", 633 | ] 634 | 635 | [[package]] 636 | name = "http-body-util" 637 | version = "0.1.2" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 640 | dependencies = [ 641 | "bytes", 642 | "futures-util", 643 | "http", 644 | "http-body", 645 | "pin-project-lite", 646 | ] 647 | 648 | [[package]] 649 | name = "httparse" 650 | version = "1.10.0" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" 653 | 654 | [[package]] 655 | name = "hyper" 656 | version = "1.6.0" 657 | source = "registry+https://github.com/rust-lang/crates.io-index" 658 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 659 | dependencies = [ 660 | "bytes", 661 | "futures-channel", 662 | "futures-util", 663 | "h2", 664 | "http", 665 | "http-body", 666 | "httparse", 667 | "itoa", 668 | "pin-project-lite", 669 | "smallvec", 670 | "tokio", 671 | "want", 672 | ] 673 | 674 | [[package]] 675 | name = "hyper-rustls" 676 | version = "0.27.5" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 679 | dependencies = [ 680 | "futures-util", 681 | "http", 682 | "hyper", 683 | "hyper-util", 684 | "rustls", 685 | "rustls-pki-types", 686 | "tokio", 687 | "tokio-rustls", 688 | "tower-service", 689 | ] 690 | 691 | [[package]] 692 | name = "hyper-tls" 693 | version = "0.6.0" 694 | source = "registry+https://github.com/rust-lang/crates.io-index" 695 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 696 | dependencies = [ 697 | "bytes", 698 | "http-body-util", 699 | "hyper", 700 | "hyper-util", 701 | "native-tls", 702 | "tokio", 703 | "tokio-native-tls", 704 | "tower-service", 705 | ] 706 | 707 | [[package]] 708 | name = "hyper-util" 709 | version = "0.1.10" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" 712 | dependencies = [ 713 | "bytes", 714 | "futures-channel", 715 | "futures-util", 716 | "http", 717 | "http-body", 718 | "hyper", 719 | "pin-project-lite", 720 | "socket2", 721 | "tokio", 722 | "tower-service", 723 | "tracing", 724 | ] 725 | 726 | [[package]] 727 | name = "icu_collections" 728 | version = "1.5.0" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 731 | dependencies = [ 732 | "displaydoc", 733 | "yoke", 734 | "zerofrom", 735 | "zerovec", 736 | ] 737 | 738 | [[package]] 739 | name = "icu_locid" 740 | version = "1.5.0" 741 | source = "registry+https://github.com/rust-lang/crates.io-index" 742 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 743 | dependencies = [ 744 | "displaydoc", 745 | "litemap", 746 | "tinystr", 747 | "writeable", 748 | "zerovec", 749 | ] 750 | 751 | [[package]] 752 | name = "icu_locid_transform" 753 | version = "1.5.0" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 756 | dependencies = [ 757 | "displaydoc", 758 | "icu_locid", 759 | "icu_locid_transform_data", 760 | "icu_provider", 761 | "tinystr", 762 | "zerovec", 763 | ] 764 | 765 | [[package]] 766 | name = "icu_locid_transform_data" 767 | version = "1.5.0" 768 | source = "registry+https://github.com/rust-lang/crates.io-index" 769 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 770 | 771 | [[package]] 772 | name = "icu_normalizer" 773 | version = "1.5.0" 774 | source = "registry+https://github.com/rust-lang/crates.io-index" 775 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 776 | dependencies = [ 777 | "displaydoc", 778 | "icu_collections", 779 | "icu_normalizer_data", 780 | "icu_properties", 781 | "icu_provider", 782 | "smallvec", 783 | "utf16_iter", 784 | "utf8_iter", 785 | "write16", 786 | "zerovec", 787 | ] 788 | 789 | [[package]] 790 | name = "icu_normalizer_data" 791 | version = "1.5.0" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 794 | 795 | [[package]] 796 | name = "icu_properties" 797 | version = "1.5.1" 798 | source = "registry+https://github.com/rust-lang/crates.io-index" 799 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 800 | dependencies = [ 801 | "displaydoc", 802 | "icu_collections", 803 | "icu_locid_transform", 804 | "icu_properties_data", 805 | "icu_provider", 806 | "tinystr", 807 | "zerovec", 808 | ] 809 | 810 | [[package]] 811 | name = "icu_properties_data" 812 | version = "1.5.0" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 815 | 816 | [[package]] 817 | name = "icu_provider" 818 | version = "1.5.0" 819 | source = "registry+https://github.com/rust-lang/crates.io-index" 820 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 821 | dependencies = [ 822 | "displaydoc", 823 | "icu_locid", 824 | "icu_provider_macros", 825 | "stable_deref_trait", 826 | "tinystr", 827 | "writeable", 828 | "yoke", 829 | "zerofrom", 830 | "zerovec", 831 | ] 832 | 833 | [[package]] 834 | name = "icu_provider_macros" 835 | version = "1.5.0" 836 | source = "registry+https://github.com/rust-lang/crates.io-index" 837 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 838 | dependencies = [ 839 | "proc-macro2", 840 | "quote", 841 | "syn", 842 | ] 843 | 844 | [[package]] 845 | name = "idna" 846 | version = "1.0.3" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 849 | dependencies = [ 850 | "idna_adapter", 851 | "smallvec", 852 | "utf8_iter", 853 | ] 854 | 855 | [[package]] 856 | name = "idna_adapter" 857 | version = "1.2.0" 858 | source = "registry+https://github.com/rust-lang/crates.io-index" 859 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 860 | dependencies = [ 861 | "icu_normalizer", 862 | "icu_properties", 863 | ] 864 | 865 | [[package]] 866 | name = "image" 867 | version = "0.25.5" 868 | source = "registry+https://github.com/rust-lang/crates.io-index" 869 | checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" 870 | dependencies = [ 871 | "bytemuck", 872 | "byteorder-lite", 873 | "color_quant", 874 | "exr", 875 | "gif", 876 | "image-webp", 877 | "num-traits", 878 | "png", 879 | "qoi", 880 | "ravif", 881 | "rayon", 882 | "rgb", 883 | "tiff", 884 | "zune-core", 885 | "zune-jpeg", 886 | ] 887 | 888 | [[package]] 889 | name = "image-webp" 890 | version = "0.2.1" 891 | source = "registry+https://github.com/rust-lang/crates.io-index" 892 | checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f" 893 | dependencies = [ 894 | "byteorder-lite", 895 | "quick-error", 896 | ] 897 | 898 | [[package]] 899 | name = "imgref" 900 | version = "1.11.0" 901 | source = "registry+https://github.com/rust-lang/crates.io-index" 902 | checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408" 903 | 904 | [[package]] 905 | name = "indexmap" 906 | version = "2.7.1" 907 | source = "registry+https://github.com/rust-lang/crates.io-index" 908 | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" 909 | dependencies = [ 910 | "equivalent", 911 | "hashbrown", 912 | ] 913 | 914 | [[package]] 915 | name = "interpolate_name" 916 | version = "0.2.4" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" 919 | dependencies = [ 920 | "proc-macro2", 921 | "quote", 922 | "syn", 923 | ] 924 | 925 | [[package]] 926 | name = "ipnet" 927 | version = "2.11.0" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 930 | 931 | [[package]] 932 | name = "is_terminal_polyfill" 933 | version = "1.70.1" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 936 | 937 | [[package]] 938 | name = "itertools" 939 | version = "0.12.1" 940 | source = "registry+https://github.com/rust-lang/crates.io-index" 941 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 942 | dependencies = [ 943 | "either", 944 | ] 945 | 946 | [[package]] 947 | name = "itoa" 948 | version = "1.0.14" 949 | source = "registry+https://github.com/rust-lang/crates.io-index" 950 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 951 | 952 | [[package]] 953 | name = "jobserver" 954 | version = "0.1.32" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 957 | dependencies = [ 958 | "libc", 959 | ] 960 | 961 | [[package]] 962 | name = "jpeg-decoder" 963 | version = "0.3.1" 964 | source = "registry+https://github.com/rust-lang/crates.io-index" 965 | checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" 966 | 967 | [[package]] 968 | name = "js-sys" 969 | version = "0.3.77" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 972 | dependencies = [ 973 | "once_cell", 974 | "wasm-bindgen", 975 | ] 976 | 977 | [[package]] 978 | name = "lebe" 979 | version = "0.5.2" 980 | source = "registry+https://github.com/rust-lang/crates.io-index" 981 | checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" 982 | 983 | [[package]] 984 | name = "libc" 985 | version = "0.2.169" 986 | source = "registry+https://github.com/rust-lang/crates.io-index" 987 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 988 | 989 | [[package]] 990 | name = "libfuzzer-sys" 991 | version = "0.4.9" 992 | source = "registry+https://github.com/rust-lang/crates.io-index" 993 | checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75" 994 | dependencies = [ 995 | "arbitrary", 996 | "cc", 997 | ] 998 | 999 | [[package]] 1000 | name = "linux-raw-sys" 1001 | version = "0.4.15" 1002 | source = "registry+https://github.com/rust-lang/crates.io-index" 1003 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1004 | 1005 | [[package]] 1006 | name = "litemap" 1007 | version = "0.7.4" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1010 | 1011 | [[package]] 1012 | name = "lock_api" 1013 | version = "0.4.12" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1016 | dependencies = [ 1017 | "autocfg", 1018 | "scopeguard", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "log" 1023 | version = "0.4.25" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" 1026 | 1027 | [[package]] 1028 | name = "loop9" 1029 | version = "0.1.5" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" 1032 | dependencies = [ 1033 | "imgref", 1034 | ] 1035 | 1036 | [[package]] 1037 | name = "maybe-rayon" 1038 | version = "0.1.1" 1039 | source = "registry+https://github.com/rust-lang/crates.io-index" 1040 | checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" 1041 | dependencies = [ 1042 | "cfg-if", 1043 | "rayon", 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "memchr" 1048 | version = "2.7.4" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1051 | 1052 | [[package]] 1053 | name = "mime" 1054 | version = "0.3.17" 1055 | source = "registry+https://github.com/rust-lang/crates.io-index" 1056 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1057 | 1058 | [[package]] 1059 | name = "minimal-lexical" 1060 | version = "0.2.1" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1063 | 1064 | [[package]] 1065 | name = "miniz_oxide" 1066 | version = "0.8.4" 1067 | source = "registry+https://github.com/rust-lang/crates.io-index" 1068 | checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" 1069 | dependencies = [ 1070 | "adler2", 1071 | "simd-adler32", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "mio" 1076 | version = "1.0.3" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1079 | dependencies = [ 1080 | "libc", 1081 | "wasi 0.11.0+wasi-snapshot-preview1", 1082 | "windows-sys 0.52.0", 1083 | ] 1084 | 1085 | [[package]] 1086 | name = "native-tls" 1087 | version = "0.2.14" 1088 | source = "registry+https://github.com/rust-lang/crates.io-index" 1089 | checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 1090 | dependencies = [ 1091 | "libc", 1092 | "log", 1093 | "openssl", 1094 | "openssl-probe", 1095 | "openssl-sys", 1096 | "schannel", 1097 | "security-framework", 1098 | "security-framework-sys", 1099 | "tempfile", 1100 | ] 1101 | 1102 | [[package]] 1103 | name = "new_debug_unreachable" 1104 | version = "1.0.6" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1107 | 1108 | [[package]] 1109 | name = "nom" 1110 | version = "7.1.3" 1111 | source = "registry+https://github.com/rust-lang/crates.io-index" 1112 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1113 | dependencies = [ 1114 | "memchr", 1115 | "minimal-lexical", 1116 | ] 1117 | 1118 | [[package]] 1119 | name = "noop_proc_macro" 1120 | version = "0.3.0" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" 1123 | 1124 | [[package]] 1125 | name = "num-bigint" 1126 | version = "0.4.6" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 1129 | dependencies = [ 1130 | "num-integer", 1131 | "num-traits", 1132 | ] 1133 | 1134 | [[package]] 1135 | name = "num-derive" 1136 | version = "0.4.2" 1137 | source = "registry+https://github.com/rust-lang/crates.io-index" 1138 | checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" 1139 | dependencies = [ 1140 | "proc-macro2", 1141 | "quote", 1142 | "syn", 1143 | ] 1144 | 1145 | [[package]] 1146 | name = "num-integer" 1147 | version = "0.1.46" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1150 | dependencies = [ 1151 | "num-traits", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "num-rational" 1156 | version = "0.4.2" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" 1159 | dependencies = [ 1160 | "num-bigint", 1161 | "num-integer", 1162 | "num-traits", 1163 | ] 1164 | 1165 | [[package]] 1166 | name = "num-traits" 1167 | version = "0.2.19" 1168 | source = "registry+https://github.com/rust-lang/crates.io-index" 1169 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1170 | dependencies = [ 1171 | "autocfg", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "object" 1176 | version = "0.36.7" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1179 | dependencies = [ 1180 | "memchr", 1181 | ] 1182 | 1183 | [[package]] 1184 | name = "once_cell" 1185 | version = "1.20.3" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" 1188 | 1189 | [[package]] 1190 | name = "openssl" 1191 | version = "0.10.71" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" 1194 | dependencies = [ 1195 | "bitflags 2.8.0", 1196 | "cfg-if", 1197 | "foreign-types", 1198 | "libc", 1199 | "once_cell", 1200 | "openssl-macros", 1201 | "openssl-sys", 1202 | ] 1203 | 1204 | [[package]] 1205 | name = "openssl-macros" 1206 | version = "0.1.1" 1207 | source = "registry+https://github.com/rust-lang/crates.io-index" 1208 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1209 | dependencies = [ 1210 | "proc-macro2", 1211 | "quote", 1212 | "syn", 1213 | ] 1214 | 1215 | [[package]] 1216 | name = "openssl-probe" 1217 | version = "0.1.6" 1218 | source = "registry+https://github.com/rust-lang/crates.io-index" 1219 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1220 | 1221 | [[package]] 1222 | name = "openssl-sys" 1223 | version = "0.9.106" 1224 | source = "registry+https://github.com/rust-lang/crates.io-index" 1225 | checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" 1226 | dependencies = [ 1227 | "cc", 1228 | "libc", 1229 | "pkg-config", 1230 | "vcpkg", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "parking_lot" 1235 | version = "0.12.3" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1238 | dependencies = [ 1239 | "lock_api", 1240 | "parking_lot_core", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "parking_lot_core" 1245 | version = "0.9.10" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1248 | dependencies = [ 1249 | "cfg-if", 1250 | "libc", 1251 | "redox_syscall", 1252 | "smallvec", 1253 | "windows-targets", 1254 | ] 1255 | 1256 | [[package]] 1257 | name = "paste" 1258 | version = "1.0.15" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1261 | 1262 | [[package]] 1263 | name = "percent-encoding" 1264 | version = "2.3.1" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1267 | 1268 | [[package]] 1269 | name = "pin-project-lite" 1270 | version = "0.2.16" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1273 | 1274 | [[package]] 1275 | name = "pin-utils" 1276 | version = "0.1.0" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1279 | 1280 | [[package]] 1281 | name = "pkg-config" 1282 | version = "0.3.31" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1285 | 1286 | [[package]] 1287 | name = "png" 1288 | version = "0.17.16" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" 1291 | dependencies = [ 1292 | "bitflags 1.3.2", 1293 | "crc32fast", 1294 | "fdeflate", 1295 | "flate2", 1296 | "miniz_oxide", 1297 | ] 1298 | 1299 | [[package]] 1300 | name = "ppv-lite86" 1301 | version = "0.2.20" 1302 | source = "registry+https://github.com/rust-lang/crates.io-index" 1303 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1304 | dependencies = [ 1305 | "zerocopy", 1306 | ] 1307 | 1308 | [[package]] 1309 | name = "proc-macro2" 1310 | version = "1.0.93" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" 1313 | dependencies = [ 1314 | "unicode-ident", 1315 | ] 1316 | 1317 | [[package]] 1318 | name = "profiling" 1319 | version = "1.0.16" 1320 | source = "registry+https://github.com/rust-lang/crates.io-index" 1321 | checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d" 1322 | dependencies = [ 1323 | "profiling-procmacros", 1324 | ] 1325 | 1326 | [[package]] 1327 | name = "profiling-procmacros" 1328 | version = "1.0.16" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" 1331 | dependencies = [ 1332 | "quote", 1333 | "syn", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "qoi" 1338 | version = "0.4.1" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" 1341 | dependencies = [ 1342 | "bytemuck", 1343 | ] 1344 | 1345 | [[package]] 1346 | name = "quick-error" 1347 | version = "2.0.1" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 1350 | 1351 | [[package]] 1352 | name = "quote" 1353 | version = "1.0.38" 1354 | source = "registry+https://github.com/rust-lang/crates.io-index" 1355 | checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" 1356 | dependencies = [ 1357 | "proc-macro2", 1358 | ] 1359 | 1360 | [[package]] 1361 | name = "rand" 1362 | version = "0.8.5" 1363 | source = "registry+https://github.com/rust-lang/crates.io-index" 1364 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1365 | dependencies = [ 1366 | "libc", 1367 | "rand_chacha", 1368 | "rand_core", 1369 | ] 1370 | 1371 | [[package]] 1372 | name = "rand_chacha" 1373 | version = "0.3.1" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1376 | dependencies = [ 1377 | "ppv-lite86", 1378 | "rand_core", 1379 | ] 1380 | 1381 | [[package]] 1382 | name = "rand_core" 1383 | version = "0.6.4" 1384 | source = "registry+https://github.com/rust-lang/crates.io-index" 1385 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1386 | dependencies = [ 1387 | "getrandom 0.2.15", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "rav1e" 1392 | version = "0.7.1" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9" 1395 | dependencies = [ 1396 | "arbitrary", 1397 | "arg_enum_proc_macro", 1398 | "arrayvec", 1399 | "av1-grain", 1400 | "bitstream-io", 1401 | "built", 1402 | "cfg-if", 1403 | "interpolate_name", 1404 | "itertools", 1405 | "libc", 1406 | "libfuzzer-sys", 1407 | "log", 1408 | "maybe-rayon", 1409 | "new_debug_unreachable", 1410 | "noop_proc_macro", 1411 | "num-derive", 1412 | "num-traits", 1413 | "once_cell", 1414 | "paste", 1415 | "profiling", 1416 | "rand", 1417 | "rand_chacha", 1418 | "simd_helpers", 1419 | "system-deps", 1420 | "thiserror", 1421 | "v_frame", 1422 | "wasm-bindgen", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "ravif" 1427 | version = "0.11.11" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" 1430 | dependencies = [ 1431 | "avif-serialize", 1432 | "imgref", 1433 | "loop9", 1434 | "quick-error", 1435 | "rav1e", 1436 | "rayon", 1437 | "rgb", 1438 | ] 1439 | 1440 | [[package]] 1441 | name = "rayon" 1442 | version = "1.10.0" 1443 | source = "registry+https://github.com/rust-lang/crates.io-index" 1444 | checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" 1445 | dependencies = [ 1446 | "either", 1447 | "rayon-core", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "rayon-core" 1452 | version = "1.12.1" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" 1455 | dependencies = [ 1456 | "crossbeam-deque", 1457 | "crossbeam-utils", 1458 | ] 1459 | 1460 | [[package]] 1461 | name = "redox_syscall" 1462 | version = "0.5.8" 1463 | source = "registry+https://github.com/rust-lang/crates.io-index" 1464 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1465 | dependencies = [ 1466 | "bitflags 2.8.0", 1467 | ] 1468 | 1469 | [[package]] 1470 | name = "reqwest" 1471 | version = "0.12.12" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" 1474 | dependencies = [ 1475 | "base64", 1476 | "bytes", 1477 | "encoding_rs", 1478 | "futures-core", 1479 | "futures-util", 1480 | "h2", 1481 | "http", 1482 | "http-body", 1483 | "http-body-util", 1484 | "hyper", 1485 | "hyper-rustls", 1486 | "hyper-tls", 1487 | "hyper-util", 1488 | "ipnet", 1489 | "js-sys", 1490 | "log", 1491 | "mime", 1492 | "native-tls", 1493 | "once_cell", 1494 | "percent-encoding", 1495 | "pin-project-lite", 1496 | "rustls-pemfile", 1497 | "serde", 1498 | "serde_json", 1499 | "serde_urlencoded", 1500 | "sync_wrapper", 1501 | "system-configuration", 1502 | "tokio", 1503 | "tokio-native-tls", 1504 | "tower", 1505 | "tower-service", 1506 | "url", 1507 | "wasm-bindgen", 1508 | "wasm-bindgen-futures", 1509 | "web-sys", 1510 | "windows-registry", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "rgb" 1515 | version = "0.8.50" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" 1518 | 1519 | [[package]] 1520 | name = "ring" 1521 | version = "0.17.9" 1522 | source = "registry+https://github.com/rust-lang/crates.io-index" 1523 | checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" 1524 | dependencies = [ 1525 | "cc", 1526 | "cfg-if", 1527 | "getrandom 0.2.15", 1528 | "libc", 1529 | "untrusted", 1530 | "windows-sys 0.52.0", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "rustc-demangle" 1535 | version = "0.1.24" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1538 | 1539 | [[package]] 1540 | name = "rustix" 1541 | version = "0.38.44" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 1544 | dependencies = [ 1545 | "bitflags 2.8.0", 1546 | "errno", 1547 | "libc", 1548 | "linux-raw-sys", 1549 | "windows-sys 0.59.0", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "rustls" 1554 | version = "0.23.23" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" 1557 | dependencies = [ 1558 | "once_cell", 1559 | "rustls-pki-types", 1560 | "rustls-webpki", 1561 | "subtle", 1562 | "zeroize", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "rustls-pemfile" 1567 | version = "2.2.0" 1568 | source = "registry+https://github.com/rust-lang/crates.io-index" 1569 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 1570 | dependencies = [ 1571 | "rustls-pki-types", 1572 | ] 1573 | 1574 | [[package]] 1575 | name = "rustls-pki-types" 1576 | version = "1.11.0" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 1579 | 1580 | [[package]] 1581 | name = "rustls-webpki" 1582 | version = "0.102.8" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 1585 | dependencies = [ 1586 | "ring", 1587 | "rustls-pki-types", 1588 | "untrusted", 1589 | ] 1590 | 1591 | [[package]] 1592 | name = "rustversion" 1593 | version = "1.0.19" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" 1596 | 1597 | [[package]] 1598 | name = "ryu" 1599 | version = "1.0.19" 1600 | source = "registry+https://github.com/rust-lang/crates.io-index" 1601 | checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" 1602 | 1603 | [[package]] 1604 | name = "schannel" 1605 | version = "0.1.27" 1606 | source = "registry+https://github.com/rust-lang/crates.io-index" 1607 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 1608 | dependencies = [ 1609 | "windows-sys 0.59.0", 1610 | ] 1611 | 1612 | [[package]] 1613 | name = "scopeguard" 1614 | version = "1.2.0" 1615 | source = "registry+https://github.com/rust-lang/crates.io-index" 1616 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1617 | 1618 | [[package]] 1619 | name = "security-framework" 1620 | version = "2.11.1" 1621 | source = "registry+https://github.com/rust-lang/crates.io-index" 1622 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 1623 | dependencies = [ 1624 | "bitflags 2.8.0", 1625 | "core-foundation", 1626 | "core-foundation-sys", 1627 | "libc", 1628 | "security-framework-sys", 1629 | ] 1630 | 1631 | [[package]] 1632 | name = "security-framework-sys" 1633 | version = "2.14.0" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 1636 | dependencies = [ 1637 | "core-foundation-sys", 1638 | "libc", 1639 | ] 1640 | 1641 | [[package]] 1642 | name = "serde" 1643 | version = "1.0.218" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" 1646 | dependencies = [ 1647 | "serde_derive", 1648 | ] 1649 | 1650 | [[package]] 1651 | name = "serde_derive" 1652 | version = "1.0.218" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" 1655 | dependencies = [ 1656 | "proc-macro2", 1657 | "quote", 1658 | "syn", 1659 | ] 1660 | 1661 | [[package]] 1662 | name = "serde_json" 1663 | version = "1.0.139" 1664 | source = "registry+https://github.com/rust-lang/crates.io-index" 1665 | checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" 1666 | dependencies = [ 1667 | "itoa", 1668 | "memchr", 1669 | "ryu", 1670 | "serde", 1671 | ] 1672 | 1673 | [[package]] 1674 | name = "serde_spanned" 1675 | version = "0.6.8" 1676 | source = "registry+https://github.com/rust-lang/crates.io-index" 1677 | checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 1678 | dependencies = [ 1679 | "serde", 1680 | ] 1681 | 1682 | [[package]] 1683 | name = "serde_urlencoded" 1684 | version = "0.7.1" 1685 | source = "registry+https://github.com/rust-lang/crates.io-index" 1686 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1687 | dependencies = [ 1688 | "form_urlencoded", 1689 | "itoa", 1690 | "ryu", 1691 | "serde", 1692 | ] 1693 | 1694 | [[package]] 1695 | name = "serde_yaml" 1696 | version = "0.9.34+deprecated" 1697 | source = "registry+https://github.com/rust-lang/crates.io-index" 1698 | checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" 1699 | dependencies = [ 1700 | "indexmap", 1701 | "itoa", 1702 | "ryu", 1703 | "serde", 1704 | "unsafe-libyaml", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "shlex" 1709 | version = "1.3.0" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1712 | 1713 | [[package]] 1714 | name = "signal-hook-registry" 1715 | version = "1.4.2" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1718 | dependencies = [ 1719 | "libc", 1720 | ] 1721 | 1722 | [[package]] 1723 | name = "simd-adler32" 1724 | version = "0.3.7" 1725 | source = "registry+https://github.com/rust-lang/crates.io-index" 1726 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" 1727 | 1728 | [[package]] 1729 | name = "simd_helpers" 1730 | version = "0.1.0" 1731 | source = "registry+https://github.com/rust-lang/crates.io-index" 1732 | checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" 1733 | dependencies = [ 1734 | "quote", 1735 | ] 1736 | 1737 | [[package]] 1738 | name = "slab" 1739 | version = "0.4.9" 1740 | source = "registry+https://github.com/rust-lang/crates.io-index" 1741 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1742 | dependencies = [ 1743 | "autocfg", 1744 | ] 1745 | 1746 | [[package]] 1747 | name = "smallvec" 1748 | version = "1.14.0" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" 1751 | 1752 | [[package]] 1753 | name = "socket2" 1754 | version = "0.5.8" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 1757 | dependencies = [ 1758 | "libc", 1759 | "windows-sys 0.52.0", 1760 | ] 1761 | 1762 | [[package]] 1763 | name = "stable_deref_trait" 1764 | version = "1.2.0" 1765 | source = "registry+https://github.com/rust-lang/crates.io-index" 1766 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1767 | 1768 | [[package]] 1769 | name = "strsim" 1770 | version = "0.11.1" 1771 | source = "registry+https://github.com/rust-lang/crates.io-index" 1772 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 1773 | 1774 | [[package]] 1775 | name = "subtle" 1776 | version = "2.6.1" 1777 | source = "registry+https://github.com/rust-lang/crates.io-index" 1778 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1779 | 1780 | [[package]] 1781 | name = "syn" 1782 | version = "2.0.98" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" 1785 | dependencies = [ 1786 | "proc-macro2", 1787 | "quote", 1788 | "unicode-ident", 1789 | ] 1790 | 1791 | [[package]] 1792 | name = "sync_wrapper" 1793 | version = "1.0.2" 1794 | source = "registry+https://github.com/rust-lang/crates.io-index" 1795 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1796 | dependencies = [ 1797 | "futures-core", 1798 | ] 1799 | 1800 | [[package]] 1801 | name = "synstructure" 1802 | version = "0.13.1" 1803 | source = "registry+https://github.com/rust-lang/crates.io-index" 1804 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 1805 | dependencies = [ 1806 | "proc-macro2", 1807 | "quote", 1808 | "syn", 1809 | ] 1810 | 1811 | [[package]] 1812 | name = "system-configuration" 1813 | version = "0.6.1" 1814 | source = "registry+https://github.com/rust-lang/crates.io-index" 1815 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 1816 | dependencies = [ 1817 | "bitflags 2.8.0", 1818 | "core-foundation", 1819 | "system-configuration-sys", 1820 | ] 1821 | 1822 | [[package]] 1823 | name = "system-configuration-sys" 1824 | version = "0.6.0" 1825 | source = "registry+https://github.com/rust-lang/crates.io-index" 1826 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 1827 | dependencies = [ 1828 | "core-foundation-sys", 1829 | "libc", 1830 | ] 1831 | 1832 | [[package]] 1833 | name = "system-deps" 1834 | version = "6.2.2" 1835 | source = "registry+https://github.com/rust-lang/crates.io-index" 1836 | checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" 1837 | dependencies = [ 1838 | "cfg-expr", 1839 | "heck", 1840 | "pkg-config", 1841 | "toml", 1842 | "version-compare", 1843 | ] 1844 | 1845 | [[package]] 1846 | name = "target-lexicon" 1847 | version = "0.12.16" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" 1850 | 1851 | [[package]] 1852 | name = "tempfile" 1853 | version = "3.17.1" 1854 | source = "registry+https://github.com/rust-lang/crates.io-index" 1855 | checksum = "22e5a0acb1f3f55f65cc4a866c361b2fb2a0ff6366785ae6fbb5f85df07ba230" 1856 | dependencies = [ 1857 | "cfg-if", 1858 | "fastrand", 1859 | "getrandom 0.3.1", 1860 | "once_cell", 1861 | "rustix", 1862 | "windows-sys 0.59.0", 1863 | ] 1864 | 1865 | [[package]] 1866 | name = "thiserror" 1867 | version = "1.0.69" 1868 | source = "registry+https://github.com/rust-lang/crates.io-index" 1869 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 1870 | dependencies = [ 1871 | "thiserror-impl", 1872 | ] 1873 | 1874 | [[package]] 1875 | name = "thiserror-impl" 1876 | version = "1.0.69" 1877 | source = "registry+https://github.com/rust-lang/crates.io-index" 1878 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 1879 | dependencies = [ 1880 | "proc-macro2", 1881 | "quote", 1882 | "syn", 1883 | ] 1884 | 1885 | [[package]] 1886 | name = "tiff" 1887 | version = "0.9.1" 1888 | source = "registry+https://github.com/rust-lang/crates.io-index" 1889 | checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e" 1890 | dependencies = [ 1891 | "flate2", 1892 | "jpeg-decoder", 1893 | "weezl", 1894 | ] 1895 | 1896 | [[package]] 1897 | name = "tinystr" 1898 | version = "0.7.6" 1899 | source = "registry+https://github.com/rust-lang/crates.io-index" 1900 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1901 | dependencies = [ 1902 | "displaydoc", 1903 | "zerovec", 1904 | ] 1905 | 1906 | [[package]] 1907 | name = "tokio" 1908 | version = "1.43.0" 1909 | source = "registry+https://github.com/rust-lang/crates.io-index" 1910 | checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" 1911 | dependencies = [ 1912 | "backtrace", 1913 | "bytes", 1914 | "libc", 1915 | "mio", 1916 | "parking_lot", 1917 | "pin-project-lite", 1918 | "signal-hook-registry", 1919 | "socket2", 1920 | "tokio-macros", 1921 | "windows-sys 0.52.0", 1922 | ] 1923 | 1924 | [[package]] 1925 | name = "tokio-macros" 1926 | version = "2.5.0" 1927 | source = "registry+https://github.com/rust-lang/crates.io-index" 1928 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1929 | dependencies = [ 1930 | "proc-macro2", 1931 | "quote", 1932 | "syn", 1933 | ] 1934 | 1935 | [[package]] 1936 | name = "tokio-native-tls" 1937 | version = "0.3.1" 1938 | source = "registry+https://github.com/rust-lang/crates.io-index" 1939 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 1940 | dependencies = [ 1941 | "native-tls", 1942 | "tokio", 1943 | ] 1944 | 1945 | [[package]] 1946 | name = "tokio-rustls" 1947 | version = "0.26.1" 1948 | source = "registry+https://github.com/rust-lang/crates.io-index" 1949 | checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" 1950 | dependencies = [ 1951 | "rustls", 1952 | "tokio", 1953 | ] 1954 | 1955 | [[package]] 1956 | name = "tokio-util" 1957 | version = "0.7.13" 1958 | source = "registry+https://github.com/rust-lang/crates.io-index" 1959 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 1960 | dependencies = [ 1961 | "bytes", 1962 | "futures-core", 1963 | "futures-sink", 1964 | "pin-project-lite", 1965 | "tokio", 1966 | ] 1967 | 1968 | [[package]] 1969 | name = "toml" 1970 | version = "0.8.20" 1971 | source = "registry+https://github.com/rust-lang/crates.io-index" 1972 | checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" 1973 | dependencies = [ 1974 | "serde", 1975 | "serde_spanned", 1976 | "toml_datetime", 1977 | "toml_edit", 1978 | ] 1979 | 1980 | [[package]] 1981 | name = "toml_datetime" 1982 | version = "0.6.8" 1983 | source = "registry+https://github.com/rust-lang/crates.io-index" 1984 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 1985 | dependencies = [ 1986 | "serde", 1987 | ] 1988 | 1989 | [[package]] 1990 | name = "toml_edit" 1991 | version = "0.22.24" 1992 | source = "registry+https://github.com/rust-lang/crates.io-index" 1993 | checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" 1994 | dependencies = [ 1995 | "indexmap", 1996 | "serde", 1997 | "serde_spanned", 1998 | "toml_datetime", 1999 | "winnow", 2000 | ] 2001 | 2002 | [[package]] 2003 | name = "tower" 2004 | version = "0.5.2" 2005 | source = "registry+https://github.com/rust-lang/crates.io-index" 2006 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 2007 | dependencies = [ 2008 | "futures-core", 2009 | "futures-util", 2010 | "pin-project-lite", 2011 | "sync_wrapper", 2012 | "tokio", 2013 | "tower-layer", 2014 | "tower-service", 2015 | ] 2016 | 2017 | [[package]] 2018 | name = "tower-layer" 2019 | version = "0.3.3" 2020 | source = "registry+https://github.com/rust-lang/crates.io-index" 2021 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 2022 | 2023 | [[package]] 2024 | name = "tower-service" 2025 | version = "0.3.3" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2028 | 2029 | [[package]] 2030 | name = "tracing" 2031 | version = "0.1.41" 2032 | source = "registry+https://github.com/rust-lang/crates.io-index" 2033 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2034 | dependencies = [ 2035 | "pin-project-lite", 2036 | "tracing-core", 2037 | ] 2038 | 2039 | [[package]] 2040 | name = "tracing-core" 2041 | version = "0.1.33" 2042 | source = "registry+https://github.com/rust-lang/crates.io-index" 2043 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2044 | dependencies = [ 2045 | "once_cell", 2046 | ] 2047 | 2048 | [[package]] 2049 | name = "try-lock" 2050 | version = "0.2.5" 2051 | source = "registry+https://github.com/rust-lang/crates.io-index" 2052 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2053 | 2054 | [[package]] 2055 | name = "unicode-ident" 2056 | version = "1.0.17" 2057 | source = "registry+https://github.com/rust-lang/crates.io-index" 2058 | checksum = "00e2473a93778eb0bad35909dff6a10d28e63f792f16ed15e404fca9d5eeedbe" 2059 | 2060 | [[package]] 2061 | name = "unsafe-libyaml" 2062 | version = "0.2.11" 2063 | source = "registry+https://github.com/rust-lang/crates.io-index" 2064 | checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" 2065 | 2066 | [[package]] 2067 | name = "untrusted" 2068 | version = "0.9.0" 2069 | source = "registry+https://github.com/rust-lang/crates.io-index" 2070 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2071 | 2072 | [[package]] 2073 | name = "url" 2074 | version = "2.5.4" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2077 | dependencies = [ 2078 | "form_urlencoded", 2079 | "idna", 2080 | "percent-encoding", 2081 | ] 2082 | 2083 | [[package]] 2084 | name = "urlencoding" 2085 | version = "2.1.3" 2086 | source = "registry+https://github.com/rust-lang/crates.io-index" 2087 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 2088 | 2089 | [[package]] 2090 | name = "utf16_iter" 2091 | version = "1.0.5" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2094 | 2095 | [[package]] 2096 | name = "utf8_iter" 2097 | version = "1.0.4" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2100 | 2101 | [[package]] 2102 | name = "utf8parse" 2103 | version = "0.2.2" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2106 | 2107 | [[package]] 2108 | name = "v_frame" 2109 | version = "0.3.8" 2110 | source = "registry+https://github.com/rust-lang/crates.io-index" 2111 | checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b" 2112 | dependencies = [ 2113 | "aligned-vec", 2114 | "num-traits", 2115 | "wasm-bindgen", 2116 | ] 2117 | 2118 | [[package]] 2119 | name = "vcpkg" 2120 | version = "0.2.15" 2121 | source = "registry+https://github.com/rust-lang/crates.io-index" 2122 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2123 | 2124 | [[package]] 2125 | name = "version-compare" 2126 | version = "0.2.0" 2127 | source = "registry+https://github.com/rust-lang/crates.io-index" 2128 | checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" 2129 | 2130 | [[package]] 2131 | name = "want" 2132 | version = "0.3.1" 2133 | source = "registry+https://github.com/rust-lang/crates.io-index" 2134 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2135 | dependencies = [ 2136 | "try-lock", 2137 | ] 2138 | 2139 | [[package]] 2140 | name = "wasi" 2141 | version = "0.11.0+wasi-snapshot-preview1" 2142 | source = "registry+https://github.com/rust-lang/crates.io-index" 2143 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2144 | 2145 | [[package]] 2146 | name = "wasi" 2147 | version = "0.13.3+wasi-0.2.2" 2148 | source = "registry+https://github.com/rust-lang/crates.io-index" 2149 | checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" 2150 | dependencies = [ 2151 | "wit-bindgen-rt", 2152 | ] 2153 | 2154 | [[package]] 2155 | name = "wasm-bindgen" 2156 | version = "0.2.100" 2157 | source = "registry+https://github.com/rust-lang/crates.io-index" 2158 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2159 | dependencies = [ 2160 | "cfg-if", 2161 | "once_cell", 2162 | "rustversion", 2163 | "wasm-bindgen-macro", 2164 | ] 2165 | 2166 | [[package]] 2167 | name = "wasm-bindgen-backend" 2168 | version = "0.2.100" 2169 | source = "registry+https://github.com/rust-lang/crates.io-index" 2170 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2171 | dependencies = [ 2172 | "bumpalo", 2173 | "log", 2174 | "proc-macro2", 2175 | "quote", 2176 | "syn", 2177 | "wasm-bindgen-shared", 2178 | ] 2179 | 2180 | [[package]] 2181 | name = "wasm-bindgen-futures" 2182 | version = "0.4.50" 2183 | source = "registry+https://github.com/rust-lang/crates.io-index" 2184 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2185 | dependencies = [ 2186 | "cfg-if", 2187 | "js-sys", 2188 | "once_cell", 2189 | "wasm-bindgen", 2190 | "web-sys", 2191 | ] 2192 | 2193 | [[package]] 2194 | name = "wasm-bindgen-macro" 2195 | version = "0.2.100" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2198 | dependencies = [ 2199 | "quote", 2200 | "wasm-bindgen-macro-support", 2201 | ] 2202 | 2203 | [[package]] 2204 | name = "wasm-bindgen-macro-support" 2205 | version = "0.2.100" 2206 | source = "registry+https://github.com/rust-lang/crates.io-index" 2207 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2208 | dependencies = [ 2209 | "proc-macro2", 2210 | "quote", 2211 | "syn", 2212 | "wasm-bindgen-backend", 2213 | "wasm-bindgen-shared", 2214 | ] 2215 | 2216 | [[package]] 2217 | name = "wasm-bindgen-shared" 2218 | version = "0.2.100" 2219 | source = "registry+https://github.com/rust-lang/crates.io-index" 2220 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2221 | dependencies = [ 2222 | "unicode-ident", 2223 | ] 2224 | 2225 | [[package]] 2226 | name = "web-sys" 2227 | version = "0.3.77" 2228 | source = "registry+https://github.com/rust-lang/crates.io-index" 2229 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 2230 | dependencies = [ 2231 | "js-sys", 2232 | "wasm-bindgen", 2233 | ] 2234 | 2235 | [[package]] 2236 | name = "weezl" 2237 | version = "0.1.8" 2238 | source = "registry+https://github.com/rust-lang/crates.io-index" 2239 | checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" 2240 | 2241 | [[package]] 2242 | name = "windows-registry" 2243 | version = "0.2.0" 2244 | source = "registry+https://github.com/rust-lang/crates.io-index" 2245 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 2246 | dependencies = [ 2247 | "windows-result", 2248 | "windows-strings", 2249 | "windows-targets", 2250 | ] 2251 | 2252 | [[package]] 2253 | name = "windows-result" 2254 | version = "0.2.0" 2255 | source = "registry+https://github.com/rust-lang/crates.io-index" 2256 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 2257 | dependencies = [ 2258 | "windows-targets", 2259 | ] 2260 | 2261 | [[package]] 2262 | name = "windows-strings" 2263 | version = "0.1.0" 2264 | source = "registry+https://github.com/rust-lang/crates.io-index" 2265 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 2266 | dependencies = [ 2267 | "windows-result", 2268 | "windows-targets", 2269 | ] 2270 | 2271 | [[package]] 2272 | name = "windows-sys" 2273 | version = "0.52.0" 2274 | source = "registry+https://github.com/rust-lang/crates.io-index" 2275 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2276 | dependencies = [ 2277 | "windows-targets", 2278 | ] 2279 | 2280 | [[package]] 2281 | name = "windows-sys" 2282 | version = "0.59.0" 2283 | source = "registry+https://github.com/rust-lang/crates.io-index" 2284 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2285 | dependencies = [ 2286 | "windows-targets", 2287 | ] 2288 | 2289 | [[package]] 2290 | name = "windows-targets" 2291 | version = "0.52.6" 2292 | source = "registry+https://github.com/rust-lang/crates.io-index" 2293 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2294 | dependencies = [ 2295 | "windows_aarch64_gnullvm", 2296 | "windows_aarch64_msvc", 2297 | "windows_i686_gnu", 2298 | "windows_i686_gnullvm", 2299 | "windows_i686_msvc", 2300 | "windows_x86_64_gnu", 2301 | "windows_x86_64_gnullvm", 2302 | "windows_x86_64_msvc", 2303 | ] 2304 | 2305 | [[package]] 2306 | name = "windows_aarch64_gnullvm" 2307 | version = "0.52.6" 2308 | source = "registry+https://github.com/rust-lang/crates.io-index" 2309 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2310 | 2311 | [[package]] 2312 | name = "windows_aarch64_msvc" 2313 | version = "0.52.6" 2314 | source = "registry+https://github.com/rust-lang/crates.io-index" 2315 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2316 | 2317 | [[package]] 2318 | name = "windows_i686_gnu" 2319 | version = "0.52.6" 2320 | source = "registry+https://github.com/rust-lang/crates.io-index" 2321 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2322 | 2323 | [[package]] 2324 | name = "windows_i686_gnullvm" 2325 | version = "0.52.6" 2326 | source = "registry+https://github.com/rust-lang/crates.io-index" 2327 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2328 | 2329 | [[package]] 2330 | name = "windows_i686_msvc" 2331 | version = "0.52.6" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2334 | 2335 | [[package]] 2336 | name = "windows_x86_64_gnu" 2337 | version = "0.52.6" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2340 | 2341 | [[package]] 2342 | name = "windows_x86_64_gnullvm" 2343 | version = "0.52.6" 2344 | source = "registry+https://github.com/rust-lang/crates.io-index" 2345 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2346 | 2347 | [[package]] 2348 | name = "windows_x86_64_msvc" 2349 | version = "0.52.6" 2350 | source = "registry+https://github.com/rust-lang/crates.io-index" 2351 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2352 | 2353 | [[package]] 2354 | name = "winnow" 2355 | version = "0.7.3" 2356 | source = "registry+https://github.com/rust-lang/crates.io-index" 2357 | checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" 2358 | dependencies = [ 2359 | "memchr", 2360 | ] 2361 | 2362 | [[package]] 2363 | name = "wit-bindgen-rt" 2364 | version = "0.33.0" 2365 | source = "registry+https://github.com/rust-lang/crates.io-index" 2366 | checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" 2367 | dependencies = [ 2368 | "bitflags 2.8.0", 2369 | ] 2370 | 2371 | [[package]] 2372 | name = "write16" 2373 | version = "1.0.0" 2374 | source = "registry+https://github.com/rust-lang/crates.io-index" 2375 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2376 | 2377 | [[package]] 2378 | name = "writeable" 2379 | version = "0.5.5" 2380 | source = "registry+https://github.com/rust-lang/crates.io-index" 2381 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2382 | 2383 | [[package]] 2384 | name = "yoke" 2385 | version = "0.7.5" 2386 | source = "registry+https://github.com/rust-lang/crates.io-index" 2387 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2388 | dependencies = [ 2389 | "serde", 2390 | "stable_deref_trait", 2391 | "yoke-derive", 2392 | "zerofrom", 2393 | ] 2394 | 2395 | [[package]] 2396 | name = "yoke-derive" 2397 | version = "0.7.5" 2398 | source = "registry+https://github.com/rust-lang/crates.io-index" 2399 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2400 | dependencies = [ 2401 | "proc-macro2", 2402 | "quote", 2403 | "syn", 2404 | "synstructure", 2405 | ] 2406 | 2407 | [[package]] 2408 | name = "zerocopy" 2409 | version = "0.7.35" 2410 | source = "registry+https://github.com/rust-lang/crates.io-index" 2411 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2412 | dependencies = [ 2413 | "byteorder", 2414 | "zerocopy-derive", 2415 | ] 2416 | 2417 | [[package]] 2418 | name = "zerocopy-derive" 2419 | version = "0.7.35" 2420 | source = "registry+https://github.com/rust-lang/crates.io-index" 2421 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2422 | dependencies = [ 2423 | "proc-macro2", 2424 | "quote", 2425 | "syn", 2426 | ] 2427 | 2428 | [[package]] 2429 | name = "zerofrom" 2430 | version = "0.1.5" 2431 | source = "registry+https://github.com/rust-lang/crates.io-index" 2432 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 2433 | dependencies = [ 2434 | "zerofrom-derive", 2435 | ] 2436 | 2437 | [[package]] 2438 | name = "zerofrom-derive" 2439 | version = "0.1.5" 2440 | source = "registry+https://github.com/rust-lang/crates.io-index" 2441 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 2442 | dependencies = [ 2443 | "proc-macro2", 2444 | "quote", 2445 | "syn", 2446 | "synstructure", 2447 | ] 2448 | 2449 | [[package]] 2450 | name = "zeroize" 2451 | version = "1.8.1" 2452 | source = "registry+https://github.com/rust-lang/crates.io-index" 2453 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2454 | 2455 | [[package]] 2456 | name = "zerovec" 2457 | version = "0.10.4" 2458 | source = "registry+https://github.com/rust-lang/crates.io-index" 2459 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2460 | dependencies = [ 2461 | "yoke", 2462 | "zerofrom", 2463 | "zerovec-derive", 2464 | ] 2465 | 2466 | [[package]] 2467 | name = "zerovec-derive" 2468 | version = "0.10.3" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2471 | dependencies = [ 2472 | "proc-macro2", 2473 | "quote", 2474 | "syn", 2475 | ] 2476 | 2477 | [[package]] 2478 | name = "zune-core" 2479 | version = "0.4.12" 2480 | source = "registry+https://github.com/rust-lang/crates.io-index" 2481 | checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" 2482 | 2483 | [[package]] 2484 | name = "zune-inflate" 2485 | version = "0.2.54" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" 2488 | dependencies = [ 2489 | "simd-adler32", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "zune-jpeg" 2494 | version = "0.4.14" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028" 2497 | dependencies = [ 2498 | "zune-core", 2499 | ] 2500 | --------------------------------------------------------------------------------