├── src ├── commands │ ├── fun │ │ ├── mod.rs │ │ └── xkcd.rs │ ├── search │ │ ├── mod.rs │ │ └── tmdb │ │ │ └── mod.rs │ ├── mod.rs │ └── utilities │ │ └── mod.rs ├── listeners │ ├── mod.rs │ └── handler.rs ├── constants.rs ├── models │ ├── mod.rs │ └── tmdb │ │ └── mod.rs ├── utils │ ├── mod.rs │ └── locale.rs ├── config.rs └── main.rs ├── .gitignore ├── CHANGELOG.md ├── rustfmt.toml ├── .markdownlint.json ├── .github └── workflows │ ├── audit-project.yml │ └── check-project.yml ├── config.sample.toml ├── LICENSE.md ├── Cargo.toml ├── CODE_OF_CONDUCT.md ├── README.md └── Cargo.lock /src/commands/fun/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod xkcd; 2 | -------------------------------------------------------------------------------- /src/listeners/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod handler; 2 | -------------------------------------------------------------------------------- /src/commands/search/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod tmdb; 2 | -------------------------------------------------------------------------------- /src/commands/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod fun; 2 | pub mod search; 3 | pub mod utilities; 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | *.sqlite3 3 | *config.toml 4 | .spotify_token_cache.json 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evieluvsrainbows/Taliyah/HEAD/CHANGELOG.md -------------------------------------------------------------------------------- /src/constants.rs: -------------------------------------------------------------------------------- 1 | /// The user agent used for the reqwest client. 2 | pub const REQWEST_USER_AGENT: &str = concat!(env!("CARGO_PKG_NAME"), "/", env!("CARGO_PKG_VERSION")); 3 | -------------------------------------------------------------------------------- /rustfmt.toml: -------------------------------------------------------------------------------- 1 | # Enable the use of unstable features. 2 | unstable_features = true 3 | 4 | # Width formatting options 5 | max_width = 190 6 | 7 | # General formatting options 8 | trailing_comma = "Never" 9 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": true, 3 | "line-length": { 4 | "line_length": 120 5 | }, 6 | "no-inline-html": false, 7 | "no-duplicate-heading": { 8 | "allow_different_nesting": true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/models/mod.rs: -------------------------------------------------------------------------------- 1 | use serde::Deserialize; 2 | 3 | pub mod tmdb; 4 | 5 | #[derive(Deserialize)] 6 | pub struct Comic { 7 | pub num: u16, // the numeric ID of the xkcd comic. 8 | pub alt: String, // the caption of the xkcd comic. 9 | pub img: String, // the image URL of the xkcd comic. 10 | pub title: String // the title of the xkcd comic. 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/audit-project.yml: -------------------------------------------------------------------------------- 1 | name: Audit Project 2 | on: 3 | push: 4 | paths: 5 | - '**/Cargo.toml' 6 | - '**/Cargo.lock' 7 | jobs: 8 | security_audit: 9 | name: Run security audit 10 | runs-on: ubuntu-24.04 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: actions-rs/audit-check@v1 14 | with: 15 | token: ${{ secrets.GITHUB_TOKEN }} # this token is only exposed to GitHub Workflows 16 | -------------------------------------------------------------------------------- /config.sample.toml: -------------------------------------------------------------------------------- 1 | [bot] 2 | 3 | [bot.general] 4 | codename = "Carbon" 5 | 6 | [bot.discord] 7 | appid = "" # replace with unquoted integer 8 | token = "" 9 | 10 | [bot.denylist] 11 | # The denylist for the Spotify commands. Anyone who is in this list 12 | # are unable to have their now playing status checked and/or retrieved. 13 | [bot.denylist.spotify] 14 | ids = [ ] 15 | 16 | [bot.logging] 17 | enabled = true 18 | level = "info" 19 | 20 | [api] 21 | 22 | [api.music] 23 | 24 | [api.music.spotify] 25 | client_id = "" 26 | client_secret = "" 27 | 28 | [api.music.lastfm] 29 | api_key = "" 30 | 31 | [api.entertainment] 32 | tmdb = "" 33 | 34 | [api.services] 35 | github = "" 36 | google = "" 37 | -------------------------------------------------------------------------------- /src/utils/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod locale; 2 | 3 | use crate::config::ConfigurationData; 4 | use std::{fs::File, io::Read}; 5 | 6 | pub fn read_config(file: &str) -> ConfigurationData { 7 | let mut file = File::open(file).unwrap(); 8 | let mut contents = String::new(); 9 | file.read_to_string(&mut contents).unwrap(); 10 | toml::from_str::(&contents).unwrap() 11 | } 12 | 13 | pub fn format_int(int: u64) -> String { 14 | let mut string = String::new(); 15 | for (idx, val) in int.to_string().chars().rev().enumerate() { 16 | if idx != 0 && idx % 3 == 0 { 17 | string.insert(0, ','); 18 | } 19 | string.insert(0, val); 20 | } 21 | string 22 | } 23 | 24 | pub fn calculate_average_sum(ints: &[i64]) -> f64 { 25 | ints.iter().sum::() as f64 / ints.len() as f64 26 | } 27 | -------------------------------------------------------------------------------- /src/commands/utilities/mod.rs: -------------------------------------------------------------------------------- 1 | use crate::{Context, Error}; 2 | 3 | /// Shows the help menu. 4 | #[poise::command(slash_command, track_edits)] 5 | pub async fn help(context: Context<'_>, #[description = "Specific command to show help about"] command: Option) -> Result<(), Error> { 6 | let config = poise::builtins::HelpConfiguration { ..Default::default() }; 7 | poise::builtins::help(context, command.as_deref(), config).await?; 8 | Ok(()) 9 | } 10 | 11 | /// Says hello to the user who initializes the command. 12 | #[poise::command(slash_command)] 13 | pub async fn hello(context: Context<'_>) -> Result<(), Error> { 14 | context.say(format!("Hello, **{}**!", context.author().name)).await?; 15 | Ok(()) 16 | } 17 | 18 | /// Posts a message containing a link to the bot's source code on GitHub. 19 | #[poise::command(slash_command)] 20 | pub async fn source(context: Context<'_>) -> Result<(), Error> { 21 | context.reply("GitHub repository: ").await?; 22 | Ok(()) 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Copyright (c) 2019-present Evelyn Harthbrooke 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/listeners/handler.rs: -------------------------------------------------------------------------------- 1 | use serenity::{ 2 | all::{ActivityData, Context, EventHandler, OnlineStatus, Ready}, 3 | async_trait 4 | }; 5 | use tracing::info; 6 | 7 | pub struct Handler; 8 | 9 | #[async_trait] 10 | impl EventHandler for Handler { 11 | async fn ready(&self, context: Context, ready: Ready) { 12 | let http = &context.http; 13 | 14 | let version = ready.version; 15 | let gateway = http.get_bot_gateway().await.unwrap(); 16 | let owner = http.get_current_application_info().await.unwrap().owner.expect("Could not get owner!"); 17 | let total = gateway.session_start_limit.total; 18 | let remaining = gateway.session_start_limit.remaining; 19 | 20 | info!("Successfully logged into the Discord API as the following user:"); 21 | info!("Bot details: {} (User ID: {})", ready.user.tag(), ready.user.id); 22 | info!("Bot owner: {} (User ID: {})", owner.tag(), owner.id.to_string()); 23 | 24 | let guilds = ready.guilds.len(); 25 | 26 | info!("Connected to the Discord API (version {version}) with {remaining}/{total} sessions remaining."); 27 | info!("Connected to and serving a total of {guilds} guild(s)."); 28 | 29 | context.set_presence(Some(ActivityData::playing(format!("on {guilds} guilds"))), OnlineStatus::Online); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /.github/workflows/check-project.yml: -------------------------------------------------------------------------------- 1 | name: Check Project 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | check: 6 | name: Cargo Check 7 | strategy: 8 | matrix: 9 | os: [ubuntu-24.04, macos-latest, windows-latest] 10 | runs-on: ${{ matrix.os }} 11 | steps: 12 | - name: Checkout sources 13 | uses: actions/checkout@v4 14 | 15 | - name: Install Nightly toolchain 16 | uses: actions-rs/toolchain@v1 17 | with: 18 | profile: minimal 19 | toolchain: nightly 20 | override: true 21 | 22 | - name: Run cargo check 23 | uses: actions-rs/cargo@v1 24 | with: 25 | command: check 26 | 27 | lints: 28 | name: Check lints 29 | runs-on: ubuntu-24.04 30 | steps: 31 | - name: Checkout sources 32 | uses: actions/checkout@v4 33 | 34 | - name: Install Nightly toolchain 35 | uses: actions-rs/toolchain@v1 36 | with: 37 | profile: minimal 38 | toolchain: nightly 39 | override: true 40 | components: rustfmt, clippy 41 | 42 | - name: Run cargo fmt 43 | uses: actions-rs/cargo@v1 44 | with: 45 | command: fmt 46 | args: --all -- --check 47 | 48 | - name: Run cargo clippy 49 | uses: actions-rs/cargo@v1 50 | with: 51 | command: clippy 52 | args: -- -D warnings 53 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "taliyah" 3 | version = "0.7.0-alpha" 4 | authors = ["evieluvsrainbows"] 5 | description = "A Discord bot written in Rust with Serenity." 6 | homepage = "https://github.com/evieluvsrainbows/taliyah" 7 | repository = "https://github.com/evieluvsrainbows/taliyah.git" 8 | keywords = ["discord", "discord-api", "bot", "serenity"] 9 | edition = "2021" 10 | license = "MIT" 11 | readme = "README.md" 12 | include = ["src/**/*", "config.sample.toml", "Cargo.toml", "README.md"] 13 | 14 | [dependencies] 15 | anyhow = "1.0.86" 16 | byte-unit = "5.1.4" 17 | chrono = "0.4.38" 18 | humantime = "2.1.0" 19 | itertools = "0.13.0" 20 | poise = "0.6.1" 21 | rand = "0.8.5" 22 | reqwest = { version = "0.12.5", default-features = false, features = ["json", "multipart", "stream", "rustls-tls"]} 23 | rspotify = "0.13.2" 24 | serenity = "0.12.2" 25 | serde = { version = "1.0.208", features = ["derive"] } 26 | serde_json = "1.0.125" 27 | tokio = { version = "1.39.3", features = ["full"] } 28 | toml = "0.8.19" 29 | tracing = "0.1.40" 30 | tracing-futures = "0.2.5" 31 | tracing-log = "0.2.0" 32 | tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } 33 | -------------------------------------------------------------------------------- /src/config.rs: -------------------------------------------------------------------------------- 1 | use serde::Deserialize; 2 | 3 | #[derive(Deserialize)] 4 | pub struct ConfigurationData { 5 | pub bot: BotConfig, 6 | pub api: ApiConfig 7 | } 8 | 9 | #[derive(Deserialize)] 10 | pub struct BotConfig { 11 | pub general: GeneralConfig, 12 | pub discord: DiscordConfig, 13 | pub denylist: DenylistConfig, 14 | pub logging: LoggingConfig 15 | } 16 | 17 | #[derive(Deserialize)] 18 | pub struct GeneralConfig { 19 | pub codename: String 20 | } 21 | 22 | #[derive(Deserialize)] 23 | pub struct LoggingConfig { 24 | pub enabled: bool, 25 | pub level: String 26 | } 27 | 28 | #[derive(Deserialize)] 29 | pub struct DiscordConfig { 30 | pub appid: u64, 31 | pub token: String 32 | } 33 | 34 | #[derive(Deserialize)] 35 | pub struct DenylistConfig { 36 | pub spotify: DenylistSpotifyConfig 37 | } 38 | 39 | #[derive(Deserialize)] 40 | pub struct DenylistSpotifyConfig { 41 | pub ids: Vec 42 | } 43 | 44 | #[derive(Deserialize)] 45 | pub struct ApiConfig { 46 | pub entertainment: EntertainmentConfig, 47 | pub music: MusicConfig, 48 | pub services: ServicesConfig 49 | } 50 | 51 | #[derive(Deserialize)] 52 | pub struct EntertainmentConfig { 53 | pub tmdb: String 54 | } 55 | 56 | #[derive(Deserialize)] 57 | pub struct MusicConfig { 58 | pub spotify: SpotifyConfig, 59 | pub lastfm: LastFmConfig 60 | } 61 | 62 | #[derive(Deserialize)] 63 | pub struct ServicesConfig { 64 | pub github: String, 65 | pub google: String 66 | } 67 | 68 | #[derive(Deserialize)] 69 | pub struct SpotifyConfig { 70 | pub client_id: String, 71 | pub client_secret: String 72 | } 73 | 74 | #[derive(Deserialize)] 75 | pub struct LastFmConfig { 76 | pub api_key: String 77 | } 78 | -------------------------------------------------------------------------------- /src/commands/fun/xkcd.rs: -------------------------------------------------------------------------------- 1 | use crate::{models::Comic, Context, Error}; 2 | use poise::CreateReply; 3 | use rand::Rng; 4 | use reqwest::StatusCode; 5 | use serenity::all::{CreateActionRow, CreateButton, CreateEmbed, CreateEmbedFooter}; 6 | 7 | /// Retrieves the latest or a specific comic from xkcd. 8 | #[poise::command(slash_command)] 9 | pub async fn xkcd(context: Context<'_>, #[description = "Gets a specific comic."] number: Option, #[description = "Gets a random comic."] random: Option) -> Result<(), Error> { 10 | let client = &context.data().reqwest_container; 11 | let comic = match number { 12 | None if random.unwrap_or_default() => { 13 | let request = client.get("https://xkcd.com/info.0.json").send().await?; 14 | let id = request.json::().await?.num; 15 | let mut rng = rand::thread_rng(); 16 | let range = loop { 17 | let num = rng.gen_range(1..id); 18 | if num != 404 { 19 | break num; 20 | }; 21 | }; 22 | &format!("https://xkcd.com/{range}/info.0.json") 23 | } 24 | None => "https://xkcd.com/info.0.json", 25 | Some(_num) if random.unwrap_or_default() => { 26 | context.reply("You cannot provide both a number and the random flag. Please use one or the other!").await?; 27 | return Ok(()); 28 | } 29 | Some(number) => &format!("https://xkcd.com/{number}/info.0.json") 30 | }; 31 | 32 | let request = client.get(comic).send().await?; 33 | if request.status() == StatusCode::NOT_FOUND { 34 | context.reply("You did not provide a valid comic id.").await?; 35 | return Ok(()); 36 | } 37 | 38 | let response: Comic = request.json().await?; 39 | let num = response.num; 40 | let page = format!("https://xkcd.com/{num}/"); 41 | let wiki = format!("https://explainxkcd.com/wiki/index.php/{num}"); 42 | 43 | let embed = CreateEmbed::new() 44 | .title(&response.title) 45 | .color(0xfafafa) 46 | .description(&response.alt) 47 | .image(&response.img) 48 | .footer(CreateEmbedFooter::new(format!("xkcd comic no. {num}"))); 49 | 50 | let links = CreateActionRow::Buttons(vec![CreateButton::new_link(page).label("View on xkcd"), CreateButton::new_link(wiki).label("View wiki")]); 51 | context.send(CreateReply::default().embed(embed).components(vec![links])).await?; 52 | 53 | Ok(()) 54 | } 55 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(dead_code)] 2 | 3 | mod commands; 4 | mod config; 5 | mod constants; 6 | mod listeners; 7 | mod models; 8 | mod utils; 9 | 10 | use config::ConfigurationData; 11 | use constants::REQWEST_USER_AGENT; 12 | use listeners::handler::Handler; 13 | use poise::{serenity_prelude as serenity, Framework, FrameworkOptions}; 14 | use reqwest::{redirect::Policy, Client}; 15 | use serenity::GatewayIntents; 16 | use tracing::{info, Level}; 17 | use tracing_log::LogTracer; 18 | use tracing_subscriber::{EnvFilter, FmtSubscriber}; 19 | use utils::read_config; 20 | 21 | type Error = anyhow::Error; 22 | type Context<'a> = poise::Context<'a, Data, Error>; 23 | 24 | struct Data { 25 | config: ConfigurationData, 26 | reqwest_container: Client 27 | } 28 | 29 | #[tokio::main(worker_threads = 16)] 30 | async fn main() -> Result<(), Error> { 31 | let configuration = read_config("config.toml"); 32 | if configuration.bot.logging.enabled { 33 | LogTracer::init()?; 34 | 35 | let level = match configuration.bot.logging.level.as_str() { 36 | "error" => Level::ERROR, 37 | "warn" => Level::WARN, 38 | "info" => Level::INFO, 39 | "debug" => Level::DEBUG, 40 | _ => Level::TRACE 41 | }; 42 | 43 | let subscriber = FmtSubscriber::builder() 44 | .with_target(false) 45 | .with_max_level(level) 46 | .with_env_filter(EnvFilter::from_default_env()) 47 | .finish(); 48 | 49 | tracing::subscriber::set_global_default(subscriber)?; 50 | 51 | info!("Tracing initialized with logging level set to {}.", level); 52 | } 53 | 54 | let token = configuration.bot.discord.token; 55 | let framework = Framework::builder() 56 | .options(FrameworkOptions { 57 | commands: vec![ 58 | commands::fun::xkcd::xkcd(), 59 | commands::search::tmdb::tmdb(), 60 | commands::utilities::hello(), 61 | commands::utilities::help(), 62 | commands::utilities::source(), 63 | ], 64 | ..Default::default() 65 | }) 66 | .setup(move |context, _ready, framework| { 67 | Box::pin(async move { 68 | poise::builtins::register_globally(context, &framework.options().commands).await?; 69 | Ok(Data { 70 | config: read_config("config.toml"), 71 | reqwest_container: Client::builder().user_agent(REQWEST_USER_AGENT).redirect(Policy::none()).build()? 72 | }) 73 | }) 74 | }) 75 | .build(); 76 | 77 | let command_count = &framework.options().commands.len(); 78 | let commands_str: String = framework.options().commands.iter().map(|c| &c.name).cloned().collect::>().join(", "); 79 | info!("Initialized {} commands: {}", command_count, commands_str); 80 | 81 | let mut client = serenity::Client::builder(token, GatewayIntents::all()).event_handler(Handler).framework(framework).await?; 82 | if let Err(why) = client.start_autosharded().await { 83 | eprintln!("An error occurred while running the client: {why:?}"); 84 | } 85 | 86 | Ok(()) 87 | } 88 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for 6 | everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity 7 | and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, 8 | color, religion, or sexual identity and orientation. 9 | 10 | We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to a positive environment for our community include: 15 | 16 | * Demonstrating empathy and kindness toward other people 17 | * Being respectful of differing opinions, viewpoints, and experiences 18 | * Giving and gracefully accepting constructive feedback 19 | * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience 20 | * Focusing on what is best not just for us as individuals, but for the overall community 21 | 22 | Examples of unacceptable behavior include: 23 | 24 | * The use of sexualized language or imagery, and sexual attention or advances of any kind 25 | * Trolling, insulting or derogatory comments, and personal or political attacks 26 | * Public or private harassment 27 | * Publishing others' private information, such as a physical or email address, without their explicit permission 28 | * Other conduct which could reasonably be considered inappropriate in a professional setting 29 | 30 | ## Enforcement Responsibilities 31 | 32 | Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate 33 | and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. 34 | 35 | Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, 36 | and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions 37 | when appropriate. 38 | 39 | ## Scope 40 | 41 | This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing 42 | the community in public spaces. Examples of representing our community include using an official email address, posting 43 | via an official social media account, or acting as an appointed representative at an online or offline event. 44 | 45 | ## Enforcement 46 | 47 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible 48 | for enforcement by contacting the project leader's [email address][email]. All complaints will be reviewed and investigated 49 | promptly and fairly. 50 | 51 | All community leaders are obligated to respect the privacy and security of the reporter of any incident. 52 | 53 | ## Enforcement Guidelines 54 | 55 | Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem 56 | in violation of this Code of Conduct: 57 | 58 | ### 1. Correction 59 | 60 | **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. 61 | 62 | **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation 63 | and an explanation of why the behavior was inappropriate. A public apology may be requested. 64 | 65 | ### 2. Warning 66 | 67 | **Community Impact**: A violation through a single incident or series of actions. 68 | 69 | **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including 70 | unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding 71 | interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary 72 | or permanent ban. 73 | 74 | ### 3. Temporary Ban 75 | 76 | **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. 77 | 78 | **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified 79 | period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing 80 | the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. 81 | 82 | ### 4. Permanent Ban 83 | 84 | **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, 85 | harassment of an individual, or aggression toward or disparagement of classes of individuals. 86 | 87 | **Consequence**: A permanent ban from any sort of public interaction within the community. 88 | 89 | ## Attribution 90 | 91 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available [here][version]. 92 | 93 | Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][diversity]. 94 | 95 | For answers to common questions about this code of conduct, see the FAQ [here][faq]. Translations are available [here][translations]. 96 | 97 | [homepage]: http://contributor-covenant.org 98 | [version]: https://www.contributor-covenant.org/version/2/1/code_of_conduct/ 99 | [faq]: https://www.contributor-covenant.org/faq 100 | [translations]:https://www.contributor-covenant.org/translations 101 | [diversity]: https://github.com/mozilla/diversity 102 | [email]: mailto:evelynharthbrooke@gmail.com?subject=Contributor%20Complaint 103 | -------------------------------------------------------------------------------- /src/utils/locale.rs: -------------------------------------------------------------------------------- 1 | //! Locale and Language Utilities 2 | //! 3 | //! These are helpful utility functions that help ease the task of working 4 | //! with locale and languages, with a focus on ISO conversions. 5 | 6 | /// Retrieves the friendly name of the provided language code if 7 | /// the language is recognized. If the ISO 639-1 language code that 8 | /// is provided is not recognized, the two-digit ISO code will be provided 9 | /// instead. 10 | pub fn get_language_name_from_iso(lang: &str) -> &str { 11 | match lang { 12 | "en" => "English", 13 | "fr" => "French", 14 | "it" => "Italian", 15 | "ja" => "Japanese", 16 | "ko" => "Korean", 17 | "cn" => "Cantonese", 18 | _ => lang 19 | } 20 | } 21 | 22 | /// Retrieves the friendly name of the provided country code if the 23 | /// country is recognized. If the ISO 3166-1 country code provided is 24 | /// not recognized, the function will gracefully fall back to just displaying 25 | /// the ISO 3166-1 code. 26 | pub fn get_country_name_from_iso(country: &str) -> &str { 27 | match country { 28 | "AF" => "Afghanistan", 29 | "AX" => "Åland Islands", 30 | "AL" => "Albania", 31 | "DZ" => "Algeria", 32 | "AS" => "American Samoa", 33 | "AD" => "Andorra", 34 | "AO" => "Angola", 35 | "AI" => "Anguilla", 36 | "AQ" => "Antarctica", 37 | "AG" => "Antigua and Barbuda", 38 | "AR" => "Argentina", 39 | "AM" => "Aruba", 40 | "AU" => "Australia", 41 | "AT" => "Austria", 42 | "AZ" => "Azerbaijan", 43 | "BS" => "Bahamas", 44 | "BH" => "Bahrain", 45 | "BD" => "Bangladesh", 46 | "BB" => "Barbados", 47 | "BY" => "Belarus", 48 | "BE" => "Belgium", 49 | "BZ" => "Belize", 50 | "BJ" => "Benin", 51 | "BM" => "Bermuda", 52 | "BT" => "Bhutan", 53 | "BO" => "Bolivia", 54 | "BA" => "Bosnia and Herzegovina", 55 | "BW" => "Botswana", 56 | "BV" => "Bouvet Island", 57 | "BR" => "Brazil", 58 | "VG" => "British Virgin Islands", 59 | "IO" => "British Indian Ocean Territory", 60 | "BN" => "Brunei Darussalam", 61 | "BG" => "Bulgaria", 62 | "BF" => "Burkina Faso", 63 | "BI" => "Burundi", 64 | "KH" => "Cambodia", 65 | "CM" => "Cameroon", 66 | "CA" => "Canada", 67 | "CV" => "Cape Verde", 68 | "KY" => "Cayman Islands", 69 | "CF" => "Central African Republic", 70 | "TD" => "Chad", 71 | "CL" => "Chile", 72 | "CN" => "China", 73 | "HK" => "Hong Kong, SAR China", 74 | "MO" => "Macao, SAR China", 75 | "CX" => "Christmas Island", 76 | "CC" => "Cocos (Keeling) Islands", 77 | "CO" => "Columbia", 78 | "KM" => "Comoros", 79 | "CG" => "Congo (Brazzaville)", 80 | "CD" => "Congo, (Kinshasa)", 81 | "CK" => "Cook Islands", 82 | "CR" => "Costa Rica", 83 | "CI" => "Côte d'Ivoire", 84 | "HR" => "Croatia", 85 | "CU" => "Cuba", 86 | "CY" => "Cyprus", 87 | "CZ" => "Czech Republic", 88 | "DK" => "Denmark", 89 | "DJ" => "Djibouti", 90 | "DM" => "Domincia", 91 | "DO" => "Dominician Republic", 92 | "EC" => "Ecuador", 93 | "EG" => "Egypt", 94 | "SV" => "El Salvador", 95 | "GQ" => "Equatorial Guinea", 96 | "ER" => "Eritrea", 97 | "EE" => "Estonia", 98 | "ET" => "Ethopia", 99 | "FK" => "Falkland Islands (Malvinas)", 100 | "FO" => "Faroe Islands", 101 | "FJ" => "Fiji", 102 | "FI" => "Finland", 103 | "FR" => "France", 104 | "GF" => "French Guiana", 105 | "PF" => "French Polynesia", 106 | "TF" => "French Southern Territories", 107 | "GA" => "Gabon", 108 | "GM" => "Gambia", 109 | "GE" => "Georgia", 110 | "DE" => "Germany", 111 | "GH" => "Ghana", 112 | "GI" => "Gibraltar", 113 | "GR" => "Greece", 114 | "GL" => "Greenland", 115 | "GD" => "Grenada", 116 | "GP" => "Guadeloupe", 117 | "GU" => "Guam", 118 | "GT" => "Guatemala", 119 | "GG" => "Guernsey", 120 | "GN" => "Guinea", 121 | "GW" => "Guinea-Bissau", 122 | "GY" => "Guyana", 123 | "HT" => "Haiti", 124 | "HM" => "Heard and Mcdonald Islands", 125 | "VA" => "Holy See (Vatican City State)", 126 | "HN" => "Honduras", 127 | "HU" => "Hungary", 128 | "IS" => "Iceland", 129 | "IN" => "India", 130 | "ID" => "Indonesia", 131 | "IR" => "Islamic Republic of Iran", 132 | "IQ" => "Iraq", 133 | "IE" => "Ireland", 134 | "IM" => "Isle of Man", 135 | "IL" => "Israel", 136 | "IT" => "Italy", 137 | "JM" => "Jamaica", 138 | "JP" => "Japan", 139 | "JE" => "Jersey", 140 | "JO" => "Jordan", 141 | "KZ" => "Kazakhstan", 142 | "KE" => "Kenya", 143 | "KI" => "Kiribati", 144 | "XK" => "Kosovo", 145 | "KP" => "North Korea", 146 | "KR" => "South Korea", 147 | "KW" => "Kuwait", 148 | "KG" => "Kyrgyzstan", 149 | "LA" => "Lao PDR", 150 | "LV" => "Latvia", 151 | "LB" => "Lebanon", 152 | "LS" => "Lesotho", 153 | "LR" => "Liberia", 154 | "LY" => "Libya", 155 | "LI" => "Liechtenstein", 156 | "LT" => "Lithuania", 157 | "LU" => "Luxembourg", 158 | "MK" => "Republic of Macedonia", 159 | "MG" => "Madagascar", 160 | "MW" => "Malawi", 161 | "MY" => "Malaysia", 162 | "MV" => "Maldives", 163 | "ML" => "Mali", 164 | "MT" => "Malta", 165 | "MH" => "Marshall Islands", 166 | "MQ" => "Martinique", 167 | "MR" => "Mauritania", 168 | "MU" => "Mauritius", 169 | "YT" => "Mayotte", 170 | "MX" => "Mexico", 171 | "FM" => "Federated States of Micronesia", 172 | "MD" => "Moldova", 173 | "MC" => "Monaco", 174 | "MN" => "Mongolia", 175 | "ME" => "Montenegro", 176 | "MS" => "Montserrat", 177 | "MA" => "Morocco", 178 | "MZ" => "Mozambique", 179 | "MM" => "Myanmar", 180 | "NA" => "Namibia", 181 | "NR" => "Naru", 182 | "NP" => "Nepal", 183 | "NL" => "Netherlands", 184 | "AN" => "Netherlands Antilles", 185 | "NC" => "New Caledonia", 186 | "NZ" => "New Zealand", 187 | "NI" => "Nicaragua", 188 | "NE" => "Niger", 189 | "NG" => "Nigeria", 190 | "NU" => "Niue", 191 | "NF" => "Norfolk Island", 192 | "MP" => "Northern Mariana Islands", 193 | "NO" => "Norway", 194 | "OM" => "Oman", 195 | "PK" => "Pakistan", 196 | "PW" => "Palau", 197 | "PS" => "Palestinian Territory", 198 | "PA" => "Panama", 199 | "PG" => "Papua New Guinea", 200 | "PE" => "Peru", 201 | "PH" => "Philippines", 202 | "PN" => "Pitcairn", 203 | "PL" => "Poland", 204 | "PT" => "Portugal", 205 | "PR" => "Puerto Rico", 206 | "QA" => "Qatar", 207 | "RE" => "Réunion", 208 | "RO" => "Romania", 209 | "RU" => "Russia (Russian Federation)", 210 | "RW" => "Rwanda", 211 | "BL" => "Saint-Barthélemy", 212 | "SH" => "Saint Helena", 213 | "KN" => "Saint Kitts and Nevis", 214 | "LC" => "Saint Lucia", 215 | "MF" => "Saint-Martin (French part)", 216 | "PM" => "Saint Pierre and Miquelon", 217 | "VC" => "Saint Vincent and Grenadines", 218 | "WS" => "Samoa", 219 | "SM" => "San Marino", 220 | "ST" => "Sao Tome and Principe", 221 | "SA" => "Saudi Arabia", 222 | "SN" => "Senegal", 223 | "RS" => "Serbia", 224 | "SC" => "Seychelles", 225 | "SL" => "Sierra Leone", 226 | "SG" => "Singapore", 227 | "SI" => "Slovenia", 228 | "SB" => "Solomon Islands", 229 | "SO" => "Somalia", 230 | "ZA" => "South Africa", 231 | "GS" => "South Georgia and the South Sandwich Islands", 232 | "SS" => "South Sudan", 233 | "ES" => "Spain", 234 | "LK" => "Sri Lanka", 235 | "SR" => "Suriname", 236 | "SJ" => "Svalbard and Jan Mayen Islands", 237 | "SZ" => "Swaziland", 238 | "SE" => "Sweden", 239 | "CH" => "Switzerland", 240 | "SY" => "Syran Arab Republic (Syria)", 241 | "TW" => "Taiwan (Republic of China)", 242 | "TJ" => "Tajikstan", 243 | "TZ" => "United Republic of Tanzania", 244 | "TH" => "Thailand", 245 | "TL" => "Timor-Leste", 246 | "TG" => "Togo", 247 | "TK" => "Tokelau", 248 | "TO" => "Tonga", 249 | "TT" => "Trinidad and Tobago", 250 | "TN" => "Tunisia", 251 | "TR" => "Türkiye", 252 | "TM" => "Turkmenistan", 253 | "TC" => "Turks and Caicos Islands", 254 | "TV" => "Tuvalu", 255 | "UG" => "Uganda", 256 | "UA" => "Ukraine", 257 | "AE" => "United Arab Emirates", 258 | "GB" => "United Kingdom", 259 | "US" => "United States", 260 | "UM" => "US Minor Outlying Islands", 261 | "UY" => "Uruguay", 262 | "UZ" => "Uzbekistan", 263 | "VU" => "Vanuatu", 264 | "VE" => "Venezuaela", 265 | "VN" => "Vietnam", 266 | "VI" => "United States Virgin Islands", 267 | "WF" => "Wallis and Futuna Islands", 268 | "EH" => "Western Sahara", 269 | "YE" => "Yemen", 270 | "ZM" => "Zambia", 271 | "ZW" => "Zimbabwe", 272 | _ => country 273 | } 274 | } 275 | -------------------------------------------------------------------------------- /src/models/tmdb/mod.rs: -------------------------------------------------------------------------------- 1 | use chrono::prelude::NaiveDate; 2 | use serde::Deserialize; 3 | 4 | #[derive(Deserialize)] 5 | #[rustfmt::skip] 6 | pub struct Movie { 7 | pub adult: bool, // Whether or not the movie has an adult rating. 8 | #[serde(rename = "belongs_to_collection")] 9 | pub collection: Option, // The movie's collection, if applicable. 10 | pub backdrop_path: Option, // The movie's poster packdrop l 11 | pub budget: u64, // The movie's total budget. 12 | pub genres: Vec, // The movie's associated genres. 13 | pub homepage: Option, // The movie's website. 14 | pub id: u64, // The movie's The Movie Database identifier. 15 | pub imdb_id: Option, // The movie's IMDb identifier. 16 | pub original_language: String, // The movie's original language. 17 | pub original_title: String, // The movie's original title. 18 | pub overview: Option, // The movie's overview / description. 19 | pub popularity: f64, // The movie's popularity. 20 | pub poster_path: Option, // The movie's poster URL. 21 | pub production_companies: Vec, // The movie's production companies. 22 | pub production_countries: Vec, // The movie's production countries. 23 | pub release_date: Option, // The movie's release date. 24 | pub revenue: u64, // The movie's total amount of revenue. 25 | pub runtime: Option, // The movie's runtime duration, in minutes. 26 | pub status: String, // The movie's current status as listed on The Movie Database. 27 | pub tagline: Option, // The movie's tagline. 28 | pub title: String, // The movie's title. 29 | pub vote_average: f64, // The movie's average user score on The Movie Database. 30 | pub vote_count: f64 // The movie's total amount of votes on The Movie Database. 31 | } 32 | 33 | #[derive(Deserialize)] 34 | #[rustfmt::skip] 35 | pub struct SimplifiedMovie { 36 | pub id: u64, // The TMDb ID belonging to the movie. 37 | pub overview: String, // The overview of the movie. 38 | pub release_date: String, // The release date of the movie. 39 | pub title: String // The title of the movie. 40 | } 41 | 42 | #[derive(Deserialize)] 43 | #[rustfmt::skip] 44 | pub struct Show { 45 | pub backdrop_path: Option, // The show's backdrop path. 46 | pub created_by: Vec, // The show's creators. 47 | pub episode_run_time: Vec, // An array containing the show's episode runtimes. 48 | pub first_air_date: NaiveDate, // The date the show first aired. 49 | pub genres: Vec, // The genres that the show is in. 50 | pub homepage: String, // The show's homepage. 51 | pub id: i64, // The show's id on The Movie Database. 52 | pub in_production: bool, // The show's current production status. 53 | pub languages: Vec, // The show's available languages. 54 | pub last_air_date: NaiveDate, // The show's last known episode air date. 55 | pub last_episode_to_air: EpisodeToAir, // The show's last aired episode. 56 | pub name: String, // The name of the show. 57 | pub next_episode_to_air: Option, // The show's next scheduled episode. 58 | pub networks: Vec, // The networks or services that air the show. 59 | pub number_of_episodes: i64, // The total number of episodes the show has aired. 60 | pub number_of_seasons: i64, // The total number of seasons the show has aired. 61 | pub origin_country: Vec, // The country where the show originated. 62 | pub original_language: String, // The original language of the show. 63 | pub original_name: String, // The show's original name. 64 | pub overview: String, // The show's overview. 65 | pub popularity: f64, // An integer containing the show's popularity value. 66 | pub poster_path: Option, // The show's poster path. 67 | #[serde(rename = "production_companies")] 68 | pub studios: Vec, // The studios that produce and manage the show. 69 | pub seasons: Vec, // A vector array containing information on the show's individual seasons. 70 | pub spoken_languages: Vec, // A vector array containing information about the show's spoken languages. 71 | pub status: String, // The status of the show; can be Returning Series, Cancelled, or Ended. 72 | pub tagline: String, // The show's tagline. 73 | #[serde(rename = "type")] 74 | pub format: String, // The format of the show; can be Scripted, News, or Unscripted. 75 | pub vote_average: f64, // The show's average user score on The Movie Database. 76 | pub vote_count: i64, // The show's total amount of user votes on The Movie Database. 77 | } 78 | 79 | #[derive(Deserialize)] 80 | #[rustfmt::skip] 81 | pub struct Collection { 82 | pub id: u64, // The ID of the collection. 83 | pub name: String, // The name of the collection. 84 | pub poster_path: String, // The poster of the collection. 85 | pub backdrop_path: String // the backdrop of the collection. 86 | } 87 | 88 | #[derive(Deserialize)] 89 | #[rustfmt::skip] 90 | pub struct CreatedBy { 91 | pub id: i64, // The ID associated with the given creator. 92 | pub credit_id: String, // The credit ID associated with the given creator. 93 | pub name: String, // The name of the given creator. 94 | pub gender: Option, // The (optional) gender of the given creator. 95 | pub profile_path: Option // The (optional) profile path of the given creator. 96 | } 97 | 98 | #[derive(Deserialize)] 99 | #[rustfmt::skip] 100 | pub struct Genre { 101 | pub id: u64, // The genre's ID. 102 | pub name: String // The genre's name. 103 | } 104 | 105 | #[derive(Deserialize)] 106 | #[rustfmt::skip] 107 | pub struct EpisodeToAir { 108 | pub air_date: Option, // The episode's air date. 109 | pub episode_number: i64, // The number of the episode. 110 | pub id: i64, // The episode's TMDb ID. 111 | pub name: String, // The name of the episode. 112 | pub overview: String, // The episode's overview / synopsis. 113 | pub production_code: String, // The episode's production code. 114 | pub season_number: i64, // The season associated with the episode. 115 | pub still_path: Option, // The episode's still path. 116 | pub vote_average: f64, // The episode's average user score on The Movie Database. 117 | pub vote_count: i64 // The total amount of votes for the episode. 118 | } 119 | 120 | #[derive(Deserialize)] 121 | #[rustfmt::skip] 122 | pub struct NetworkOrStudio { 123 | pub name: String, // The name of the studio. 124 | pub id: i64, // The ID associated with the studio. 125 | pub logo_path: Option, // The studio's logo path. 126 | pub origin_country: Option // The country where the studio originated. 127 | } 128 | 129 | #[derive(Deserialize)] 130 | #[rustfmt::skip] 131 | pub struct Season { 132 | pub air_date: Option, // The premiere date of the season. 133 | pub episode_count: i64, // The total amount of episodes in the season. 134 | pub id: i64, // The season's TMDb identifier. 135 | pub name: String, // The name of the season. Typically just "Season ". 136 | pub overview: Option, // An overview / synopsis about the season. 137 | pub poster_path: Option, // The poster path of the season. 138 | pub season_number: i64 // The season's numerical number. 139 | } 140 | 141 | #[derive(Deserialize)] 142 | #[rustfmt::skip] 143 | pub struct Language { 144 | pub english_name: String, // The name of the given language, in English. 145 | pub iso_639_1: String, // The ISO 639-1 identifier associated with the language. 146 | pub name: String // The native name associated with the language. 147 | } 148 | 149 | #[derive(Deserialize)] 150 | #[rustfmt::skip] 151 | pub struct ProductionCompany { 152 | pub name: String, // The friendly name of the production company. 153 | pub id: u64, // The ID of the production company on The Movie Database. 154 | pub origin_country: String // The country of origin of the production company. 155 | } 156 | 157 | #[derive(Deserialize)] 158 | #[rustfmt::skip] 159 | pub struct ProductionCountry { 160 | pub iso_3166_1: String, // The ISO standard shortcode of the production country. 161 | pub name: String // The friendly name of the production country. 162 | } 163 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Taliyah 2 | 3 | A feature-packed bot for Discord servers, written in Rust with Serenity and various other libraries. 4 | 5 | [![Invite Taliyah][invite-badge]][invite-link] 6 | [![License][license-badge]][license-link] 7 | [![Dependency Status][dependency-badge]][dependency-link] 8 | [![GitHub Actions Build Status][github-actions-badge]][github-actions-link] 9 | 10 | > [!IMPORTANT] 11 | > 12 | > **November 2024 update**: Development on Taliyah has been paused for the forseeable future due to a lack of desire and 13 | > drive to continue maintaining the project. However, the codebase will still receive updates to dependencies to keep the 14 | > project as free of security vulnerabilities as possible. Taliyah will however stay on Serenity 0.12.x and Poise 0.6.x, 15 | > even if they get new versions, during this pause in development. It should additionally be said and reiterated that 16 | > development on the project is not ceasing for good, but I am taking a break for at least the short term to try and get 17 | > my drive and desire back to maintain this project. There is more information about the pause in development located 18 | > [here](https://github.com/evieluvsrainbows/Taliyah/commit/698537bcb185bcba92e9a9adb1f950a6b8ad26e5), going further into 19 | > detail on why I am pausing the development of Taliyah, and I encourage anyone who ends up seeing this to read that. 20 | > 21 | > 🚧 **Pardon The Dust** 🚧 22 | > 23 | > Taliyah is currently undergoing a significant rewrite based around the (relatively) new Poise command framework. Therefore, 24 | > the contents of the README as shown below are no longer appropriate, however are retained for posterity. Please do not 25 | > use the contents of this README as a guide on how to setup Taliyah until more of the rewrite has finished. Thank you, and 26 | > again pardon the dust while this work is ongoing. 😁 27 | 28 | Welcome to the official GitHub / GitLab repository for Taliyah, a bot for the Discord chat platform written in Rust with 29 | the serenity library, as well as various other libraries. It should be noted that this project is still in a heavy WIP state, 30 | however there are still a pretty robust set of commands implemented so far, including a near-complete suite of voice 31 | commands, which I am very happy with. This project will be continulously improved and updated with more commands and features, 32 | so please keep an eye on this repository for any new features and updates, as well as the changelog. 33 | 34 | ## Installation 35 | 36 | > [!NOTE] 37 | > Installation instructions do not exist for macOS and Linux yet. They will be added soon. 38 | 39 | ### Prerequisites 40 | 41 | Before we can get Taliyah up and running, we'll need to install a couple pieces of software in order for Taliyah to actually 42 | build and run. This will depend on your operating system, be it either Windows, macOS or Linux. On Windows, this means you'll 43 | need to have Visual Studio 2022 installed, be it the full IDE or the Build Tools, and Rust itself. On macOS, you will need 44 | the Xcode Developer Tools, as it includes the system compiler (`clang`) necessary to build Rust programs and libraries, or 45 | you could also go with simply installing Rust with `homebrew` or MacPorts. On Linux, you don't need to install anything in 46 | most cases, as most Linux distributions such as Ubuntu and Fedora already have the `gcc` toolchain installed, however if 47 | desired this can be switched to the same `clang` compiler as macOS by installing it through your respective package manager, 48 | or through `homebrew` or MacPorts as previously mentioned. 49 | 50 | You will also need Git, in order to be able to clone this repository to your system. Git can be downloaded either from the 51 | Git website (located [here](https://git-scm.com/download/win) if you're on Windows), the package manager provided by your 52 | distribution of choice, or, on macOS, with `homebrew` or MacPorts. 53 | 54 | All in all, you will need the following prerequisites for Taliyah to build and run: 55 | 56 | * Visual Studio 2022 / Visual Studio 2022 Build Tools (*Windows (non-WSL) only*) 57 | * Xcode and the Command Line Tools (macOS) 58 | * Git, preferably latest stable 59 | * Rust, preferably latest nightly 60 | 61 | #### Windows 62 | 63 | To install Visual Studio 2022, or the Visual Studio 2022 Build Tools, please visit the Visual Studio website, which can be 64 | accessed by [clicking here](https://visualstudio.microsoft.com/), and click on the Download Visual Studio button at the top 65 | of the page to download the Visual Studio installer. When in the installer, choose any edition you prefer; the Community 66 | edition works fine. Or, if you would just like to install the Build Tools instead of installing the IDE, you can visit 67 | [this URL](https://visualstudio.microsoft.com/downloads/), scroll down to All Downloads section, expand the "Tools for 68 | Visual Studio"section, and click the Download button next to "Build Tools for Visual Studio 2022". 69 | 70 | Next, we will need to install the `rustup` tool, which allows easy managemnt of Rust toolchain installations as well as easy 71 | updating of Rust when new versions are available. To download rustup, visit the website located [here](https://rustup.rs/) 72 | and click on `rustup-init.exe` which will download the rustup initialization utility to your system. When it is downloaded, 73 | run the tool and follow the instructions to install Rust on your system. 74 | 75 | #### Windows Subsystem for Linux (WSL) 2 76 | 77 | > [!WARNING] 78 | > Please do NOT use the version of Rust provided by your distribution's repositories. The version provided by your distribution 79 | > is likely out of date compared to what the current version of Rust actually is (1.80.0 at the time of writing); therefore 80 | > rustup should be used instead. 81 | 82 | Installing Rust inside of Windows Subsystem for Linux is even easier and doesn't require Visual Studio 2022 or the Build 83 | Tools. It should be noted as well that these instructions also apply to machines running Linux natively, as WSL is just a 84 | virtual machine that has been tightly integrated into Windows. 85 | 86 | First, as not all distributions include GCC by default, you will need to install GCC via your Linux distribution's package 87 | manager. As there are multiple Linux distributions as well as multiple package managers on said distributions, instructions 88 | cannot be provided. I recommend looking up how to install your respective distribution's build tools metapackage, which includes 89 | GCC as well as other tools useful for development. 90 | 91 | When GCC and the other build tools are installed, run the following command to install `rustup`: 92 | 93 | ```bash 94 | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh 95 | ``` 96 | 97 | > [!TIP] 98 | > To install `rustup`, `rustc`, and `cargo` to a different install location, create both the `RUSTUP_HOME` and `CARGO_HOME` 99 | > system environment variables under the System Properties window in Windows, under Advanced. The `rustup` tool does not 100 | > currently offer a user-friendly way of changing the instal location, but this is an option if you would like to install 101 | > Rust to a different drive or folder. 102 | 103 | ### Installing the Bot 104 | 105 | Now, clone the Taliyah repository to your system using git: 106 | 107 | ```bash 108 | git clone https://github.com/evelynharthbrooke/Taliyah.git 109 | ``` 110 | 111 | If you'd like to use GitLab for the cloning process instead of GitHub, you can do that too. Just use the following command 112 | instead to clone from Taliyah's GitLab mirror. 113 | 114 | ```bash 115 | git clone https://gitlab.com/evelynharthbrooke/Taliyah.git 116 | ``` 117 | 118 | Then, `cd` into the directory you downloaded Taliyah to: 119 | 120 | ```bash 121 | cd Taliyah 122 | ``` 123 | 124 | ### Configuring the Bot 125 | 126 | > [!CAUTION] 127 | > Some parts of these instructions are out of date, mainly the "owner" config field. No commands are present in Taliyah 128 | > yet that require owner-level permissions, therefore, that part can be ignored. 129 | 130 | Now we can set up Taliyah. You will need to go to the developers site for Discord, and create a new application. You can 131 | do this by going [here](https://discordapp.com/developers/applications/), logging in, and selecting "Create an application" 132 | on the main page, and filling in the neccessary information. Once you have successfully created an application, click on 133 | your application's card. Now, we'll have to create a "Bot user" for the application. You can do this by selecting "Bot" 134 | on the left hand column, under OAuth2, and clicking "Add Bot". This will add a bot user to your application. 135 | 136 | Now, for the fun part! Let's grab the bot's token. You can do this by clicking the "Click to reveal token" button underneath 137 | the Username field on the bot page. Copy the token given to you. Now, in the bot's root directory, rename `config.sample.toml` 138 | to `config.toml`, and open the file. Paste the token into the token field. While you have the file open, you may want to 139 | take this opportunity to enter your Discord user ID in the "owner" field so you can use any owner-only commands that have 140 | been added, as well as any API keys and usernames and passwords you'd like. I should note though that there is currently 141 | no error catching implemented in any commands right now, so if you forget to add API keys or usernames/passwords, you will 142 | encounter an error when trying to run the respective commands, so that's why I strongly suggest doing so. 143 | 144 | Now, we are pretty much done. Now, onto the final step, which is actually running Taliyah. 145 | 146 | ### Running the Bot 147 | 148 | You have reached the final step of the install instructions. You're almost there. You just have to build 149 | the bot and then start her up. 150 | 151 | ```bash 152 | cargo run # (--release if you want to run the optimized variant) 153 | ``` 154 | 155 | Congratulations! You have (hopefully) successfully installed and set up Taliyah, and you can now add the bot to 156 | any guild you'd like. (if you have the permission to of course) 157 | 158 | ### Licensing 159 | 160 | Taliyah is licensed under the terms of the MIT License, a fairly unrestrictive license that gives you the power to do 161 | mostly anything you want with this project, and is one of two licenses used by the Rust project itself alongside version 162 | 2.0 of the Apache License, meaning that this software should be 100% compatible. The full contents of the MIT license are 163 | written in the `LICENSE` file, in the root project directory. Please read it in full to understand your full rights 164 | with regards to this software. 165 | 166 | [invite-link]: https://discordapp.com/oauth2/authorize?client_id=483499705108529163&scope=bot 167 | [invite-badge]: https://img.shields.io/badge/invite-to%20your%20Discord%20server-7289da.svg?style=flat-square&logo=discord 168 | 169 | [dependency-link]: https://deps.rs/repo/github/evelynharthbrooke/Taliyah 170 | [dependency-badge]: https://deps.rs/repo/github/evelynharthbrooke/Taliyah/status.svg 171 | 172 | [license-link]: https://github.com/evelynharthbrooke/Taliyah/blob/main/LICENSE.md 173 | [license-badge]: https://img.shields.io/github/license/evelynharthbrooke/Taliyah.svg?color=ff1f46&style=flat-square 174 | 175 | [github-actions-link]: https://github.com/evelynharthbrooke/Taliyah/actions?query=workflow%3A%22Check+Project%22 176 | [github-actions-badge]: https://github.com/evelynharthbrooke/Taliyah/workflows/Check%20Project/badge.svg 177 | -------------------------------------------------------------------------------- /src/commands/search/tmdb/mod.rs: -------------------------------------------------------------------------------- 1 | use crate::{ 2 | models::tmdb::{Movie, Show, SimplifiedMovie}, 3 | utils::{calculate_average_sum, format_int, locale}, 4 | Context, Error 5 | }; 6 | use chrono::NaiveDate; 7 | use humantime::format_duration; 8 | use itertools::Itertools; 9 | use poise::CreateReply; 10 | use serde::Deserialize; 11 | use serenity::all::{CreateActionRow, CreateButton, CreateEmbed, CreateEmbedFooter}; 12 | use std::time::Duration; 13 | 14 | #[derive(Deserialize)] 15 | struct SearchResponse { 16 | pub results: Vec 17 | } 18 | 19 | #[derive(Deserialize)] 20 | struct SearchResult { 21 | pub id: u64 22 | } 23 | 24 | #[derive(Deserialize)] 25 | #[rustfmt::skip] 26 | struct Collection { 27 | pub name: String, // The name of the collection. 28 | pub overview: String, // The overview of the collection. 29 | pub poster_path: String, // The poster belonging to the collection. 30 | pub parts: Vec // The movies part of the collection. 31 | } 32 | 33 | /// Commands for interacting with The Movie Database (themoviedb.org). 34 | #[poise::command(slash_command, subcommands("collection", "movie", "show"))] 35 | pub async fn tmdb(_context: Context<'_>) -> Result<(), Error> { 36 | Ok(()) 37 | } 38 | 39 | /// Retrieves detailed information about a given collection. 40 | #[poise::command(slash_command)] 41 | pub async fn collection(context: Context<'_>, #[description = "The name of the collection."] name: String) -> Result<(), Error> { 42 | let data = &context.data(); 43 | let client = &data.reqwest_container; 44 | let api_key = &data.config.api.entertainment.tmdb; 45 | let search_response = client.get("https://api.themoviedb.org/3/search/collection").query(&[("api_key", api_key), ("query", &name)]); 46 | let search_result: SearchResponse = search_response.send().await?.json().await?; 47 | let search_results = search_result.results; 48 | if search_results.is_empty() { 49 | context.reply(format!("Nothing found for `{name}`. Please try another name.")).await?; 50 | return Ok(()); 51 | } 52 | 53 | let id = search_results.first().unwrap().id; 54 | let response = client.get(format!("https://api.themoviedb.org/3/collection/{id}")).query(&[("api_key", &api_key)]).send().await?; 55 | let result: Collection = response.json().await?; 56 | 57 | let name = result.name; 58 | let poster = format!("https://image.tmdb.org/t/p/original{}", result.poster_path); 59 | let url = format!("https://www.themoviedb.org/collection/{id}"); 60 | let overview = result.overview; 61 | 62 | let mut parts = result.parts; 63 | let mut fields = Vec::with_capacity(parts.len()); 64 | parts.sort_by_cached_key(|p| p.id); 65 | 66 | #[rustfmt::skip] 67 | let rows: Vec = parts.chunks(5).map(|car| CreateActionRow::Buttons(car.iter().map(|part| { 68 | let id = &part.id; 69 | let title = &part.title; 70 | let summary = &part.overview; 71 | let release_date = match &NaiveDate::parse_from_str(&part.release_date, "%Y-%m-%d") { 72 | Ok(date) => date.format("%B %-e, %Y").to_string(), 73 | Err(_) => "Unreleased".to_string(), 74 | }; 75 | fields.push((format!("{title} ({release_date})"), summary, false)); 76 | CreateButton::new_link(format!("https://themoviedb.org/movie/{id}")).label(title) 77 | }).collect())).collect(); 78 | 79 | let embed = CreateEmbed::new().title(name).url(url).thumbnail(poster).color(0x0001_d277).description(overview).fields(fields); 80 | context.send(CreateReply::default().embed(embed).components(rows)).await?; 81 | 82 | Ok(()) 83 | } 84 | 85 | /// Retrieves detailed information about a given film. 86 | #[poise::command(slash_command)] 87 | pub async fn movie(context: Context<'_>, #[description = "Film name"] name: String, #[description = "Film release year"] year: Option) -> Result<(), Error> { 88 | let data = &context.data(); 89 | let api_key = &data.config.api.entertainment.tmdb; 90 | let client = &data.reqwest_container; 91 | let endpoint = "https://api.themoviedb.org/3/search/movie"; 92 | let response = match year { 93 | Some(year) => client.get(endpoint).query(&[("api_key", api_key), ("query", &name), ("year", &year.to_string())]), 94 | None => client.get(endpoint).query(&[("api_key", api_key), ("query", &name)]) 95 | }; 96 | 97 | let result: SearchResponse = response.send().await?.json().await?; 98 | let results = result.results; 99 | if results.is_empty() { 100 | context.say(format!("No results found for `{name}`. Please try looking for another movie.")).await?; 101 | return Ok(()); 102 | } 103 | 104 | let id = results.first().unwrap().id; 105 | let endpoint = format!("https://api.themoviedb.org/3/movie/{id}"); 106 | let response = client.get(&endpoint).query(&[("api_key", &api_key)]).send().await?; 107 | let result: Movie = response.json().await?; 108 | 109 | let id = result.id.to_string(); 110 | let status = result.status; 111 | let title = result.title; 112 | let tagline = result.tagline.filter(|t| !t.is_empty()).map(|t| format!("*{t}*")).unwrap_or_default(); 113 | let overview = result.overview.map(|ow| if !tagline.is_empty() { format!("\n\n{ow}") } else { ow }).unwrap_or_default(); 114 | let homepage = result.homepage.filter(|h| !h.is_empty()).map(|h| format!("[Website]({h})")).unwrap_or("No Website".to_string()); 115 | let collection = result.collection.map(|c| c.name).unwrap_or("N/A".to_string()); 116 | let studios = result.production_companies.iter().map(|c| &c.name).join("\n"); 117 | let language = locale::get_language_name_from_iso(&result.original_language).to_string(); 118 | let release_date = result.release_date.unwrap().format("%B %e, %Y").to_string(); 119 | let budget = format!("${}", format_int(result.budget)); 120 | let revenue = format!("${}", format_int(result.revenue)); 121 | let imdb = format!("[IMDb](https://www.imdb.com/title/{})", result.imdb_id.unwrap()); 122 | let url = format!("https://www.themoviedb.org/movie/{id}"); 123 | let genres = result.genres.iter().map(|g| &g.name).join("\n"); 124 | let poster_uri = result.poster_path.unwrap(); 125 | let poster = format!("https://image.tmdb.org/t/p/original/{}", &poster_uri.replace('/', "")); 126 | let user_score_count = result.vote_count; 127 | let user_score = format!("{}% ({user_score_count} votes)", (result.vote_average * 10.0).round()); 128 | let runtime = format_duration(Duration::from_secs(result.runtime.unwrap() * 60)).to_string(); 129 | let external_links = format!("{homepage} | {imdb}"); 130 | 131 | let mut fields = Vec::with_capacity(12); 132 | fields.push(("Status", &*status, true)); 133 | fields.push(("Film ID", &*id, true)); 134 | fields.push(("Language", &*language, true)); 135 | fields.push(("Runtime", &*runtime, true)); 136 | fields.push(("Release Date", &*release_date, true)); 137 | fields.push(("Collection", &*collection, true)); 138 | fields.push(("User Score", &*user_score, true)); 139 | fields.push(("Box Office", &*revenue, true)); 140 | fields.push(("Budget", &*budget, true)); 141 | fields.push(("Genres", &*genres, true)); 142 | fields.push(("Studios", if !&studios.is_empty() { &*studios } else { "No Known Studios" }, true)); 143 | fields.push(("External Links", &*external_links, true)); 144 | 145 | let embed = CreateEmbed::new() 146 | .title(title) 147 | .url(url) 148 | .color(0x01b4e4) 149 | .thumbnail(poster) 150 | .description(format!("{tagline}{overview}")) 151 | .fields(fields) 152 | .footer(CreateEmbedFooter::new("Powered by TMDb.")); 153 | 154 | context.send(CreateReply::default().embed(embed)).await?; 155 | 156 | Ok(()) 157 | } 158 | 159 | /// Retrieves detailed information about a given television series. 160 | #[poise::command(slash_command)] 161 | pub async fn show(context: Context<'_>, #[description = "The TV series to look up."] name: String) -> Result<(), Error> { 162 | let data = &context.data(); 163 | let api_key = &data.config.api.entertainment.tmdb; 164 | let client = &data.reqwest_container; 165 | let endpoint = "https://api.themoviedb.org/3/search/tv"; 166 | let response = client.get(endpoint).query(&[("api_key", api_key), ("query", &name)]); 167 | let result: SearchResponse = response.send().await?.json().await?; 168 | let results = result.results; 169 | if results.is_empty() { 170 | context.say(format!("No results found for `{name}`. Please try looking for another series.")).await?; 171 | return Ok(()); 172 | } 173 | 174 | let id = results.first().unwrap().id; 175 | let endpoint = format!("https://api.themoviedb.org/3/tv/{id}"); 176 | let response = client.get(&endpoint).query(&[("api_key", &api_key)]).send().await.unwrap(); 177 | let result: Show = response.json().await.unwrap(); 178 | let poster_path = result.poster_path.unwrap(); 179 | let poster = format!("https://image.tmdb.org/t/p/original/{}", &poster_path.replace('/', "")); 180 | 181 | let title = result.name; 182 | let tagline = if !result.tagline.is_empty() { format!("*{}*", result.tagline) } else { String::new() }; 183 | let overview = result.overview; 184 | let status = result.status; 185 | let format = result.format; 186 | let creators = result.created_by.iter().map(|c| &c.name).join("\n"); 187 | let user_score_count = result.vote_count; 188 | let user_score = format!("{}% ({user_score_count} votes)", (result.vote_average * 10.0).round()); 189 | let language = locale::get_language_name_from_iso(&result.original_language).to_string(); 190 | let languages = result.languages.iter().map(|l| locale::get_language_name_from_iso(l)).join("\n"); 191 | let origin_countries = result.origin_country.iter().map(|c| locale::get_country_name_from_iso(c)).join("\n"); 192 | let first_aired = result.first_air_date.format("%B %-e, %Y").to_string(); 193 | let last_aired = result.last_air_date.format("%B %-e, %Y").to_string(); 194 | let average_runtime = calculate_average_sum(&result.episode_run_time); 195 | let runtime = format_duration(Duration::from_secs(average_runtime as u64 * 60)).to_string(); 196 | let networks = result.networks.iter().map(|n| &n.name).join("\n"); 197 | let studios = result.studios.iter().map(|s| &s.name).join("\n"); 198 | let seasons = result.number_of_seasons.to_string(); 199 | let episodes = result.number_of_episodes.to_string(); 200 | let genres = result.genres.iter().map(|genre| &genre.name).join("\n"); 201 | let url = format!("https://themoviedb.org/tv/{id}"); 202 | 203 | let mut fields = Vec::with_capacity(15); 204 | fields.push(("Overview", &*overview, false)); 205 | fields.push(("Status", &*status, true)); 206 | fields.push(("Format", &*format, true)); 207 | fields.push(("Created By", if !creators.is_empty() { &*creators } else { "Unknown" }, true)); 208 | fields.push(("First Aired", &*first_aired, true)); 209 | fields.push(("Last Aired", &*last_aired, true)); 210 | fields.push(("User Score", &*user_score, true)); 211 | if !result.episode_run_time.is_empty() { 212 | fields.push(("Average Runtime", &*runtime, true)); 213 | } else { 214 | fields.push(("\u{200B}", "\u{200B}", true)); 215 | } 216 | fields.push(("Main Language", &*language, true)); 217 | fields.push(("Origin Countries", &*origin_countries, true)); 218 | fields.push(("Languages", &*languages, true)); 219 | fields.push(("Seasons", &*seasons, true)); 220 | fields.push(("Episodes", &*episodes, true)); 221 | fields.push(("Genres", &*genres, true)); 222 | fields.push(("Studios", if !result.studios.is_empty() { &*studios } else { "Unknown" }, true)); 223 | fields.push(("Networks", &*networks, true)); 224 | 225 | let embed = CreateEmbed::new().title(title).url(url).color(0x01b4e4).thumbnail(poster).description(tagline).fields(fields); 226 | context.send(CreateReply::default().embed(embed)).await?; 227 | 228 | Ok(()) 229 | } 230 | -------------------------------------------------------------------------------- /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 = "ahash" 22 | version = "0.7.8" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" 25 | dependencies = [ 26 | "getrandom 0.2.15", 27 | "once_cell", 28 | "version_check", 29 | ] 30 | 31 | [[package]] 32 | name = "aho-corasick" 33 | version = "1.1.3" 34 | source = "registry+https://github.com/rust-lang/crates.io-index" 35 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 36 | dependencies = [ 37 | "memchr", 38 | ] 39 | 40 | [[package]] 41 | name = "android-tzdata" 42 | version = "0.1.1" 43 | source = "registry+https://github.com/rust-lang/crates.io-index" 44 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 45 | 46 | [[package]] 47 | name = "android_system_properties" 48 | version = "0.1.5" 49 | source = "registry+https://github.com/rust-lang/crates.io-index" 50 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 51 | dependencies = [ 52 | "libc", 53 | ] 54 | 55 | [[package]] 56 | name = "anyhow" 57 | version = "1.0.97" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" 60 | 61 | [[package]] 62 | name = "arrayvec" 63 | version = "0.7.6" 64 | source = "registry+https://github.com/rust-lang/crates.io-index" 65 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 66 | dependencies = [ 67 | "serde", 68 | ] 69 | 70 | [[package]] 71 | name = "async-stream" 72 | version = "0.3.6" 73 | source = "registry+https://github.com/rust-lang/crates.io-index" 74 | checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 75 | dependencies = [ 76 | "async-stream-impl", 77 | "futures-core", 78 | "pin-project-lite", 79 | ] 80 | 81 | [[package]] 82 | name = "async-stream-impl" 83 | version = "0.3.6" 84 | source = "registry+https://github.com/rust-lang/crates.io-index" 85 | checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 86 | dependencies = [ 87 | "proc-macro2", 88 | "quote", 89 | "syn 2.0.99", 90 | ] 91 | 92 | [[package]] 93 | name = "async-trait" 94 | version = "0.1.87" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "d556ec1359574147ec0c4fc5eb525f3f23263a592b1a9c07e0a75b427de55c97" 97 | dependencies = [ 98 | "proc-macro2", 99 | "quote", 100 | "syn 2.0.99", 101 | ] 102 | 103 | [[package]] 104 | name = "autocfg" 105 | version = "1.4.0" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 108 | 109 | [[package]] 110 | name = "backtrace" 111 | version = "0.3.74" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 114 | dependencies = [ 115 | "addr2line", 116 | "cfg-if", 117 | "libc", 118 | "miniz_oxide", 119 | "object", 120 | "rustc-demangle", 121 | "windows-targets 0.52.6", 122 | ] 123 | 124 | [[package]] 125 | name = "base64" 126 | version = "0.21.7" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 129 | 130 | [[package]] 131 | name = "base64" 132 | version = "0.22.1" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 135 | 136 | [[package]] 137 | name = "bitflags" 138 | version = "1.3.2" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 141 | 142 | [[package]] 143 | name = "bitflags" 144 | version = "2.9.0" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 147 | 148 | [[package]] 149 | name = "bitvec" 150 | version = "1.0.1" 151 | source = "registry+https://github.com/rust-lang/crates.io-index" 152 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" 153 | dependencies = [ 154 | "funty", 155 | "radium", 156 | "tap", 157 | "wyz", 158 | ] 159 | 160 | [[package]] 161 | name = "block-buffer" 162 | version = "0.10.4" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 165 | dependencies = [ 166 | "generic-array", 167 | ] 168 | 169 | [[package]] 170 | name = "borsh" 171 | version = "1.5.5" 172 | source = "registry+https://github.com/rust-lang/crates.io-index" 173 | checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" 174 | dependencies = [ 175 | "borsh-derive", 176 | "cfg_aliases", 177 | ] 178 | 179 | [[package]] 180 | name = "borsh-derive" 181 | version = "1.5.5" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" 184 | dependencies = [ 185 | "once_cell", 186 | "proc-macro-crate", 187 | "proc-macro2", 188 | "quote", 189 | "syn 2.0.99", 190 | ] 191 | 192 | [[package]] 193 | name = "bumpalo" 194 | version = "3.17.0" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 197 | 198 | [[package]] 199 | name = "byte-unit" 200 | version = "5.1.6" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "e1cd29c3c585209b0cbc7309bfe3ed7efd8c84c21b7af29c8bfae908f8777174" 203 | dependencies = [ 204 | "rust_decimal", 205 | "serde", 206 | "utf8-width", 207 | ] 208 | 209 | [[package]] 210 | name = "bytecheck" 211 | version = "0.6.12" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" 214 | dependencies = [ 215 | "bytecheck_derive", 216 | "ptr_meta", 217 | "simdutf8", 218 | ] 219 | 220 | [[package]] 221 | name = "bytecheck_derive" 222 | version = "0.6.12" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" 225 | dependencies = [ 226 | "proc-macro2", 227 | "quote", 228 | "syn 1.0.109", 229 | ] 230 | 231 | [[package]] 232 | name = "bytecount" 233 | version = "0.6.8" 234 | source = "registry+https://github.com/rust-lang/crates.io-index" 235 | checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" 236 | 237 | [[package]] 238 | name = "byteorder" 239 | version = "1.5.0" 240 | source = "registry+https://github.com/rust-lang/crates.io-index" 241 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 242 | 243 | [[package]] 244 | name = "bytes" 245 | version = "1.10.1" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 248 | 249 | [[package]] 250 | name = "camino" 251 | version = "1.1.9" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" 254 | dependencies = [ 255 | "serde", 256 | ] 257 | 258 | [[package]] 259 | name = "cargo-platform" 260 | version = "0.1.9" 261 | source = "registry+https://github.com/rust-lang/crates.io-index" 262 | checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" 263 | dependencies = [ 264 | "serde", 265 | ] 266 | 267 | [[package]] 268 | name = "cargo_metadata" 269 | version = "0.14.2" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" 272 | dependencies = [ 273 | "camino", 274 | "cargo-platform", 275 | "semver", 276 | "serde", 277 | "serde_json", 278 | ] 279 | 280 | [[package]] 281 | name = "cc" 282 | version = "1.2.16" 283 | source = "registry+https://github.com/rust-lang/crates.io-index" 284 | checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" 285 | dependencies = [ 286 | "shlex", 287 | ] 288 | 289 | [[package]] 290 | name = "cfg-if" 291 | version = "1.0.0" 292 | source = "registry+https://github.com/rust-lang/crates.io-index" 293 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 294 | 295 | [[package]] 296 | name = "cfg_aliases" 297 | version = "0.2.1" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 300 | 301 | [[package]] 302 | name = "chrono" 303 | version = "0.4.40" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" 306 | dependencies = [ 307 | "android-tzdata", 308 | "iana-time-zone", 309 | "js-sys", 310 | "num-traits", 311 | "serde", 312 | "wasm-bindgen", 313 | "windows-link", 314 | ] 315 | 316 | [[package]] 317 | name = "command_attr" 318 | version = "0.5.3" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "6fcc89439e1bb4e19050a9586a767781a3060000d2f3296fd2a40597ad9421c5" 321 | dependencies = [ 322 | "proc-macro2", 323 | "quote", 324 | "syn 1.0.109", 325 | ] 326 | 327 | [[package]] 328 | name = "core-foundation" 329 | version = "0.9.4" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 332 | dependencies = [ 333 | "core-foundation-sys", 334 | "libc", 335 | ] 336 | 337 | [[package]] 338 | name = "core-foundation-sys" 339 | version = "0.8.7" 340 | source = "registry+https://github.com/rust-lang/crates.io-index" 341 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 342 | 343 | [[package]] 344 | name = "cpufeatures" 345 | version = "0.2.17" 346 | source = "registry+https://github.com/rust-lang/crates.io-index" 347 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 348 | dependencies = [ 349 | "libc", 350 | ] 351 | 352 | [[package]] 353 | name = "crc32fast" 354 | version = "1.4.2" 355 | source = "registry+https://github.com/rust-lang/crates.io-index" 356 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 357 | dependencies = [ 358 | "cfg-if", 359 | ] 360 | 361 | [[package]] 362 | name = "crossbeam-channel" 363 | version = "0.5.14" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" 366 | dependencies = [ 367 | "crossbeam-utils", 368 | ] 369 | 370 | [[package]] 371 | name = "crossbeam-utils" 372 | version = "0.8.21" 373 | source = "registry+https://github.com/rust-lang/crates.io-index" 374 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 375 | 376 | [[package]] 377 | name = "crypto-common" 378 | version = "0.1.6" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 381 | dependencies = [ 382 | "generic-array", 383 | "typenum", 384 | ] 385 | 386 | [[package]] 387 | name = "darling" 388 | version = "0.20.10" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" 391 | dependencies = [ 392 | "darling_core", 393 | "darling_macro", 394 | ] 395 | 396 | [[package]] 397 | name = "darling_core" 398 | version = "0.20.10" 399 | source = "registry+https://github.com/rust-lang/crates.io-index" 400 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" 401 | dependencies = [ 402 | "fnv", 403 | "ident_case", 404 | "proc-macro2", 405 | "quote", 406 | "strsim", 407 | "syn 2.0.99", 408 | ] 409 | 410 | [[package]] 411 | name = "darling_macro" 412 | version = "0.20.10" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" 415 | dependencies = [ 416 | "darling_core", 417 | "quote", 418 | "syn 2.0.99", 419 | ] 420 | 421 | [[package]] 422 | name = "dashmap" 423 | version = "5.5.3" 424 | source = "registry+https://github.com/rust-lang/crates.io-index" 425 | checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" 426 | dependencies = [ 427 | "cfg-if", 428 | "hashbrown 0.14.5", 429 | "lock_api", 430 | "once_cell", 431 | "parking_lot_core", 432 | "serde", 433 | ] 434 | 435 | [[package]] 436 | name = "data-encoding" 437 | version = "2.8.0" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" 440 | 441 | [[package]] 442 | name = "deranged" 443 | version = "0.3.11" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 446 | dependencies = [ 447 | "powerfmt", 448 | "serde", 449 | ] 450 | 451 | [[package]] 452 | name = "derivative" 453 | version = "2.2.0" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" 456 | dependencies = [ 457 | "proc-macro2", 458 | "quote", 459 | "syn 1.0.109", 460 | ] 461 | 462 | [[package]] 463 | name = "digest" 464 | version = "0.10.7" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 467 | dependencies = [ 468 | "block-buffer", 469 | "crypto-common", 470 | ] 471 | 472 | [[package]] 473 | name = "displaydoc" 474 | version = "0.2.5" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 477 | dependencies = [ 478 | "proc-macro2", 479 | "quote", 480 | "syn 2.0.99", 481 | ] 482 | 483 | [[package]] 484 | name = "either" 485 | version = "1.15.0" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 488 | 489 | [[package]] 490 | name = "encoding_rs" 491 | version = "0.8.35" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 494 | dependencies = [ 495 | "cfg-if", 496 | ] 497 | 498 | [[package]] 499 | name = "enum_dispatch" 500 | version = "0.3.13" 501 | source = "registry+https://github.com/rust-lang/crates.io-index" 502 | checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" 503 | dependencies = [ 504 | "once_cell", 505 | "proc-macro2", 506 | "quote", 507 | "syn 2.0.99", 508 | ] 509 | 510 | [[package]] 511 | name = "equivalent" 512 | version = "1.0.2" 513 | source = "registry+https://github.com/rust-lang/crates.io-index" 514 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 515 | 516 | [[package]] 517 | name = "errno" 518 | version = "0.3.10" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 521 | dependencies = [ 522 | "libc", 523 | "windows-sys 0.59.0", 524 | ] 525 | 526 | [[package]] 527 | name = "error-chain" 528 | version = "0.12.4" 529 | source = "registry+https://github.com/rust-lang/crates.io-index" 530 | checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" 531 | dependencies = [ 532 | "version_check", 533 | ] 534 | 535 | [[package]] 536 | name = "fastrand" 537 | version = "2.3.0" 538 | source = "registry+https://github.com/rust-lang/crates.io-index" 539 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 540 | 541 | [[package]] 542 | name = "flate2" 543 | version = "1.1.0" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc" 546 | dependencies = [ 547 | "crc32fast", 548 | "miniz_oxide", 549 | ] 550 | 551 | [[package]] 552 | name = "fnv" 553 | version = "1.0.7" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 556 | 557 | [[package]] 558 | name = "foreign-types" 559 | version = "0.3.2" 560 | source = "registry+https://github.com/rust-lang/crates.io-index" 561 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 562 | dependencies = [ 563 | "foreign-types-shared", 564 | ] 565 | 566 | [[package]] 567 | name = "foreign-types-shared" 568 | version = "0.1.1" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 571 | 572 | [[package]] 573 | name = "form_urlencoded" 574 | version = "1.2.1" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 577 | dependencies = [ 578 | "percent-encoding", 579 | ] 580 | 581 | [[package]] 582 | name = "funty" 583 | version = "2.0.0" 584 | source = "registry+https://github.com/rust-lang/crates.io-index" 585 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" 586 | 587 | [[package]] 588 | name = "futures" 589 | version = "0.3.31" 590 | source = "registry+https://github.com/rust-lang/crates.io-index" 591 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 592 | dependencies = [ 593 | "futures-channel", 594 | "futures-core", 595 | "futures-executor", 596 | "futures-io", 597 | "futures-sink", 598 | "futures-task", 599 | "futures-util", 600 | ] 601 | 602 | [[package]] 603 | name = "futures-channel" 604 | version = "0.3.31" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 607 | dependencies = [ 608 | "futures-core", 609 | "futures-sink", 610 | ] 611 | 612 | [[package]] 613 | name = "futures-core" 614 | version = "0.3.31" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 617 | 618 | [[package]] 619 | name = "futures-executor" 620 | version = "0.3.31" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 623 | dependencies = [ 624 | "futures-core", 625 | "futures-task", 626 | "futures-util", 627 | ] 628 | 629 | [[package]] 630 | name = "futures-io" 631 | version = "0.3.31" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 634 | 635 | [[package]] 636 | name = "futures-macro" 637 | version = "0.3.31" 638 | source = "registry+https://github.com/rust-lang/crates.io-index" 639 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 640 | dependencies = [ 641 | "proc-macro2", 642 | "quote", 643 | "syn 2.0.99", 644 | ] 645 | 646 | [[package]] 647 | name = "futures-sink" 648 | version = "0.3.31" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 651 | 652 | [[package]] 653 | name = "futures-task" 654 | version = "0.3.31" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 657 | 658 | [[package]] 659 | name = "futures-util" 660 | version = "0.3.31" 661 | source = "registry+https://github.com/rust-lang/crates.io-index" 662 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 663 | dependencies = [ 664 | "futures-channel", 665 | "futures-core", 666 | "futures-io", 667 | "futures-macro", 668 | "futures-sink", 669 | "futures-task", 670 | "memchr", 671 | "pin-project-lite", 672 | "pin-utils", 673 | "slab", 674 | ] 675 | 676 | [[package]] 677 | name = "fxhash" 678 | version = "0.2.1" 679 | source = "registry+https://github.com/rust-lang/crates.io-index" 680 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 681 | dependencies = [ 682 | "byteorder", 683 | ] 684 | 685 | [[package]] 686 | name = "generic-array" 687 | version = "0.14.7" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 690 | dependencies = [ 691 | "typenum", 692 | "version_check", 693 | ] 694 | 695 | [[package]] 696 | name = "getrandom" 697 | version = "0.2.15" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 700 | dependencies = [ 701 | "cfg-if", 702 | "js-sys", 703 | "libc", 704 | "wasi 0.11.0+wasi-snapshot-preview1", 705 | "wasm-bindgen", 706 | ] 707 | 708 | [[package]] 709 | name = "getrandom" 710 | version = "0.3.1" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" 713 | dependencies = [ 714 | "cfg-if", 715 | "libc", 716 | "wasi 0.13.3+wasi-0.2.2", 717 | "windows-targets 0.52.6", 718 | ] 719 | 720 | [[package]] 721 | name = "gimli" 722 | version = "0.31.1" 723 | source = "registry+https://github.com/rust-lang/crates.io-index" 724 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 725 | 726 | [[package]] 727 | name = "glob" 728 | version = "0.3.2" 729 | source = "registry+https://github.com/rust-lang/crates.io-index" 730 | checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" 731 | 732 | [[package]] 733 | name = "h2" 734 | version = "0.3.26" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 737 | dependencies = [ 738 | "bytes", 739 | "fnv", 740 | "futures-core", 741 | "futures-sink", 742 | "futures-util", 743 | "http 0.2.12", 744 | "indexmap", 745 | "slab", 746 | "tokio", 747 | "tokio-util", 748 | "tracing", 749 | ] 750 | 751 | [[package]] 752 | name = "hashbrown" 753 | version = "0.12.3" 754 | source = "registry+https://github.com/rust-lang/crates.io-index" 755 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 756 | dependencies = [ 757 | "ahash", 758 | ] 759 | 760 | [[package]] 761 | name = "hashbrown" 762 | version = "0.14.5" 763 | source = "registry+https://github.com/rust-lang/crates.io-index" 764 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 765 | 766 | [[package]] 767 | name = "hashbrown" 768 | version = "0.15.2" 769 | source = "registry+https://github.com/rust-lang/crates.io-index" 770 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 771 | 772 | [[package]] 773 | name = "heck" 774 | version = "0.5.0" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 777 | 778 | [[package]] 779 | name = "http" 780 | version = "0.2.12" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 783 | dependencies = [ 784 | "bytes", 785 | "fnv", 786 | "itoa", 787 | ] 788 | 789 | [[package]] 790 | name = "http" 791 | version = "1.2.0" 792 | source = "registry+https://github.com/rust-lang/crates.io-index" 793 | checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" 794 | dependencies = [ 795 | "bytes", 796 | "fnv", 797 | "itoa", 798 | ] 799 | 800 | [[package]] 801 | name = "http-body" 802 | version = "0.4.6" 803 | source = "registry+https://github.com/rust-lang/crates.io-index" 804 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 805 | dependencies = [ 806 | "bytes", 807 | "http 0.2.12", 808 | "pin-project-lite", 809 | ] 810 | 811 | [[package]] 812 | name = "http-body" 813 | version = "1.0.1" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 816 | dependencies = [ 817 | "bytes", 818 | "http 1.2.0", 819 | ] 820 | 821 | [[package]] 822 | name = "http-body-util" 823 | version = "0.1.2" 824 | source = "registry+https://github.com/rust-lang/crates.io-index" 825 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 826 | dependencies = [ 827 | "bytes", 828 | "futures-util", 829 | "http 1.2.0", 830 | "http-body 1.0.1", 831 | "pin-project-lite", 832 | ] 833 | 834 | [[package]] 835 | name = "httparse" 836 | version = "1.10.1" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 839 | 840 | [[package]] 841 | name = "httpdate" 842 | version = "1.0.3" 843 | source = "registry+https://github.com/rust-lang/crates.io-index" 844 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 845 | 846 | [[package]] 847 | name = "humantime" 848 | version = "2.1.0" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 851 | 852 | [[package]] 853 | name = "hyper" 854 | version = "0.14.32" 855 | source = "registry+https://github.com/rust-lang/crates.io-index" 856 | checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" 857 | dependencies = [ 858 | "bytes", 859 | "futures-channel", 860 | "futures-core", 861 | "futures-util", 862 | "h2", 863 | "http 0.2.12", 864 | "http-body 0.4.6", 865 | "httparse", 866 | "httpdate", 867 | "itoa", 868 | "pin-project-lite", 869 | "socket2", 870 | "tokio", 871 | "tower-service", 872 | "tracing", 873 | "want", 874 | ] 875 | 876 | [[package]] 877 | name = "hyper" 878 | version = "1.6.0" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 881 | dependencies = [ 882 | "bytes", 883 | "futures-channel", 884 | "futures-util", 885 | "http 1.2.0", 886 | "http-body 1.0.1", 887 | "httparse", 888 | "itoa", 889 | "pin-project-lite", 890 | "smallvec", 891 | "tokio", 892 | "want", 893 | ] 894 | 895 | [[package]] 896 | name = "hyper-rustls" 897 | version = "0.24.2" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" 900 | dependencies = [ 901 | "futures-util", 902 | "http 0.2.12", 903 | "hyper 0.14.32", 904 | "rustls 0.21.12", 905 | "tokio", 906 | "tokio-rustls 0.24.1", 907 | ] 908 | 909 | [[package]] 910 | name = "hyper-rustls" 911 | version = "0.27.5" 912 | source = "registry+https://github.com/rust-lang/crates.io-index" 913 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 914 | dependencies = [ 915 | "futures-util", 916 | "http 1.2.0", 917 | "hyper 1.6.0", 918 | "hyper-util", 919 | "rustls 0.23.23", 920 | "rustls-pki-types", 921 | "tokio", 922 | "tokio-rustls 0.26.2", 923 | "tower-service", 924 | "webpki-roots 0.26.8", 925 | ] 926 | 927 | [[package]] 928 | name = "hyper-tls" 929 | version = "0.6.0" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 932 | dependencies = [ 933 | "bytes", 934 | "http-body-util", 935 | "hyper 1.6.0", 936 | "hyper-util", 937 | "native-tls", 938 | "tokio", 939 | "tokio-native-tls", 940 | "tower-service", 941 | ] 942 | 943 | [[package]] 944 | name = "hyper-util" 945 | version = "0.1.10" 946 | source = "registry+https://github.com/rust-lang/crates.io-index" 947 | checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" 948 | dependencies = [ 949 | "bytes", 950 | "futures-channel", 951 | "futures-util", 952 | "http 1.2.0", 953 | "http-body 1.0.1", 954 | "hyper 1.6.0", 955 | "pin-project-lite", 956 | "socket2", 957 | "tokio", 958 | "tower-service", 959 | "tracing", 960 | ] 961 | 962 | [[package]] 963 | name = "iana-time-zone" 964 | version = "0.1.61" 965 | source = "registry+https://github.com/rust-lang/crates.io-index" 966 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 967 | dependencies = [ 968 | "android_system_properties", 969 | "core-foundation-sys", 970 | "iana-time-zone-haiku", 971 | "js-sys", 972 | "wasm-bindgen", 973 | "windows-core", 974 | ] 975 | 976 | [[package]] 977 | name = "iana-time-zone-haiku" 978 | version = "0.1.2" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 981 | dependencies = [ 982 | "cc", 983 | ] 984 | 985 | [[package]] 986 | name = "icu_collections" 987 | version = "1.5.0" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 990 | dependencies = [ 991 | "displaydoc", 992 | "yoke", 993 | "zerofrom", 994 | "zerovec", 995 | ] 996 | 997 | [[package]] 998 | name = "icu_locid" 999 | version = "1.5.0" 1000 | source = "registry+https://github.com/rust-lang/crates.io-index" 1001 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1002 | dependencies = [ 1003 | "displaydoc", 1004 | "litemap", 1005 | "tinystr", 1006 | "writeable", 1007 | "zerovec", 1008 | ] 1009 | 1010 | [[package]] 1011 | name = "icu_locid_transform" 1012 | version = "1.5.0" 1013 | source = "registry+https://github.com/rust-lang/crates.io-index" 1014 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1015 | dependencies = [ 1016 | "displaydoc", 1017 | "icu_locid", 1018 | "icu_locid_transform_data", 1019 | "icu_provider", 1020 | "tinystr", 1021 | "zerovec", 1022 | ] 1023 | 1024 | [[package]] 1025 | name = "icu_locid_transform_data" 1026 | version = "1.5.0" 1027 | source = "registry+https://github.com/rust-lang/crates.io-index" 1028 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1029 | 1030 | [[package]] 1031 | name = "icu_normalizer" 1032 | version = "1.5.0" 1033 | source = "registry+https://github.com/rust-lang/crates.io-index" 1034 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1035 | dependencies = [ 1036 | "displaydoc", 1037 | "icu_collections", 1038 | "icu_normalizer_data", 1039 | "icu_properties", 1040 | "icu_provider", 1041 | "smallvec", 1042 | "utf16_iter", 1043 | "utf8_iter", 1044 | "write16", 1045 | "zerovec", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "icu_normalizer_data" 1050 | version = "1.5.0" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1053 | 1054 | [[package]] 1055 | name = "icu_properties" 1056 | version = "1.5.1" 1057 | source = "registry+https://github.com/rust-lang/crates.io-index" 1058 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1059 | dependencies = [ 1060 | "displaydoc", 1061 | "icu_collections", 1062 | "icu_locid_transform", 1063 | "icu_properties_data", 1064 | "icu_provider", 1065 | "tinystr", 1066 | "zerovec", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "icu_properties_data" 1071 | version = "1.5.0" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1074 | 1075 | [[package]] 1076 | name = "icu_provider" 1077 | version = "1.5.0" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1080 | dependencies = [ 1081 | "displaydoc", 1082 | "icu_locid", 1083 | "icu_provider_macros", 1084 | "stable_deref_trait", 1085 | "tinystr", 1086 | "writeable", 1087 | "yoke", 1088 | "zerofrom", 1089 | "zerovec", 1090 | ] 1091 | 1092 | [[package]] 1093 | name = "icu_provider_macros" 1094 | version = "1.5.0" 1095 | source = "registry+https://github.com/rust-lang/crates.io-index" 1096 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1097 | dependencies = [ 1098 | "proc-macro2", 1099 | "quote", 1100 | "syn 2.0.99", 1101 | ] 1102 | 1103 | [[package]] 1104 | name = "ident_case" 1105 | version = "1.0.1" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1108 | 1109 | [[package]] 1110 | name = "idna" 1111 | version = "1.0.3" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1114 | dependencies = [ 1115 | "idna_adapter", 1116 | "smallvec", 1117 | "utf8_iter", 1118 | ] 1119 | 1120 | [[package]] 1121 | name = "idna_adapter" 1122 | version = "1.2.0" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1125 | dependencies = [ 1126 | "icu_normalizer", 1127 | "icu_properties", 1128 | ] 1129 | 1130 | [[package]] 1131 | name = "indexmap" 1132 | version = "2.7.1" 1133 | source = "registry+https://github.com/rust-lang/crates.io-index" 1134 | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" 1135 | dependencies = [ 1136 | "equivalent", 1137 | "hashbrown 0.15.2", 1138 | ] 1139 | 1140 | [[package]] 1141 | name = "ipnet" 1142 | version = "2.11.0" 1143 | source = "registry+https://github.com/rust-lang/crates.io-index" 1144 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1145 | 1146 | [[package]] 1147 | name = "itertools" 1148 | version = "0.13.0" 1149 | source = "registry+https://github.com/rust-lang/crates.io-index" 1150 | checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" 1151 | dependencies = [ 1152 | "either", 1153 | ] 1154 | 1155 | [[package]] 1156 | name = "itoa" 1157 | version = "1.0.15" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1160 | 1161 | [[package]] 1162 | name = "js-sys" 1163 | version = "0.3.77" 1164 | source = "registry+https://github.com/rust-lang/crates.io-index" 1165 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1166 | dependencies = [ 1167 | "once_cell", 1168 | "wasm-bindgen", 1169 | ] 1170 | 1171 | [[package]] 1172 | name = "lazy_static" 1173 | version = "1.5.0" 1174 | source = "registry+https://github.com/rust-lang/crates.io-index" 1175 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1176 | 1177 | [[package]] 1178 | name = "levenshtein" 1179 | version = "1.0.5" 1180 | source = "registry+https://github.com/rust-lang/crates.io-index" 1181 | checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" 1182 | 1183 | [[package]] 1184 | name = "libc" 1185 | version = "0.2.170" 1186 | source = "registry+https://github.com/rust-lang/crates.io-index" 1187 | checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" 1188 | 1189 | [[package]] 1190 | name = "linux-raw-sys" 1191 | version = "0.9.2" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "6db9c683daf087dc577b7506e9695b3d556a9f3849903fa28186283afd6809e9" 1194 | 1195 | [[package]] 1196 | name = "litemap" 1197 | version = "0.7.5" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" 1200 | 1201 | [[package]] 1202 | name = "lock_api" 1203 | version = "0.4.12" 1204 | source = "registry+https://github.com/rust-lang/crates.io-index" 1205 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1206 | dependencies = [ 1207 | "autocfg", 1208 | "scopeguard", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "log" 1213 | version = "0.4.26" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "30bde2b3dc3671ae49d8e2e9f044c7c005836e7a023ee57cffa25ab82764bb9e" 1216 | 1217 | [[package]] 1218 | name = "matchers" 1219 | version = "0.1.0" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1222 | dependencies = [ 1223 | "regex-automata 0.1.10", 1224 | ] 1225 | 1226 | [[package]] 1227 | name = "maybe-async" 1228 | version = "0.2.10" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" 1231 | dependencies = [ 1232 | "proc-macro2", 1233 | "quote", 1234 | "syn 2.0.99", 1235 | ] 1236 | 1237 | [[package]] 1238 | name = "memchr" 1239 | version = "2.7.4" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1242 | 1243 | [[package]] 1244 | name = "mime" 1245 | version = "0.3.17" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1248 | 1249 | [[package]] 1250 | name = "mime_guess" 1251 | version = "2.0.5" 1252 | source = "registry+https://github.com/rust-lang/crates.io-index" 1253 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1254 | dependencies = [ 1255 | "mime", 1256 | "unicase", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "mini-moka" 1261 | version = "0.10.3" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "c325dfab65f261f386debee8b0969da215b3fa0037e74c8a1234db7ba986d803" 1264 | dependencies = [ 1265 | "crossbeam-channel", 1266 | "crossbeam-utils", 1267 | "dashmap", 1268 | "skeptic", 1269 | "smallvec", 1270 | "tagptr", 1271 | "triomphe", 1272 | ] 1273 | 1274 | [[package]] 1275 | name = "miniz_oxide" 1276 | version = "0.8.5" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" 1279 | dependencies = [ 1280 | "adler2", 1281 | ] 1282 | 1283 | [[package]] 1284 | name = "mio" 1285 | version = "1.0.3" 1286 | source = "registry+https://github.com/rust-lang/crates.io-index" 1287 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1288 | dependencies = [ 1289 | "libc", 1290 | "wasi 0.11.0+wasi-snapshot-preview1", 1291 | "windows-sys 0.52.0", 1292 | ] 1293 | 1294 | [[package]] 1295 | name = "native-tls" 1296 | version = "0.2.14" 1297 | source = "registry+https://github.com/rust-lang/crates.io-index" 1298 | checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 1299 | dependencies = [ 1300 | "libc", 1301 | "log", 1302 | "openssl", 1303 | "openssl-probe", 1304 | "openssl-sys", 1305 | "schannel", 1306 | "security-framework", 1307 | "security-framework-sys", 1308 | "tempfile", 1309 | ] 1310 | 1311 | [[package]] 1312 | name = "nu-ansi-term" 1313 | version = "0.46.0" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" 1316 | dependencies = [ 1317 | "overload", 1318 | "winapi", 1319 | ] 1320 | 1321 | [[package]] 1322 | name = "num-conv" 1323 | version = "0.1.0" 1324 | source = "registry+https://github.com/rust-lang/crates.io-index" 1325 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1326 | 1327 | [[package]] 1328 | name = "num-traits" 1329 | version = "0.2.19" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1332 | dependencies = [ 1333 | "autocfg", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "object" 1338 | version = "0.36.7" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1341 | dependencies = [ 1342 | "memchr", 1343 | ] 1344 | 1345 | [[package]] 1346 | name = "once_cell" 1347 | version = "1.20.3" 1348 | source = "registry+https://github.com/rust-lang/crates.io-index" 1349 | checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" 1350 | 1351 | [[package]] 1352 | name = "openssl" 1353 | version = "0.10.71" 1354 | source = "registry+https://github.com/rust-lang/crates.io-index" 1355 | checksum = "5e14130c6a98cd258fdcb0fb6d744152343ff729cbfcb28c656a9d12b999fbcd" 1356 | dependencies = [ 1357 | "bitflags 2.9.0", 1358 | "cfg-if", 1359 | "foreign-types", 1360 | "libc", 1361 | "once_cell", 1362 | "openssl-macros", 1363 | "openssl-sys", 1364 | ] 1365 | 1366 | [[package]] 1367 | name = "openssl-macros" 1368 | version = "0.1.1" 1369 | source = "registry+https://github.com/rust-lang/crates.io-index" 1370 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1371 | dependencies = [ 1372 | "proc-macro2", 1373 | "quote", 1374 | "syn 2.0.99", 1375 | ] 1376 | 1377 | [[package]] 1378 | name = "openssl-probe" 1379 | version = "0.1.6" 1380 | source = "registry+https://github.com/rust-lang/crates.io-index" 1381 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1382 | 1383 | [[package]] 1384 | name = "openssl-sys" 1385 | version = "0.9.106" 1386 | source = "registry+https://github.com/rust-lang/crates.io-index" 1387 | checksum = "8bb61ea9811cc39e3c2069f40b8b8e2e70d8569b361f879786cc7ed48b777cdd" 1388 | dependencies = [ 1389 | "cc", 1390 | "libc", 1391 | "pkg-config", 1392 | "vcpkg", 1393 | ] 1394 | 1395 | [[package]] 1396 | name = "overload" 1397 | version = "0.1.1" 1398 | source = "registry+https://github.com/rust-lang/crates.io-index" 1399 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 1400 | 1401 | [[package]] 1402 | name = "parking_lot" 1403 | version = "0.12.3" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1406 | dependencies = [ 1407 | "lock_api", 1408 | "parking_lot_core", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "parking_lot_core" 1413 | version = "0.9.10" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1416 | dependencies = [ 1417 | "cfg-if", 1418 | "libc", 1419 | "redox_syscall", 1420 | "smallvec", 1421 | "windows-targets 0.52.6", 1422 | ] 1423 | 1424 | [[package]] 1425 | name = "percent-encoding" 1426 | version = "2.3.1" 1427 | source = "registry+https://github.com/rust-lang/crates.io-index" 1428 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1429 | 1430 | [[package]] 1431 | name = "pin-project" 1432 | version = "1.1.10" 1433 | source = "registry+https://github.com/rust-lang/crates.io-index" 1434 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 1435 | dependencies = [ 1436 | "pin-project-internal", 1437 | ] 1438 | 1439 | [[package]] 1440 | name = "pin-project-internal" 1441 | version = "1.1.10" 1442 | source = "registry+https://github.com/rust-lang/crates.io-index" 1443 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 1444 | dependencies = [ 1445 | "proc-macro2", 1446 | "quote", 1447 | "syn 2.0.99", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "pin-project-lite" 1452 | version = "0.2.16" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1455 | 1456 | [[package]] 1457 | name = "pin-utils" 1458 | version = "0.1.0" 1459 | source = "registry+https://github.com/rust-lang/crates.io-index" 1460 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1461 | 1462 | [[package]] 1463 | name = "pkg-config" 1464 | version = "0.3.32" 1465 | source = "registry+https://github.com/rust-lang/crates.io-index" 1466 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1467 | 1468 | [[package]] 1469 | name = "poise" 1470 | version = "0.6.1" 1471 | source = "registry+https://github.com/rust-lang/crates.io-index" 1472 | checksum = "1819d5a45e3590ef33754abce46432570c54a120798bdbf893112b4211fa09a6" 1473 | dependencies = [ 1474 | "async-trait", 1475 | "derivative", 1476 | "futures-util", 1477 | "parking_lot", 1478 | "poise_macros", 1479 | "regex", 1480 | "serenity", 1481 | "tokio", 1482 | "tracing", 1483 | ] 1484 | 1485 | [[package]] 1486 | name = "poise_macros" 1487 | version = "0.6.1" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "8fa2c123c961e78315cd3deac7663177f12be4460f5440dbf62a7ed37b1effea" 1490 | dependencies = [ 1491 | "darling", 1492 | "proc-macro2", 1493 | "quote", 1494 | "syn 2.0.99", 1495 | ] 1496 | 1497 | [[package]] 1498 | name = "powerfmt" 1499 | version = "0.2.0" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1502 | 1503 | [[package]] 1504 | name = "ppv-lite86" 1505 | version = "0.2.20" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1508 | dependencies = [ 1509 | "zerocopy", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "proc-macro-crate" 1514 | version = "3.3.0" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" 1517 | dependencies = [ 1518 | "toml_edit", 1519 | ] 1520 | 1521 | [[package]] 1522 | name = "proc-macro2" 1523 | version = "1.0.94" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" 1526 | dependencies = [ 1527 | "unicode-ident", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "ptr_meta" 1532 | version = "0.1.4" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" 1535 | dependencies = [ 1536 | "ptr_meta_derive", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "ptr_meta_derive" 1541 | version = "0.1.4" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" 1544 | dependencies = [ 1545 | "proc-macro2", 1546 | "quote", 1547 | "syn 1.0.109", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "pulldown-cmark" 1552 | version = "0.9.6" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" 1555 | dependencies = [ 1556 | "bitflags 2.9.0", 1557 | "memchr", 1558 | "unicase", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "quinn" 1563 | version = "0.11.6" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" 1566 | dependencies = [ 1567 | "bytes", 1568 | "pin-project-lite", 1569 | "quinn-proto", 1570 | "quinn-udp", 1571 | "rustc-hash", 1572 | "rustls 0.23.23", 1573 | "socket2", 1574 | "thiserror 2.0.12", 1575 | "tokio", 1576 | "tracing", 1577 | ] 1578 | 1579 | [[package]] 1580 | name = "quinn-proto" 1581 | version = "0.11.9" 1582 | source = "registry+https://github.com/rust-lang/crates.io-index" 1583 | checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" 1584 | dependencies = [ 1585 | "bytes", 1586 | "getrandom 0.2.15", 1587 | "rand", 1588 | "ring", 1589 | "rustc-hash", 1590 | "rustls 0.23.23", 1591 | "rustls-pki-types", 1592 | "slab", 1593 | "thiserror 2.0.12", 1594 | "tinyvec", 1595 | "tracing", 1596 | "web-time", 1597 | ] 1598 | 1599 | [[package]] 1600 | name = "quinn-udp" 1601 | version = "0.5.10" 1602 | source = "registry+https://github.com/rust-lang/crates.io-index" 1603 | checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" 1604 | dependencies = [ 1605 | "cfg_aliases", 1606 | "libc", 1607 | "once_cell", 1608 | "socket2", 1609 | "tracing", 1610 | "windows-sys 0.59.0", 1611 | ] 1612 | 1613 | [[package]] 1614 | name = "quote" 1615 | version = "1.0.39" 1616 | source = "registry+https://github.com/rust-lang/crates.io-index" 1617 | checksum = "c1f1914ce909e1658d9907913b4b91947430c7d9be598b15a1912935b8c04801" 1618 | dependencies = [ 1619 | "proc-macro2", 1620 | ] 1621 | 1622 | [[package]] 1623 | name = "radium" 1624 | version = "0.7.0" 1625 | source = "registry+https://github.com/rust-lang/crates.io-index" 1626 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" 1627 | 1628 | [[package]] 1629 | name = "rand" 1630 | version = "0.8.5" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1633 | dependencies = [ 1634 | "libc", 1635 | "rand_chacha", 1636 | "rand_core", 1637 | ] 1638 | 1639 | [[package]] 1640 | name = "rand_chacha" 1641 | version = "0.3.1" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1644 | dependencies = [ 1645 | "ppv-lite86", 1646 | "rand_core", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "rand_core" 1651 | version = "0.6.4" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1654 | dependencies = [ 1655 | "getrandom 0.2.15", 1656 | ] 1657 | 1658 | [[package]] 1659 | name = "redox_syscall" 1660 | version = "0.5.10" 1661 | source = "registry+https://github.com/rust-lang/crates.io-index" 1662 | checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" 1663 | dependencies = [ 1664 | "bitflags 2.9.0", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "regex" 1669 | version = "1.11.1" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1672 | dependencies = [ 1673 | "aho-corasick", 1674 | "memchr", 1675 | "regex-automata 0.4.9", 1676 | "regex-syntax 0.8.5", 1677 | ] 1678 | 1679 | [[package]] 1680 | name = "regex-automata" 1681 | version = "0.1.10" 1682 | source = "registry+https://github.com/rust-lang/crates.io-index" 1683 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1684 | dependencies = [ 1685 | "regex-syntax 0.6.29", 1686 | ] 1687 | 1688 | [[package]] 1689 | name = "regex-automata" 1690 | version = "0.4.9" 1691 | source = "registry+https://github.com/rust-lang/crates.io-index" 1692 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1693 | dependencies = [ 1694 | "aho-corasick", 1695 | "memchr", 1696 | "regex-syntax 0.8.5", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "regex-syntax" 1701 | version = "0.6.29" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1704 | 1705 | [[package]] 1706 | name = "regex-syntax" 1707 | version = "0.8.5" 1708 | source = "registry+https://github.com/rust-lang/crates.io-index" 1709 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1710 | 1711 | [[package]] 1712 | name = "rend" 1713 | version = "0.4.2" 1714 | source = "registry+https://github.com/rust-lang/crates.io-index" 1715 | checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" 1716 | dependencies = [ 1717 | "bytecheck", 1718 | ] 1719 | 1720 | [[package]] 1721 | name = "reqwest" 1722 | version = "0.11.27" 1723 | source = "registry+https://github.com/rust-lang/crates.io-index" 1724 | checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" 1725 | dependencies = [ 1726 | "base64 0.21.7", 1727 | "bytes", 1728 | "encoding_rs", 1729 | "futures-core", 1730 | "futures-util", 1731 | "h2", 1732 | "http 0.2.12", 1733 | "http-body 0.4.6", 1734 | "hyper 0.14.32", 1735 | "hyper-rustls 0.24.2", 1736 | "ipnet", 1737 | "js-sys", 1738 | "log", 1739 | "mime", 1740 | "mime_guess", 1741 | "once_cell", 1742 | "percent-encoding", 1743 | "pin-project-lite", 1744 | "rustls 0.21.12", 1745 | "rustls-pemfile 1.0.4", 1746 | "serde", 1747 | "serde_json", 1748 | "serde_urlencoded", 1749 | "sync_wrapper 0.1.2", 1750 | "system-configuration", 1751 | "tokio", 1752 | "tokio-rustls 0.24.1", 1753 | "tokio-util", 1754 | "tower-service", 1755 | "url", 1756 | "wasm-bindgen", 1757 | "wasm-bindgen-futures", 1758 | "wasm-streams", 1759 | "web-sys", 1760 | "webpki-roots 0.25.4", 1761 | "winreg", 1762 | ] 1763 | 1764 | [[package]] 1765 | name = "reqwest" 1766 | version = "0.12.12" 1767 | source = "registry+https://github.com/rust-lang/crates.io-index" 1768 | checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" 1769 | dependencies = [ 1770 | "base64 0.22.1", 1771 | "bytes", 1772 | "futures-core", 1773 | "futures-util", 1774 | "http 1.2.0", 1775 | "http-body 1.0.1", 1776 | "http-body-util", 1777 | "hyper 1.6.0", 1778 | "hyper-rustls 0.27.5", 1779 | "hyper-tls", 1780 | "hyper-util", 1781 | "ipnet", 1782 | "js-sys", 1783 | "log", 1784 | "mime", 1785 | "mime_guess", 1786 | "native-tls", 1787 | "once_cell", 1788 | "percent-encoding", 1789 | "pin-project-lite", 1790 | "quinn", 1791 | "rustls 0.23.23", 1792 | "rustls-pemfile 2.2.0", 1793 | "rustls-pki-types", 1794 | "serde", 1795 | "serde_json", 1796 | "serde_urlencoded", 1797 | "sync_wrapper 1.0.2", 1798 | "tokio", 1799 | "tokio-native-tls", 1800 | "tokio-rustls 0.26.2", 1801 | "tokio-socks", 1802 | "tokio-util", 1803 | "tower", 1804 | "tower-service", 1805 | "url", 1806 | "wasm-bindgen", 1807 | "wasm-bindgen-futures", 1808 | "wasm-streams", 1809 | "web-sys", 1810 | "webpki-roots 0.26.8", 1811 | "windows-registry", 1812 | ] 1813 | 1814 | [[package]] 1815 | name = "ring" 1816 | version = "0.17.13" 1817 | source = "registry+https://github.com/rust-lang/crates.io-index" 1818 | checksum = "70ac5d832aa16abd7d1def883a8545280c20a60f523a370aa3a9617c2b8550ee" 1819 | dependencies = [ 1820 | "cc", 1821 | "cfg-if", 1822 | "getrandom 0.2.15", 1823 | "libc", 1824 | "untrusted", 1825 | "windows-sys 0.52.0", 1826 | ] 1827 | 1828 | [[package]] 1829 | name = "rkyv" 1830 | version = "0.7.45" 1831 | source = "registry+https://github.com/rust-lang/crates.io-index" 1832 | checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" 1833 | dependencies = [ 1834 | "bitvec", 1835 | "bytecheck", 1836 | "bytes", 1837 | "hashbrown 0.12.3", 1838 | "ptr_meta", 1839 | "rend", 1840 | "rkyv_derive", 1841 | "seahash", 1842 | "tinyvec", 1843 | "uuid", 1844 | ] 1845 | 1846 | [[package]] 1847 | name = "rkyv_derive" 1848 | version = "0.7.45" 1849 | source = "registry+https://github.com/rust-lang/crates.io-index" 1850 | checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" 1851 | dependencies = [ 1852 | "proc-macro2", 1853 | "quote", 1854 | "syn 1.0.109", 1855 | ] 1856 | 1857 | [[package]] 1858 | name = "rspotify" 1859 | version = "0.13.3" 1860 | source = "registry+https://github.com/rust-lang/crates.io-index" 1861 | checksum = "71aa4a990ef1bacbed874fbab621e16c61a8b5a56854ada6b2bcccf19acb5795" 1862 | dependencies = [ 1863 | "async-stream", 1864 | "async-trait", 1865 | "base64 0.22.1", 1866 | "chrono", 1867 | "futures", 1868 | "getrandom 0.2.15", 1869 | "log", 1870 | "maybe-async", 1871 | "rspotify-http", 1872 | "rspotify-macros", 1873 | "rspotify-model", 1874 | "serde", 1875 | "serde_json", 1876 | "sha2", 1877 | "thiserror 1.0.69", 1878 | "url", 1879 | ] 1880 | 1881 | [[package]] 1882 | name = "rspotify-http" 1883 | version = "0.13.3" 1884 | source = "registry+https://github.com/rust-lang/crates.io-index" 1885 | checksum = "a193f73ee55ab66aeb0337170d120bc73ec4963b150d9c66d68b28d14bc5ac5f" 1886 | dependencies = [ 1887 | "async-trait", 1888 | "log", 1889 | "maybe-async", 1890 | "reqwest 0.12.12", 1891 | "serde_json", 1892 | "thiserror 1.0.69", 1893 | ] 1894 | 1895 | [[package]] 1896 | name = "rspotify-macros" 1897 | version = "0.13.3" 1898 | source = "registry+https://github.com/rust-lang/crates.io-index" 1899 | checksum = "b78387b0ebb8da6d4c72e728496b09701b7054c0ef88ea2f4f40e46b9107a6de" 1900 | 1901 | [[package]] 1902 | name = "rspotify-model" 1903 | version = "0.13.3" 1904 | source = "registry+https://github.com/rust-lang/crates.io-index" 1905 | checksum = "1b6ce0f0ecf4eb3b0b8ab7c6932328d03040dd77169b1c533a3ead1308985af6" 1906 | dependencies = [ 1907 | "chrono", 1908 | "enum_dispatch", 1909 | "serde", 1910 | "serde_json", 1911 | "strum", 1912 | "thiserror 1.0.69", 1913 | ] 1914 | 1915 | [[package]] 1916 | name = "rust_decimal" 1917 | version = "1.36.0" 1918 | source = "registry+https://github.com/rust-lang/crates.io-index" 1919 | checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" 1920 | dependencies = [ 1921 | "arrayvec", 1922 | "borsh", 1923 | "bytes", 1924 | "num-traits", 1925 | "rand", 1926 | "rkyv", 1927 | "serde", 1928 | "serde_json", 1929 | ] 1930 | 1931 | [[package]] 1932 | name = "rustc-demangle" 1933 | version = "0.1.24" 1934 | source = "registry+https://github.com/rust-lang/crates.io-index" 1935 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1936 | 1937 | [[package]] 1938 | name = "rustc-hash" 1939 | version = "2.1.1" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 1942 | 1943 | [[package]] 1944 | name = "rustix" 1945 | version = "1.0.1" 1946 | source = "registry+https://github.com/rust-lang/crates.io-index" 1947 | checksum = "dade4812df5c384711475be5fcd8c162555352945401aed22a35bffeab61f657" 1948 | dependencies = [ 1949 | "bitflags 2.9.0", 1950 | "errno", 1951 | "libc", 1952 | "linux-raw-sys", 1953 | "windows-sys 0.59.0", 1954 | ] 1955 | 1956 | [[package]] 1957 | name = "rustls" 1958 | version = "0.21.12" 1959 | source = "registry+https://github.com/rust-lang/crates.io-index" 1960 | checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 1961 | dependencies = [ 1962 | "log", 1963 | "ring", 1964 | "rustls-webpki 0.101.7", 1965 | "sct", 1966 | ] 1967 | 1968 | [[package]] 1969 | name = "rustls" 1970 | version = "0.22.4" 1971 | source = "registry+https://github.com/rust-lang/crates.io-index" 1972 | checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" 1973 | dependencies = [ 1974 | "log", 1975 | "ring", 1976 | "rustls-pki-types", 1977 | "rustls-webpki 0.102.8", 1978 | "subtle", 1979 | "zeroize", 1980 | ] 1981 | 1982 | [[package]] 1983 | name = "rustls" 1984 | version = "0.23.23" 1985 | source = "registry+https://github.com/rust-lang/crates.io-index" 1986 | checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" 1987 | dependencies = [ 1988 | "once_cell", 1989 | "ring", 1990 | "rustls-pki-types", 1991 | "rustls-webpki 0.102.8", 1992 | "subtle", 1993 | "zeroize", 1994 | ] 1995 | 1996 | [[package]] 1997 | name = "rustls-pemfile" 1998 | version = "1.0.4" 1999 | source = "registry+https://github.com/rust-lang/crates.io-index" 2000 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 2001 | dependencies = [ 2002 | "base64 0.21.7", 2003 | ] 2004 | 2005 | [[package]] 2006 | name = "rustls-pemfile" 2007 | version = "2.2.0" 2008 | source = "registry+https://github.com/rust-lang/crates.io-index" 2009 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 2010 | dependencies = [ 2011 | "rustls-pki-types", 2012 | ] 2013 | 2014 | [[package]] 2015 | name = "rustls-pki-types" 2016 | version = "1.11.0" 2017 | source = "registry+https://github.com/rust-lang/crates.io-index" 2018 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 2019 | dependencies = [ 2020 | "web-time", 2021 | ] 2022 | 2023 | [[package]] 2024 | name = "rustls-webpki" 2025 | version = "0.101.7" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 2028 | dependencies = [ 2029 | "ring", 2030 | "untrusted", 2031 | ] 2032 | 2033 | [[package]] 2034 | name = "rustls-webpki" 2035 | version = "0.102.8" 2036 | source = "registry+https://github.com/rust-lang/crates.io-index" 2037 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 2038 | dependencies = [ 2039 | "ring", 2040 | "rustls-pki-types", 2041 | "untrusted", 2042 | ] 2043 | 2044 | [[package]] 2045 | name = "rustversion" 2046 | version = "1.0.20" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" 2049 | 2050 | [[package]] 2051 | name = "ryu" 2052 | version = "1.0.20" 2053 | source = "registry+https://github.com/rust-lang/crates.io-index" 2054 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 2055 | 2056 | [[package]] 2057 | name = "same-file" 2058 | version = "1.0.6" 2059 | source = "registry+https://github.com/rust-lang/crates.io-index" 2060 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2061 | dependencies = [ 2062 | "winapi-util", 2063 | ] 2064 | 2065 | [[package]] 2066 | name = "schannel" 2067 | version = "0.1.27" 2068 | source = "registry+https://github.com/rust-lang/crates.io-index" 2069 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 2070 | dependencies = [ 2071 | "windows-sys 0.59.0", 2072 | ] 2073 | 2074 | [[package]] 2075 | name = "scopeguard" 2076 | version = "1.2.0" 2077 | source = "registry+https://github.com/rust-lang/crates.io-index" 2078 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2079 | 2080 | [[package]] 2081 | name = "sct" 2082 | version = "0.7.1" 2083 | source = "registry+https://github.com/rust-lang/crates.io-index" 2084 | checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 2085 | dependencies = [ 2086 | "ring", 2087 | "untrusted", 2088 | ] 2089 | 2090 | [[package]] 2091 | name = "seahash" 2092 | version = "4.1.0" 2093 | source = "registry+https://github.com/rust-lang/crates.io-index" 2094 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" 2095 | 2096 | [[package]] 2097 | name = "secrecy" 2098 | version = "0.8.0" 2099 | source = "registry+https://github.com/rust-lang/crates.io-index" 2100 | checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" 2101 | dependencies = [ 2102 | "serde", 2103 | "zeroize", 2104 | ] 2105 | 2106 | [[package]] 2107 | name = "security-framework" 2108 | version = "2.11.1" 2109 | source = "registry+https://github.com/rust-lang/crates.io-index" 2110 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2111 | dependencies = [ 2112 | "bitflags 2.9.0", 2113 | "core-foundation", 2114 | "core-foundation-sys", 2115 | "libc", 2116 | "security-framework-sys", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "security-framework-sys" 2121 | version = "2.14.0" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 2124 | dependencies = [ 2125 | "core-foundation-sys", 2126 | "libc", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "semver" 2131 | version = "1.0.26" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 2134 | dependencies = [ 2135 | "serde", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "serde" 2140 | version = "1.0.218" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" 2143 | dependencies = [ 2144 | "serde_derive", 2145 | ] 2146 | 2147 | [[package]] 2148 | name = "serde_cow" 2149 | version = "0.1.2" 2150 | source = "registry+https://github.com/rust-lang/crates.io-index" 2151 | checksum = "1e7bbbec7196bfde255ab54b65e34087c0849629280028238e67ee25d6a4b7da" 2152 | dependencies = [ 2153 | "serde", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "serde_derive" 2158 | version = "1.0.218" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" 2161 | dependencies = [ 2162 | "proc-macro2", 2163 | "quote", 2164 | "syn 2.0.99", 2165 | ] 2166 | 2167 | [[package]] 2168 | name = "serde_json" 2169 | version = "1.0.140" 2170 | source = "registry+https://github.com/rust-lang/crates.io-index" 2171 | checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" 2172 | dependencies = [ 2173 | "itoa", 2174 | "memchr", 2175 | "ryu", 2176 | "serde", 2177 | ] 2178 | 2179 | [[package]] 2180 | name = "serde_spanned" 2181 | version = "0.6.8" 2182 | source = "registry+https://github.com/rust-lang/crates.io-index" 2183 | checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" 2184 | dependencies = [ 2185 | "serde", 2186 | ] 2187 | 2188 | [[package]] 2189 | name = "serde_urlencoded" 2190 | version = "0.7.1" 2191 | source = "registry+https://github.com/rust-lang/crates.io-index" 2192 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2193 | dependencies = [ 2194 | "form_urlencoded", 2195 | "itoa", 2196 | "ryu", 2197 | "serde", 2198 | ] 2199 | 2200 | [[package]] 2201 | name = "serenity" 2202 | version = "0.12.4" 2203 | source = "registry+https://github.com/rust-lang/crates.io-index" 2204 | checksum = "3d72ec4323681bf9a3cabe40fd080abc2435859b502a1b5aa9bf693f125bfa76" 2205 | dependencies = [ 2206 | "arrayvec", 2207 | "async-trait", 2208 | "base64 0.22.1", 2209 | "bitflags 2.9.0", 2210 | "bytes", 2211 | "chrono", 2212 | "command_attr", 2213 | "dashmap", 2214 | "flate2", 2215 | "futures", 2216 | "fxhash", 2217 | "levenshtein", 2218 | "mime_guess", 2219 | "parking_lot", 2220 | "percent-encoding", 2221 | "reqwest 0.11.27", 2222 | "secrecy", 2223 | "serde", 2224 | "serde_cow", 2225 | "serde_json", 2226 | "static_assertions", 2227 | "time", 2228 | "tokio", 2229 | "tokio-tungstenite", 2230 | "tracing", 2231 | "typemap_rev", 2232 | "typesize", 2233 | "url", 2234 | "uwl", 2235 | ] 2236 | 2237 | [[package]] 2238 | name = "sha1" 2239 | version = "0.10.6" 2240 | source = "registry+https://github.com/rust-lang/crates.io-index" 2241 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 2242 | dependencies = [ 2243 | "cfg-if", 2244 | "cpufeatures", 2245 | "digest", 2246 | ] 2247 | 2248 | [[package]] 2249 | name = "sha2" 2250 | version = "0.10.8" 2251 | source = "registry+https://github.com/rust-lang/crates.io-index" 2252 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 2253 | dependencies = [ 2254 | "cfg-if", 2255 | "cpufeatures", 2256 | "digest", 2257 | ] 2258 | 2259 | [[package]] 2260 | name = "sharded-slab" 2261 | version = "0.1.7" 2262 | source = "registry+https://github.com/rust-lang/crates.io-index" 2263 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2264 | dependencies = [ 2265 | "lazy_static", 2266 | ] 2267 | 2268 | [[package]] 2269 | name = "shlex" 2270 | version = "1.3.0" 2271 | source = "registry+https://github.com/rust-lang/crates.io-index" 2272 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2273 | 2274 | [[package]] 2275 | name = "signal-hook-registry" 2276 | version = "1.4.2" 2277 | source = "registry+https://github.com/rust-lang/crates.io-index" 2278 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 2279 | dependencies = [ 2280 | "libc", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "simdutf8" 2285 | version = "0.1.5" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 2288 | 2289 | [[package]] 2290 | name = "skeptic" 2291 | version = "0.13.7" 2292 | source = "registry+https://github.com/rust-lang/crates.io-index" 2293 | checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" 2294 | dependencies = [ 2295 | "bytecount", 2296 | "cargo_metadata", 2297 | "error-chain", 2298 | "glob", 2299 | "pulldown-cmark", 2300 | "tempfile", 2301 | "walkdir", 2302 | ] 2303 | 2304 | [[package]] 2305 | name = "slab" 2306 | version = "0.4.9" 2307 | source = "registry+https://github.com/rust-lang/crates.io-index" 2308 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 2309 | dependencies = [ 2310 | "autocfg", 2311 | ] 2312 | 2313 | [[package]] 2314 | name = "smallvec" 2315 | version = "1.14.0" 2316 | source = "registry+https://github.com/rust-lang/crates.io-index" 2317 | checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" 2318 | 2319 | [[package]] 2320 | name = "socket2" 2321 | version = "0.5.8" 2322 | source = "registry+https://github.com/rust-lang/crates.io-index" 2323 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 2324 | dependencies = [ 2325 | "libc", 2326 | "windows-sys 0.52.0", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "stable_deref_trait" 2331 | version = "1.2.0" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2334 | 2335 | [[package]] 2336 | name = "static_assertions" 2337 | version = "1.1.0" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2340 | 2341 | [[package]] 2342 | name = "strsim" 2343 | version = "0.11.1" 2344 | source = "registry+https://github.com/rust-lang/crates.io-index" 2345 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2346 | 2347 | [[package]] 2348 | name = "strum" 2349 | version = "0.26.3" 2350 | source = "registry+https://github.com/rust-lang/crates.io-index" 2351 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" 2352 | dependencies = [ 2353 | "strum_macros", 2354 | ] 2355 | 2356 | [[package]] 2357 | name = "strum_macros" 2358 | version = "0.26.4" 2359 | source = "registry+https://github.com/rust-lang/crates.io-index" 2360 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" 2361 | dependencies = [ 2362 | "heck", 2363 | "proc-macro2", 2364 | "quote", 2365 | "rustversion", 2366 | "syn 2.0.99", 2367 | ] 2368 | 2369 | [[package]] 2370 | name = "subtle" 2371 | version = "2.6.1" 2372 | source = "registry+https://github.com/rust-lang/crates.io-index" 2373 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2374 | 2375 | [[package]] 2376 | name = "syn" 2377 | version = "1.0.109" 2378 | source = "registry+https://github.com/rust-lang/crates.io-index" 2379 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 2380 | dependencies = [ 2381 | "proc-macro2", 2382 | "quote", 2383 | "unicode-ident", 2384 | ] 2385 | 2386 | [[package]] 2387 | name = "syn" 2388 | version = "2.0.99" 2389 | source = "registry+https://github.com/rust-lang/crates.io-index" 2390 | checksum = "e02e925281e18ffd9d640e234264753c43edc62d64b2d4cf898f1bc5e75f3fc2" 2391 | dependencies = [ 2392 | "proc-macro2", 2393 | "quote", 2394 | "unicode-ident", 2395 | ] 2396 | 2397 | [[package]] 2398 | name = "sync_wrapper" 2399 | version = "0.1.2" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" 2402 | 2403 | [[package]] 2404 | name = "sync_wrapper" 2405 | version = "1.0.2" 2406 | source = "registry+https://github.com/rust-lang/crates.io-index" 2407 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 2408 | dependencies = [ 2409 | "futures-core", 2410 | ] 2411 | 2412 | [[package]] 2413 | name = "synstructure" 2414 | version = "0.13.1" 2415 | source = "registry+https://github.com/rust-lang/crates.io-index" 2416 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2417 | dependencies = [ 2418 | "proc-macro2", 2419 | "quote", 2420 | "syn 2.0.99", 2421 | ] 2422 | 2423 | [[package]] 2424 | name = "system-configuration" 2425 | version = "0.5.1" 2426 | source = "registry+https://github.com/rust-lang/crates.io-index" 2427 | checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" 2428 | dependencies = [ 2429 | "bitflags 1.3.2", 2430 | "core-foundation", 2431 | "system-configuration-sys", 2432 | ] 2433 | 2434 | [[package]] 2435 | name = "system-configuration-sys" 2436 | version = "0.5.0" 2437 | source = "registry+https://github.com/rust-lang/crates.io-index" 2438 | checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" 2439 | dependencies = [ 2440 | "core-foundation-sys", 2441 | "libc", 2442 | ] 2443 | 2444 | [[package]] 2445 | name = "tagptr" 2446 | version = "0.2.0" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 2449 | 2450 | [[package]] 2451 | name = "taliyah" 2452 | version = "0.7.0-alpha" 2453 | dependencies = [ 2454 | "anyhow", 2455 | "byte-unit", 2456 | "chrono", 2457 | "humantime", 2458 | "itertools", 2459 | "poise", 2460 | "rand", 2461 | "reqwest 0.12.12", 2462 | "rspotify", 2463 | "serde", 2464 | "serde_json", 2465 | "serenity", 2466 | "tokio", 2467 | "toml", 2468 | "tracing", 2469 | "tracing-futures", 2470 | "tracing-log", 2471 | "tracing-subscriber", 2472 | ] 2473 | 2474 | [[package]] 2475 | name = "tap" 2476 | version = "1.0.1" 2477 | source = "registry+https://github.com/rust-lang/crates.io-index" 2478 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" 2479 | 2480 | [[package]] 2481 | name = "tempfile" 2482 | version = "3.18.0" 2483 | source = "registry+https://github.com/rust-lang/crates.io-index" 2484 | checksum = "2c317e0a526ee6120d8dabad239c8dadca62b24b6f168914bbbc8e2fb1f0e567" 2485 | dependencies = [ 2486 | "cfg-if", 2487 | "fastrand", 2488 | "getrandom 0.3.1", 2489 | "once_cell", 2490 | "rustix", 2491 | "windows-sys 0.59.0", 2492 | ] 2493 | 2494 | [[package]] 2495 | name = "thiserror" 2496 | version = "1.0.69" 2497 | source = "registry+https://github.com/rust-lang/crates.io-index" 2498 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2499 | dependencies = [ 2500 | "thiserror-impl 1.0.69", 2501 | ] 2502 | 2503 | [[package]] 2504 | name = "thiserror" 2505 | version = "2.0.12" 2506 | source = "registry+https://github.com/rust-lang/crates.io-index" 2507 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 2508 | dependencies = [ 2509 | "thiserror-impl 2.0.12", 2510 | ] 2511 | 2512 | [[package]] 2513 | name = "thiserror-impl" 2514 | version = "1.0.69" 2515 | source = "registry+https://github.com/rust-lang/crates.io-index" 2516 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2517 | dependencies = [ 2518 | "proc-macro2", 2519 | "quote", 2520 | "syn 2.0.99", 2521 | ] 2522 | 2523 | [[package]] 2524 | name = "thiserror-impl" 2525 | version = "2.0.12" 2526 | source = "registry+https://github.com/rust-lang/crates.io-index" 2527 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 2528 | dependencies = [ 2529 | "proc-macro2", 2530 | "quote", 2531 | "syn 2.0.99", 2532 | ] 2533 | 2534 | [[package]] 2535 | name = "thread_local" 2536 | version = "1.1.8" 2537 | source = "registry+https://github.com/rust-lang/crates.io-index" 2538 | checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" 2539 | dependencies = [ 2540 | "cfg-if", 2541 | "once_cell", 2542 | ] 2543 | 2544 | [[package]] 2545 | name = "time" 2546 | version = "0.3.39" 2547 | source = "registry+https://github.com/rust-lang/crates.io-index" 2548 | checksum = "dad298b01a40a23aac4580b67e3dbedb7cc8402f3592d7f49469de2ea4aecdd8" 2549 | dependencies = [ 2550 | "deranged", 2551 | "itoa", 2552 | "num-conv", 2553 | "powerfmt", 2554 | "serde", 2555 | "time-core", 2556 | "time-macros", 2557 | ] 2558 | 2559 | [[package]] 2560 | name = "time-core" 2561 | version = "0.1.3" 2562 | source = "registry+https://github.com/rust-lang/crates.io-index" 2563 | checksum = "765c97a5b985b7c11d7bc27fa927dc4fe6af3a6dfb021d28deb60d3bf51e76ef" 2564 | 2565 | [[package]] 2566 | name = "time-macros" 2567 | version = "0.2.20" 2568 | source = "registry+https://github.com/rust-lang/crates.io-index" 2569 | checksum = "e8093bc3e81c3bc5f7879de09619d06c9a5a5e45ca44dfeeb7225bae38005c5c" 2570 | dependencies = [ 2571 | "num-conv", 2572 | "time-core", 2573 | ] 2574 | 2575 | [[package]] 2576 | name = "tinystr" 2577 | version = "0.7.6" 2578 | source = "registry+https://github.com/rust-lang/crates.io-index" 2579 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2580 | dependencies = [ 2581 | "displaydoc", 2582 | "zerovec", 2583 | ] 2584 | 2585 | [[package]] 2586 | name = "tinyvec" 2587 | version = "1.9.0" 2588 | source = "registry+https://github.com/rust-lang/crates.io-index" 2589 | checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" 2590 | dependencies = [ 2591 | "tinyvec_macros", 2592 | ] 2593 | 2594 | [[package]] 2595 | name = "tinyvec_macros" 2596 | version = "0.1.1" 2597 | source = "registry+https://github.com/rust-lang/crates.io-index" 2598 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2599 | 2600 | [[package]] 2601 | name = "tokio" 2602 | version = "1.44.0" 2603 | source = "registry+https://github.com/rust-lang/crates.io-index" 2604 | checksum = "9975ea0f48b5aa3972bf2d888c238182458437cc2a19374b81b25cdf1023fb3a" 2605 | dependencies = [ 2606 | "backtrace", 2607 | "bytes", 2608 | "libc", 2609 | "mio", 2610 | "parking_lot", 2611 | "pin-project-lite", 2612 | "signal-hook-registry", 2613 | "socket2", 2614 | "tokio-macros", 2615 | "windows-sys 0.52.0", 2616 | ] 2617 | 2618 | [[package]] 2619 | name = "tokio-macros" 2620 | version = "2.5.0" 2621 | source = "registry+https://github.com/rust-lang/crates.io-index" 2622 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 2623 | dependencies = [ 2624 | "proc-macro2", 2625 | "quote", 2626 | "syn 2.0.99", 2627 | ] 2628 | 2629 | [[package]] 2630 | name = "tokio-native-tls" 2631 | version = "0.3.1" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 2634 | dependencies = [ 2635 | "native-tls", 2636 | "tokio", 2637 | ] 2638 | 2639 | [[package]] 2640 | name = "tokio-rustls" 2641 | version = "0.24.1" 2642 | source = "registry+https://github.com/rust-lang/crates.io-index" 2643 | checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" 2644 | dependencies = [ 2645 | "rustls 0.21.12", 2646 | "tokio", 2647 | ] 2648 | 2649 | [[package]] 2650 | name = "tokio-rustls" 2651 | version = "0.25.0" 2652 | source = "registry+https://github.com/rust-lang/crates.io-index" 2653 | checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" 2654 | dependencies = [ 2655 | "rustls 0.22.4", 2656 | "rustls-pki-types", 2657 | "tokio", 2658 | ] 2659 | 2660 | [[package]] 2661 | name = "tokio-rustls" 2662 | version = "0.26.2" 2663 | source = "registry+https://github.com/rust-lang/crates.io-index" 2664 | checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 2665 | dependencies = [ 2666 | "rustls 0.23.23", 2667 | "tokio", 2668 | ] 2669 | 2670 | [[package]] 2671 | name = "tokio-socks" 2672 | version = "0.5.2" 2673 | source = "registry+https://github.com/rust-lang/crates.io-index" 2674 | checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" 2675 | dependencies = [ 2676 | "either", 2677 | "futures-util", 2678 | "thiserror 1.0.69", 2679 | "tokio", 2680 | ] 2681 | 2682 | [[package]] 2683 | name = "tokio-tungstenite" 2684 | version = "0.21.0" 2685 | source = "registry+https://github.com/rust-lang/crates.io-index" 2686 | checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" 2687 | dependencies = [ 2688 | "futures-util", 2689 | "log", 2690 | "rustls 0.22.4", 2691 | "rustls-pki-types", 2692 | "tokio", 2693 | "tokio-rustls 0.25.0", 2694 | "tungstenite", 2695 | "webpki-roots 0.26.8", 2696 | ] 2697 | 2698 | [[package]] 2699 | name = "tokio-util" 2700 | version = "0.7.13" 2701 | source = "registry+https://github.com/rust-lang/crates.io-index" 2702 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 2703 | dependencies = [ 2704 | "bytes", 2705 | "futures-core", 2706 | "futures-sink", 2707 | "pin-project-lite", 2708 | "tokio", 2709 | ] 2710 | 2711 | [[package]] 2712 | name = "toml" 2713 | version = "0.8.20" 2714 | source = "registry+https://github.com/rust-lang/crates.io-index" 2715 | checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" 2716 | dependencies = [ 2717 | "serde", 2718 | "serde_spanned", 2719 | "toml_datetime", 2720 | "toml_edit", 2721 | ] 2722 | 2723 | [[package]] 2724 | name = "toml_datetime" 2725 | version = "0.6.8" 2726 | source = "registry+https://github.com/rust-lang/crates.io-index" 2727 | checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" 2728 | dependencies = [ 2729 | "serde", 2730 | ] 2731 | 2732 | [[package]] 2733 | name = "toml_edit" 2734 | version = "0.22.24" 2735 | source = "registry+https://github.com/rust-lang/crates.io-index" 2736 | checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" 2737 | dependencies = [ 2738 | "indexmap", 2739 | "serde", 2740 | "serde_spanned", 2741 | "toml_datetime", 2742 | "winnow", 2743 | ] 2744 | 2745 | [[package]] 2746 | name = "tower" 2747 | version = "0.5.2" 2748 | source = "registry+https://github.com/rust-lang/crates.io-index" 2749 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 2750 | dependencies = [ 2751 | "futures-core", 2752 | "futures-util", 2753 | "pin-project-lite", 2754 | "sync_wrapper 1.0.2", 2755 | "tokio", 2756 | "tower-layer", 2757 | "tower-service", 2758 | ] 2759 | 2760 | [[package]] 2761 | name = "tower-layer" 2762 | version = "0.3.3" 2763 | source = "registry+https://github.com/rust-lang/crates.io-index" 2764 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 2765 | 2766 | [[package]] 2767 | name = "tower-service" 2768 | version = "0.3.3" 2769 | source = "registry+https://github.com/rust-lang/crates.io-index" 2770 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2771 | 2772 | [[package]] 2773 | name = "tracing" 2774 | version = "0.1.41" 2775 | source = "registry+https://github.com/rust-lang/crates.io-index" 2776 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2777 | dependencies = [ 2778 | "log", 2779 | "pin-project-lite", 2780 | "tracing-attributes", 2781 | "tracing-core", 2782 | ] 2783 | 2784 | [[package]] 2785 | name = "tracing-attributes" 2786 | version = "0.1.28" 2787 | source = "registry+https://github.com/rust-lang/crates.io-index" 2788 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 2789 | dependencies = [ 2790 | "proc-macro2", 2791 | "quote", 2792 | "syn 2.0.99", 2793 | ] 2794 | 2795 | [[package]] 2796 | name = "tracing-core" 2797 | version = "0.1.33" 2798 | source = "registry+https://github.com/rust-lang/crates.io-index" 2799 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2800 | dependencies = [ 2801 | "once_cell", 2802 | "valuable", 2803 | ] 2804 | 2805 | [[package]] 2806 | name = "tracing-futures" 2807 | version = "0.2.5" 2808 | source = "registry+https://github.com/rust-lang/crates.io-index" 2809 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" 2810 | dependencies = [ 2811 | "pin-project", 2812 | "tracing", 2813 | ] 2814 | 2815 | [[package]] 2816 | name = "tracing-log" 2817 | version = "0.2.0" 2818 | source = "registry+https://github.com/rust-lang/crates.io-index" 2819 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 2820 | dependencies = [ 2821 | "log", 2822 | "once_cell", 2823 | "tracing-core", 2824 | ] 2825 | 2826 | [[package]] 2827 | name = "tracing-subscriber" 2828 | version = "0.3.19" 2829 | source = "registry+https://github.com/rust-lang/crates.io-index" 2830 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 2831 | dependencies = [ 2832 | "matchers", 2833 | "nu-ansi-term", 2834 | "once_cell", 2835 | "regex", 2836 | "sharded-slab", 2837 | "smallvec", 2838 | "thread_local", 2839 | "tracing", 2840 | "tracing-core", 2841 | "tracing-log", 2842 | ] 2843 | 2844 | [[package]] 2845 | name = "triomphe" 2846 | version = "0.1.14" 2847 | source = "registry+https://github.com/rust-lang/crates.io-index" 2848 | checksum = "ef8f7726da4807b58ea5c96fdc122f80702030edc33b35aff9190a51148ccc85" 2849 | 2850 | [[package]] 2851 | name = "try-lock" 2852 | version = "0.2.5" 2853 | source = "registry+https://github.com/rust-lang/crates.io-index" 2854 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2855 | 2856 | [[package]] 2857 | name = "tungstenite" 2858 | version = "0.21.0" 2859 | source = "registry+https://github.com/rust-lang/crates.io-index" 2860 | checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" 2861 | dependencies = [ 2862 | "byteorder", 2863 | "bytes", 2864 | "data-encoding", 2865 | "http 1.2.0", 2866 | "httparse", 2867 | "log", 2868 | "rand", 2869 | "rustls 0.22.4", 2870 | "rustls-pki-types", 2871 | "sha1", 2872 | "thiserror 1.0.69", 2873 | "url", 2874 | "utf-8", 2875 | ] 2876 | 2877 | [[package]] 2878 | name = "typemap_rev" 2879 | version = "0.3.0" 2880 | source = "registry+https://github.com/rust-lang/crates.io-index" 2881 | checksum = "74b08b0c1257381af16a5c3605254d529d3e7e109f3c62befc5d168968192998" 2882 | 2883 | [[package]] 2884 | name = "typenum" 2885 | version = "1.18.0" 2886 | source = "registry+https://github.com/rust-lang/crates.io-index" 2887 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 2888 | 2889 | [[package]] 2890 | name = "typesize" 2891 | version = "0.1.13" 2892 | source = "registry+https://github.com/rust-lang/crates.io-index" 2893 | checksum = "e29e4cac0f1acdbbe7b4deb46876a04246dc6abf60b6f2587bef8ae327cd134c" 2894 | dependencies = [ 2895 | "chrono", 2896 | "dashmap", 2897 | "hashbrown 0.14.5", 2898 | "mini-moka", 2899 | "parking_lot", 2900 | "secrecy", 2901 | "serde_json", 2902 | "time", 2903 | "typesize-derive", 2904 | "url", 2905 | ] 2906 | 2907 | [[package]] 2908 | name = "typesize-derive" 2909 | version = "0.1.11" 2910 | source = "registry+https://github.com/rust-lang/crates.io-index" 2911 | checksum = "536b6812192bda8551cfa0e52524e328c6a951b48e66529ee4522d6c721243d6" 2912 | dependencies = [ 2913 | "proc-macro2", 2914 | "quote", 2915 | "syn 2.0.99", 2916 | ] 2917 | 2918 | [[package]] 2919 | name = "unicase" 2920 | version = "2.8.1" 2921 | source = "registry+https://github.com/rust-lang/crates.io-index" 2922 | checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 2923 | 2924 | [[package]] 2925 | name = "unicode-ident" 2926 | version = "1.0.18" 2927 | source = "registry+https://github.com/rust-lang/crates.io-index" 2928 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 2929 | 2930 | [[package]] 2931 | name = "untrusted" 2932 | version = "0.9.0" 2933 | source = "registry+https://github.com/rust-lang/crates.io-index" 2934 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2935 | 2936 | [[package]] 2937 | name = "url" 2938 | version = "2.5.4" 2939 | source = "registry+https://github.com/rust-lang/crates.io-index" 2940 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2941 | dependencies = [ 2942 | "form_urlencoded", 2943 | "idna", 2944 | "percent-encoding", 2945 | "serde", 2946 | ] 2947 | 2948 | [[package]] 2949 | name = "utf-8" 2950 | version = "0.7.6" 2951 | source = "registry+https://github.com/rust-lang/crates.io-index" 2952 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 2953 | 2954 | [[package]] 2955 | name = "utf16_iter" 2956 | version = "1.0.5" 2957 | source = "registry+https://github.com/rust-lang/crates.io-index" 2958 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2959 | 2960 | [[package]] 2961 | name = "utf8-width" 2962 | version = "0.1.7" 2963 | source = "registry+https://github.com/rust-lang/crates.io-index" 2964 | checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" 2965 | 2966 | [[package]] 2967 | name = "utf8_iter" 2968 | version = "1.0.4" 2969 | source = "registry+https://github.com/rust-lang/crates.io-index" 2970 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2971 | 2972 | [[package]] 2973 | name = "uuid" 2974 | version = "1.15.1" 2975 | source = "registry+https://github.com/rust-lang/crates.io-index" 2976 | checksum = "e0f540e3240398cce6128b64ba83fdbdd86129c16a3aa1a3a252efd66eb3d587" 2977 | 2978 | [[package]] 2979 | name = "uwl" 2980 | version = "0.6.0" 2981 | source = "registry+https://github.com/rust-lang/crates.io-index" 2982 | checksum = "f4bf03e0ca70d626ecc4ba6b0763b934b6f2976e8c744088bb3c1d646fbb1ad0" 2983 | 2984 | [[package]] 2985 | name = "valuable" 2986 | version = "0.1.1" 2987 | source = "registry+https://github.com/rust-lang/crates.io-index" 2988 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 2989 | 2990 | [[package]] 2991 | name = "vcpkg" 2992 | version = "0.2.15" 2993 | source = "registry+https://github.com/rust-lang/crates.io-index" 2994 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2995 | 2996 | [[package]] 2997 | name = "version_check" 2998 | version = "0.9.5" 2999 | source = "registry+https://github.com/rust-lang/crates.io-index" 3000 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3001 | 3002 | [[package]] 3003 | name = "walkdir" 3004 | version = "2.5.0" 3005 | source = "registry+https://github.com/rust-lang/crates.io-index" 3006 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3007 | dependencies = [ 3008 | "same-file", 3009 | "winapi-util", 3010 | ] 3011 | 3012 | [[package]] 3013 | name = "want" 3014 | version = "0.3.1" 3015 | source = "registry+https://github.com/rust-lang/crates.io-index" 3016 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 3017 | dependencies = [ 3018 | "try-lock", 3019 | ] 3020 | 3021 | [[package]] 3022 | name = "wasi" 3023 | version = "0.11.0+wasi-snapshot-preview1" 3024 | source = "registry+https://github.com/rust-lang/crates.io-index" 3025 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 3026 | 3027 | [[package]] 3028 | name = "wasi" 3029 | version = "0.13.3+wasi-0.2.2" 3030 | source = "registry+https://github.com/rust-lang/crates.io-index" 3031 | checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" 3032 | dependencies = [ 3033 | "wit-bindgen-rt", 3034 | ] 3035 | 3036 | [[package]] 3037 | name = "wasm-bindgen" 3038 | version = "0.2.100" 3039 | source = "registry+https://github.com/rust-lang/crates.io-index" 3040 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 3041 | dependencies = [ 3042 | "cfg-if", 3043 | "once_cell", 3044 | "rustversion", 3045 | "wasm-bindgen-macro", 3046 | ] 3047 | 3048 | [[package]] 3049 | name = "wasm-bindgen-backend" 3050 | version = "0.2.100" 3051 | source = "registry+https://github.com/rust-lang/crates.io-index" 3052 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 3053 | dependencies = [ 3054 | "bumpalo", 3055 | "log", 3056 | "proc-macro2", 3057 | "quote", 3058 | "syn 2.0.99", 3059 | "wasm-bindgen-shared", 3060 | ] 3061 | 3062 | [[package]] 3063 | name = "wasm-bindgen-futures" 3064 | version = "0.4.50" 3065 | source = "registry+https://github.com/rust-lang/crates.io-index" 3066 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 3067 | dependencies = [ 3068 | "cfg-if", 3069 | "js-sys", 3070 | "once_cell", 3071 | "wasm-bindgen", 3072 | "web-sys", 3073 | ] 3074 | 3075 | [[package]] 3076 | name = "wasm-bindgen-macro" 3077 | version = "0.2.100" 3078 | source = "registry+https://github.com/rust-lang/crates.io-index" 3079 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 3080 | dependencies = [ 3081 | "quote", 3082 | "wasm-bindgen-macro-support", 3083 | ] 3084 | 3085 | [[package]] 3086 | name = "wasm-bindgen-macro-support" 3087 | version = "0.2.100" 3088 | source = "registry+https://github.com/rust-lang/crates.io-index" 3089 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 3090 | dependencies = [ 3091 | "proc-macro2", 3092 | "quote", 3093 | "syn 2.0.99", 3094 | "wasm-bindgen-backend", 3095 | "wasm-bindgen-shared", 3096 | ] 3097 | 3098 | [[package]] 3099 | name = "wasm-bindgen-shared" 3100 | version = "0.2.100" 3101 | source = "registry+https://github.com/rust-lang/crates.io-index" 3102 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 3103 | dependencies = [ 3104 | "unicode-ident", 3105 | ] 3106 | 3107 | [[package]] 3108 | name = "wasm-streams" 3109 | version = "0.4.2" 3110 | source = "registry+https://github.com/rust-lang/crates.io-index" 3111 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 3112 | dependencies = [ 3113 | "futures-util", 3114 | "js-sys", 3115 | "wasm-bindgen", 3116 | "wasm-bindgen-futures", 3117 | "web-sys", 3118 | ] 3119 | 3120 | [[package]] 3121 | name = "web-sys" 3122 | version = "0.3.77" 3123 | source = "registry+https://github.com/rust-lang/crates.io-index" 3124 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 3125 | dependencies = [ 3126 | "js-sys", 3127 | "wasm-bindgen", 3128 | ] 3129 | 3130 | [[package]] 3131 | name = "web-time" 3132 | version = "1.1.0" 3133 | source = "registry+https://github.com/rust-lang/crates.io-index" 3134 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3135 | dependencies = [ 3136 | "js-sys", 3137 | "wasm-bindgen", 3138 | ] 3139 | 3140 | [[package]] 3141 | name = "webpki-roots" 3142 | version = "0.25.4" 3143 | source = "registry+https://github.com/rust-lang/crates.io-index" 3144 | checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" 3145 | 3146 | [[package]] 3147 | name = "webpki-roots" 3148 | version = "0.26.8" 3149 | source = "registry+https://github.com/rust-lang/crates.io-index" 3150 | checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" 3151 | dependencies = [ 3152 | "rustls-pki-types", 3153 | ] 3154 | 3155 | [[package]] 3156 | name = "winapi" 3157 | version = "0.3.9" 3158 | source = "registry+https://github.com/rust-lang/crates.io-index" 3159 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 3160 | dependencies = [ 3161 | "winapi-i686-pc-windows-gnu", 3162 | "winapi-x86_64-pc-windows-gnu", 3163 | ] 3164 | 3165 | [[package]] 3166 | name = "winapi-i686-pc-windows-gnu" 3167 | version = "0.4.0" 3168 | source = "registry+https://github.com/rust-lang/crates.io-index" 3169 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3170 | 3171 | [[package]] 3172 | name = "winapi-util" 3173 | version = "0.1.9" 3174 | source = "registry+https://github.com/rust-lang/crates.io-index" 3175 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 3176 | dependencies = [ 3177 | "windows-sys 0.59.0", 3178 | ] 3179 | 3180 | [[package]] 3181 | name = "winapi-x86_64-pc-windows-gnu" 3182 | version = "0.4.0" 3183 | source = "registry+https://github.com/rust-lang/crates.io-index" 3184 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3185 | 3186 | [[package]] 3187 | name = "windows-core" 3188 | version = "0.52.0" 3189 | source = "registry+https://github.com/rust-lang/crates.io-index" 3190 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 3191 | dependencies = [ 3192 | "windows-targets 0.52.6", 3193 | ] 3194 | 3195 | [[package]] 3196 | name = "windows-link" 3197 | version = "0.1.0" 3198 | source = "registry+https://github.com/rust-lang/crates.io-index" 3199 | checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" 3200 | 3201 | [[package]] 3202 | name = "windows-registry" 3203 | version = "0.2.0" 3204 | source = "registry+https://github.com/rust-lang/crates.io-index" 3205 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 3206 | dependencies = [ 3207 | "windows-result", 3208 | "windows-strings", 3209 | "windows-targets 0.52.6", 3210 | ] 3211 | 3212 | [[package]] 3213 | name = "windows-result" 3214 | version = "0.2.0" 3215 | source = "registry+https://github.com/rust-lang/crates.io-index" 3216 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3217 | dependencies = [ 3218 | "windows-targets 0.52.6", 3219 | ] 3220 | 3221 | [[package]] 3222 | name = "windows-strings" 3223 | version = "0.1.0" 3224 | source = "registry+https://github.com/rust-lang/crates.io-index" 3225 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3226 | dependencies = [ 3227 | "windows-result", 3228 | "windows-targets 0.52.6", 3229 | ] 3230 | 3231 | [[package]] 3232 | name = "windows-sys" 3233 | version = "0.48.0" 3234 | source = "registry+https://github.com/rust-lang/crates.io-index" 3235 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 3236 | dependencies = [ 3237 | "windows-targets 0.48.5", 3238 | ] 3239 | 3240 | [[package]] 3241 | name = "windows-sys" 3242 | version = "0.52.0" 3243 | source = "registry+https://github.com/rust-lang/crates.io-index" 3244 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3245 | dependencies = [ 3246 | "windows-targets 0.52.6", 3247 | ] 3248 | 3249 | [[package]] 3250 | name = "windows-sys" 3251 | version = "0.59.0" 3252 | source = "registry+https://github.com/rust-lang/crates.io-index" 3253 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3254 | dependencies = [ 3255 | "windows-targets 0.52.6", 3256 | ] 3257 | 3258 | [[package]] 3259 | name = "windows-targets" 3260 | version = "0.48.5" 3261 | source = "registry+https://github.com/rust-lang/crates.io-index" 3262 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 3263 | dependencies = [ 3264 | "windows_aarch64_gnullvm 0.48.5", 3265 | "windows_aarch64_msvc 0.48.5", 3266 | "windows_i686_gnu 0.48.5", 3267 | "windows_i686_msvc 0.48.5", 3268 | "windows_x86_64_gnu 0.48.5", 3269 | "windows_x86_64_gnullvm 0.48.5", 3270 | "windows_x86_64_msvc 0.48.5", 3271 | ] 3272 | 3273 | [[package]] 3274 | name = "windows-targets" 3275 | version = "0.52.6" 3276 | source = "registry+https://github.com/rust-lang/crates.io-index" 3277 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3278 | dependencies = [ 3279 | "windows_aarch64_gnullvm 0.52.6", 3280 | "windows_aarch64_msvc 0.52.6", 3281 | "windows_i686_gnu 0.52.6", 3282 | "windows_i686_gnullvm", 3283 | "windows_i686_msvc 0.52.6", 3284 | "windows_x86_64_gnu 0.52.6", 3285 | "windows_x86_64_gnullvm 0.52.6", 3286 | "windows_x86_64_msvc 0.52.6", 3287 | ] 3288 | 3289 | [[package]] 3290 | name = "windows_aarch64_gnullvm" 3291 | version = "0.48.5" 3292 | source = "registry+https://github.com/rust-lang/crates.io-index" 3293 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 3294 | 3295 | [[package]] 3296 | name = "windows_aarch64_gnullvm" 3297 | version = "0.52.6" 3298 | source = "registry+https://github.com/rust-lang/crates.io-index" 3299 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3300 | 3301 | [[package]] 3302 | name = "windows_aarch64_msvc" 3303 | version = "0.48.5" 3304 | source = "registry+https://github.com/rust-lang/crates.io-index" 3305 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 3306 | 3307 | [[package]] 3308 | name = "windows_aarch64_msvc" 3309 | version = "0.52.6" 3310 | source = "registry+https://github.com/rust-lang/crates.io-index" 3311 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3312 | 3313 | [[package]] 3314 | name = "windows_i686_gnu" 3315 | version = "0.48.5" 3316 | source = "registry+https://github.com/rust-lang/crates.io-index" 3317 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 3318 | 3319 | [[package]] 3320 | name = "windows_i686_gnu" 3321 | version = "0.52.6" 3322 | source = "registry+https://github.com/rust-lang/crates.io-index" 3323 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3324 | 3325 | [[package]] 3326 | name = "windows_i686_gnullvm" 3327 | version = "0.52.6" 3328 | source = "registry+https://github.com/rust-lang/crates.io-index" 3329 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3330 | 3331 | [[package]] 3332 | name = "windows_i686_msvc" 3333 | version = "0.48.5" 3334 | source = "registry+https://github.com/rust-lang/crates.io-index" 3335 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 3336 | 3337 | [[package]] 3338 | name = "windows_i686_msvc" 3339 | version = "0.52.6" 3340 | source = "registry+https://github.com/rust-lang/crates.io-index" 3341 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3342 | 3343 | [[package]] 3344 | name = "windows_x86_64_gnu" 3345 | version = "0.48.5" 3346 | source = "registry+https://github.com/rust-lang/crates.io-index" 3347 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 3348 | 3349 | [[package]] 3350 | name = "windows_x86_64_gnu" 3351 | version = "0.52.6" 3352 | source = "registry+https://github.com/rust-lang/crates.io-index" 3353 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3354 | 3355 | [[package]] 3356 | name = "windows_x86_64_gnullvm" 3357 | version = "0.48.5" 3358 | source = "registry+https://github.com/rust-lang/crates.io-index" 3359 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 3360 | 3361 | [[package]] 3362 | name = "windows_x86_64_gnullvm" 3363 | version = "0.52.6" 3364 | source = "registry+https://github.com/rust-lang/crates.io-index" 3365 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3366 | 3367 | [[package]] 3368 | name = "windows_x86_64_msvc" 3369 | version = "0.48.5" 3370 | source = "registry+https://github.com/rust-lang/crates.io-index" 3371 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 3372 | 3373 | [[package]] 3374 | name = "windows_x86_64_msvc" 3375 | version = "0.52.6" 3376 | source = "registry+https://github.com/rust-lang/crates.io-index" 3377 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3378 | 3379 | [[package]] 3380 | name = "winnow" 3381 | version = "0.7.3" 3382 | source = "registry+https://github.com/rust-lang/crates.io-index" 3383 | checksum = "0e7f4ea97f6f78012141bcdb6a216b2609f0979ada50b20ca5b52dde2eac2bb1" 3384 | dependencies = [ 3385 | "memchr", 3386 | ] 3387 | 3388 | [[package]] 3389 | name = "winreg" 3390 | version = "0.50.0" 3391 | source = "registry+https://github.com/rust-lang/crates.io-index" 3392 | checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 3393 | dependencies = [ 3394 | "cfg-if", 3395 | "windows-sys 0.48.0", 3396 | ] 3397 | 3398 | [[package]] 3399 | name = "wit-bindgen-rt" 3400 | version = "0.33.0" 3401 | source = "registry+https://github.com/rust-lang/crates.io-index" 3402 | checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" 3403 | dependencies = [ 3404 | "bitflags 2.9.0", 3405 | ] 3406 | 3407 | [[package]] 3408 | name = "write16" 3409 | version = "1.0.0" 3410 | source = "registry+https://github.com/rust-lang/crates.io-index" 3411 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 3412 | 3413 | [[package]] 3414 | name = "writeable" 3415 | version = "0.5.5" 3416 | source = "registry+https://github.com/rust-lang/crates.io-index" 3417 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 3418 | 3419 | [[package]] 3420 | name = "wyz" 3421 | version = "0.5.1" 3422 | source = "registry+https://github.com/rust-lang/crates.io-index" 3423 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" 3424 | dependencies = [ 3425 | "tap", 3426 | ] 3427 | 3428 | [[package]] 3429 | name = "yoke" 3430 | version = "0.7.5" 3431 | source = "registry+https://github.com/rust-lang/crates.io-index" 3432 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 3433 | dependencies = [ 3434 | "serde", 3435 | "stable_deref_trait", 3436 | "yoke-derive", 3437 | "zerofrom", 3438 | ] 3439 | 3440 | [[package]] 3441 | name = "yoke-derive" 3442 | version = "0.7.5" 3443 | source = "registry+https://github.com/rust-lang/crates.io-index" 3444 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 3445 | dependencies = [ 3446 | "proc-macro2", 3447 | "quote", 3448 | "syn 2.0.99", 3449 | "synstructure", 3450 | ] 3451 | 3452 | [[package]] 3453 | name = "zerocopy" 3454 | version = "0.7.35" 3455 | source = "registry+https://github.com/rust-lang/crates.io-index" 3456 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 3457 | dependencies = [ 3458 | "byteorder", 3459 | "zerocopy-derive", 3460 | ] 3461 | 3462 | [[package]] 3463 | name = "zerocopy-derive" 3464 | version = "0.7.35" 3465 | source = "registry+https://github.com/rust-lang/crates.io-index" 3466 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 3467 | dependencies = [ 3468 | "proc-macro2", 3469 | "quote", 3470 | "syn 2.0.99", 3471 | ] 3472 | 3473 | [[package]] 3474 | name = "zerofrom" 3475 | version = "0.1.6" 3476 | source = "registry+https://github.com/rust-lang/crates.io-index" 3477 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3478 | dependencies = [ 3479 | "zerofrom-derive", 3480 | ] 3481 | 3482 | [[package]] 3483 | name = "zerofrom-derive" 3484 | version = "0.1.6" 3485 | source = "registry+https://github.com/rust-lang/crates.io-index" 3486 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3487 | dependencies = [ 3488 | "proc-macro2", 3489 | "quote", 3490 | "syn 2.0.99", 3491 | "synstructure", 3492 | ] 3493 | 3494 | [[package]] 3495 | name = "zeroize" 3496 | version = "1.8.1" 3497 | source = "registry+https://github.com/rust-lang/crates.io-index" 3498 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3499 | 3500 | [[package]] 3501 | name = "zerovec" 3502 | version = "0.10.4" 3503 | source = "registry+https://github.com/rust-lang/crates.io-index" 3504 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 3505 | dependencies = [ 3506 | "yoke", 3507 | "zerofrom", 3508 | "zerovec-derive", 3509 | ] 3510 | 3511 | [[package]] 3512 | name = "zerovec-derive" 3513 | version = "0.10.3" 3514 | source = "registry+https://github.com/rust-lang/crates.io-index" 3515 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 3516 | dependencies = [ 3517 | "proc-macro2", 3518 | "quote", 3519 | "syn 2.0.99", 3520 | ] 3521 | --------------------------------------------------------------------------------