├── .gitignore ├── Cargo.toml ├── src ├── lib.rs ├── telegram.rs ├── aws.rs └── main.rs ├── tests ├── markdown_tests.rs └── telegram_tests.rs ├── README.md └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .idea 3 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "aws_billing_notifier" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | aws-config = { version = "1.5.16", features = ["behavior-version-latest"] } 8 | aws-sdk-costexplorer = "1.57.0" 9 | lambda_runtime = "0.14.2" 10 | reqwest = { version = "0.12.8", features = ["native-tls-vendored"] } 11 | tokio = { version = "1.41.0", features = ["rt", "macros"] } 12 | chrono = "0.4.38" 13 | aws-sdk-sts = "1.54.0" 14 | serde_json = "1.0.132" 15 | thiserror = "2.0.12" 16 | url = "2.5.0" 17 | 18 | [dev-dependencies] 19 | tokio-test = "0.4" 20 | wiremock = "0.6" 21 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | use thiserror::Error; 2 | 3 | pub mod aws; 4 | pub mod telegram; 5 | 6 | use aws::AwsError; 7 | use telegram::TelegramError; 8 | 9 | /// Application-specific error types 10 | #[derive(Error, Debug)] 11 | pub enum AppError { 12 | /// AWS-related errors 13 | #[error("AWS error: {0}")] 14 | Aws(#[from] AwsError), 15 | 16 | /// Telegram-related errors 17 | #[error("Telegram error: {0}")] 18 | Telegram(#[from] TelegramError), 19 | 20 | /// Environment variable errors 21 | #[error("Environment error: {0}")] 22 | Environment(String), 23 | 24 | /// Data processing errors 25 | #[error("Data processing error: {0}")] 26 | DataProcessing(String), 27 | 28 | /// Parse errors 29 | #[error("Parse error: {0}")] 30 | Parse(String), 31 | } 32 | 33 | /// Helper function for amount formatting 34 | /// 35 | /// Parses a string amount, rounds to 2 decimal places, and formats it 36 | pub fn format_amount(amount: &str) -> Result { 37 | let float_value: f64 = amount 38 | .parse() 39 | .map_err(|e| AppError::Parse(format!("Invalid float string: {}", e)))?; 40 | let rounded_value = (float_value * 100.0).round() / 100.0; 41 | 42 | Ok(format!("{:.2}", rounded_value)) 43 | } 44 | 45 | /// Escapes special characters for Telegram MarkdownV2 format 46 | pub fn escape_markdown(text: String) -> String { 47 | // Escape characters that have special meaning in MarkdownV2 48 | text.replace("-", "\\-") 49 | .replace(".", "\\.") 50 | .replace("!", "\\!") 51 | .replace("(", "\\(") 52 | .replace(")", "\\)") 53 | .replace("[", "\\[") 54 | .replace("]", "\\]") 55 | } 56 | -------------------------------------------------------------------------------- /tests/markdown_tests.rs: -------------------------------------------------------------------------------- 1 | use aws_billing_notifier::escape_markdown; 2 | 3 | #[test] 4 | fn test_escape_markdown_basic_characters() { 5 | let input = "Hello World".to_string(); 6 | let result = escape_markdown(input); 7 | assert_eq!(result, "Hello World"); 8 | } 9 | 10 | #[test] 11 | fn test_escape_markdown_special_characters() { 12 | let input = "Test-message with.special characters!".to_string(); 13 | let expected = "Test\\-message with\\.special characters\\!".to_string(); 14 | let result = escape_markdown(input); 15 | assert_eq!(result, expected); 16 | } 17 | 18 | #[test] 19 | fn test_escape_markdown_parentheses_and_brackets() { 20 | let input = "Cost (AWS) [EC2] service".to_string(); 21 | let expected = "Cost \\(AWS\\) \\[EC2\\] service".to_string(); 22 | let result = escape_markdown(input); 23 | assert_eq!(result, expected); 24 | } 25 | 26 | #[test] 27 | fn test_escape_markdown_complex_billing_message() { 28 | let input = "Your AWS costs: EC2-Instance $45.67 (us-east-1)".to_string(); 29 | let expected = "Your AWS costs: EC2\\-Instance $45\\.67 \\(us\\-east\\-1\\)".to_string(); 30 | let result = escape_markdown(input); 31 | assert_eq!(result, expected); 32 | } 33 | 34 | #[test] 35 | fn test_escape_markdown_empty_string() { 36 | let input = "".to_string(); 37 | let result = escape_markdown(input); 38 | assert_eq!(result, ""); 39 | } 40 | 41 | #[test] 42 | fn test_escape_markdown_only_special_characters() { 43 | let input = ".-!()[]".to_string(); 44 | let expected = "\\.\\-\\!\\(\\)\\[\\]".to_string(); 45 | let result = escape_markdown(input); 46 | assert_eq!(result, expected); 47 | } 48 | 49 | #[test] 50 | fn test_escape_markdown_mixed_content() { 51 | let input = "Total: $123.45 - EC2 (compute) [active]!".to_string(); 52 | let expected = "Total: $123\\.45 \\- EC2 \\(compute\\) \\[active\\]\\!".to_string(); 53 | let result = escape_markdown(input); 54 | assert_eq!(result, expected); 55 | } 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWS Cost Notifier in Lambda 2 | 3 | A Rust Lambda function that retrieves AWS costs for the current month and sends a formatted notification via Telegram. 4 | 5 | ## Features 6 | 7 | - Fetches AWS cost data for the current month using AWS Cost Explorer API 8 | - Groups costs by service 9 | - Formats the data in a readable table 10 | - Sends the formatted data to a Telegram chat 11 | - Proper error handling throughout the application 12 | - Well-documented code with rustdoc comments 13 | 14 | ## Installation 15 | 16 | This project uses [cargo lambda](https://www.cargo-lambda.info/) to build the Lambda deployment package. 17 | 18 | ### Prerequisites 19 | 20 | Install cargo lambda: 21 | 22 | ```bash 23 | # MacOS 24 | brew tap cargo-lambda/cargo-lambda 25 | brew install cargo-lambda 26 | 27 | # Other platforms 28 | # See https://www.cargo-lambda.info/guide/installation.html 29 | ``` 30 | 31 | AWS credentials configured in your environment 32 | 33 | ### Building 34 | 35 | Build the Lambda deployment package: 36 | 37 | ```bash 38 | cargo lambda build --release --output-format zip --arm64 39 | ``` 40 | 41 | ## Deployment 42 | 43 | 1. Create a Lambda function in AWS with the ARM64 architecture 44 | 2. Upload the generated zip file from the `target/lambda/aws_billing_notifier/` directory 45 | 3. Set the following environment variables in the Lambda configuration: 46 | - `TELEGRAM_TOKEN`: Your Telegram bot token 47 | - `CHAT_ID`: The Telegram chat ID to send messages to 48 | 49 | ## Configuration 50 | 51 | The Lambda function requires two environment variables: 52 | 53 | - `TELEGRAM_TOKEN`: The API token for your Telegram bot 54 | - `CHAT_ID`: The chat ID where notifications should be sent 55 | 56 | ## Error Handling 57 | 58 | The application uses proper error handling throughout: 59 | 60 | - Custom error types for different categories of errors 61 | - Detailed error messages 62 | - No panics in production code 63 | - Proper error propagation 64 | 65 | ## Development 66 | 67 | ### Project Structure 68 | 69 | - `src/main.rs`: Main application logic and Lambda handler 70 | - `src/aws.rs`: AWS service interactions 71 | - `src/telegram.rs`: Telegram API interactions 72 | -------------------------------------------------------------------------------- /src/telegram.rs: -------------------------------------------------------------------------------- 1 | use reqwest::StatusCode; 2 | use std::collections::HashMap; 3 | use thiserror::Error; 4 | 5 | /// Error types for Telegram operations 6 | #[derive(Error, Debug)] 7 | pub enum TelegramError { 8 | /// Error when parsing URL 9 | #[error("Failed to parse URL: {0}")] 10 | UrlParseError(#[from] url::ParseError), 11 | 12 | /// Error when sending HTTP request 13 | #[error("HTTP request failed: {0}")] 14 | RequestError(#[from] reqwest::Error), 15 | 16 | /// Error when receiving non-OK status code 17 | #[error("Telegram API returned unexpected status: {0}")] 18 | ApiError(StatusCode), 19 | } 20 | 21 | /// Telegram client for sending messages 22 | pub struct Message { 23 | telegram_token: String, 24 | chat_id: String, 25 | base_url: String, 26 | } 27 | 28 | impl Message { 29 | /// Creates a new Telegram client 30 | /// 31 | /// # Arguments 32 | /// 33 | /// * `telegram_token` - The Telegram bot token 34 | /// * `chat_id` - The chat ID to send messages to 35 | pub fn new(telegram_token: String, chat_id: String) -> Self { 36 | Self { 37 | telegram_token, 38 | chat_id, 39 | base_url: "https://api.telegram.org".to_string(), 40 | } 41 | } 42 | 43 | /// Creates a new Telegram client with custom base URL (for testing) 44 | /// 45 | /// # Arguments 46 | /// 47 | /// * `telegram_token` - The Telegram bot token 48 | /// * `chat_id` - The chat ID to send messages to 49 | /// * `base_url` - Custom base URL for the Telegram API 50 | pub fn new_with_base_url(telegram_token: String, chat_id: String, base_url: String) -> Self { 51 | Self { 52 | telegram_token, 53 | chat_id, 54 | base_url, 55 | } 56 | } 57 | 58 | /// Sends a message via Telegram 59 | /// 60 | /// # Arguments 61 | /// 62 | /// * `message` - The message to send, formatted according to MarkdownV2 syntax 63 | /// 64 | /// # Returns 65 | /// 66 | /// * `Result<(), TelegramError>` - Ok, if successful, Err otherwise 67 | pub async fn send(&self, message: String) -> Result<(), TelegramError> { 68 | let url: String = format!("{}/bot{}/sendMessage", self.base_url, self.telegram_token); 69 | 70 | let mut params: HashMap<&str, &str> = HashMap::new(); 71 | params.insert("chat_id", self.chat_id.as_str()); 72 | params.insert("parse_mode", "MarkdownV2"); 73 | params.insert("text", message.as_str()); 74 | 75 | let url = reqwest::Url::parse_with_params(&url, ¶ms)?; 76 | let response = reqwest::get(url).await?; 77 | 78 | if response.status() == StatusCode::OK { 79 | println!("Telegram message sent successfully!"); 80 | Ok(()) 81 | } else { 82 | Err(TelegramError::ApiError(response.status())) 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/aws.rs: -------------------------------------------------------------------------------- 1 | use aws_sdk_costexplorer::types::{ 2 | DateInterval, Granularity, GroupDefinition, GroupDefinitionType, ResultByTime, 3 | }; 4 | use chrono::Datelike; 5 | use thiserror::Error; 6 | 7 | /// Error types for AWS operations 8 | #[derive(Error, Debug)] 9 | pub enum AwsError { 10 | /// Error when getting caller identity 11 | #[error("Failed to get caller identity: {0}")] 12 | CallerIdentityError(String), 13 | 14 | /// Error when a building date interval 15 | #[error("Failed to build date interval: {0}")] 16 | DateIntervalError(String), 17 | 18 | /// Error when getting cost and usage 19 | #[error("Failed to get cost and usage: {0}")] 20 | CostExplorerError(String), 21 | 22 | /// Error when account ID is missing 23 | #[error("Account ID is missing from response")] 24 | MissingAccountId, 25 | 26 | /// Parse errors 27 | #[error("Parse error: {0}")] 28 | Parse(String), 29 | } 30 | 31 | /// AWS client for interacting with AWS services 32 | pub struct BillExplorer {} 33 | 34 | impl BillExplorer { 35 | /// Creates a new AWS client 36 | pub fn new() -> Self { 37 | Self {} 38 | } 39 | 40 | /// Gets the AWS account ID 41 | /// 42 | /// # Returns 43 | /// 44 | /// * `Result` - The account ID if successful, error otherwise 45 | pub async fn get_account_id(&self) -> Result { 46 | let config = aws_config::load_from_env().await; 47 | let client = aws_sdk_sts::Client::new(&config); 48 | 49 | let response = client 50 | .get_caller_identity() 51 | .send() 52 | .await 53 | .map_err(|e| AwsError::CallerIdentityError(e.to_string()))?; 54 | 55 | response 56 | .account() 57 | .map(|id| id.to_string()) 58 | .ok_or(AwsError::MissingAccountId) 59 | } 60 | 61 | /// Gets the cost breakdown by service for the current month 62 | /// 63 | /// # Returns 64 | /// 65 | /// * `Result, AwsError>` - Cost data if successful, error otherwise 66 | pub async fn get_cost_by_service(&self) -> Result, AwsError> { 67 | let config = aws_config::load_from_env().await; 68 | let client = aws_sdk_costexplorer::Client::new(&config); 69 | 70 | let now = chrono::Utc::now().naive_utc(); 71 | let start_of_month = now.with_day(1).ok_or_else(|| { 72 | AwsError::DateIntervalError("Invalid day for start of month".to_string()) 73 | })?; 74 | 75 | let start_date = start_of_month.format("%Y-%m-%d").to_string(); 76 | let end_date = now.format("%Y-%m-%d").to_string(); 77 | 78 | let date_interval = DateInterval::builder() 79 | .start(start_date) 80 | .end(end_date) 81 | .build() 82 | .map_err(|e| AwsError::DateIntervalError(e.to_string()))?; 83 | 84 | let group_definition = GroupDefinition::builder() 85 | .r#type(GroupDefinitionType::Dimension) 86 | .key("SERVICE") 87 | .build(); 88 | 89 | let response = client 90 | .get_cost_and_usage() 91 | .time_period(date_interval) 92 | .granularity(Granularity::Monthly) 93 | .metrics("UnblendedCost") 94 | .group_by(group_definition) 95 | .send() 96 | .await 97 | .map_err(|e| AwsError::CostExplorerError(e.to_string()))?; 98 | 99 | let mut result_by_time: Vec = Vec::new(); 100 | 101 | for result in response.results_by_time() { 102 | result_by_time.push(result.clone()); 103 | } 104 | 105 | Ok(result_by_time) 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /tests/telegram_tests.rs: -------------------------------------------------------------------------------- 1 | use aws_billing_notifier::telegram::{Message, TelegramError}; 2 | use reqwest::StatusCode; 3 | use wiremock::{ 4 | matchers::{method, path, query_param}, 5 | Mock, MockServer, ResponseTemplate, 6 | }; 7 | 8 | #[tokio::test] 9 | async fn test_telegram_message_send_success() { 10 | // Start a mock server 11 | let mock_server = MockServer::start().await; 12 | 13 | // Set up the mock response for a successful message sending 14 | Mock::given(method("GET")) 15 | .and(path("/bot123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ/sendMessage")) 16 | .and(query_param("chat_id", "12345")) 17 | .and(query_param("parse_mode", "MarkdownV2")) 18 | .and(query_param("text", "Test message")) 19 | .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ 20 | "ok": true, 21 | "result": { 22 | "message_id": 123, 23 | "date": 1234567890, 24 | "chat": { 25 | "id": 12345, 26 | "type": "private" 27 | }, 28 | "text": "Test message" 29 | } 30 | }))) 31 | .mount(&mock_server) 32 | .await; 33 | 34 | // Create a message client with the mock server URL 35 | let token = "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 36 | let chat_id = "12345"; 37 | 38 | // Replace the hardcoded Telegram API URL with our mock server 39 | // We'll need to modify the Message struct for this to work properly 40 | let message = 41 | Message::new_with_base_url(token.to_string(), chat_id.to_string(), mock_server.uri()); 42 | 43 | // Send a test message 44 | let result = message.send("Test message".to_string()).await; 45 | 46 | // Assert the message was sent successfully 47 | assert!(result.is_ok()); 48 | } 49 | 50 | #[tokio::test] 51 | async fn test_telegram_message_send_api_error() { 52 | // Start a mock server 53 | let mock_server = MockServer::start().await; 54 | 55 | // Set up the mock response for API error (401 Unauthorized) 56 | Mock::given(method("GET")) 57 | .and(path("/bot123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ/sendMessage")) 58 | .respond_with(ResponseTemplate::new(401).set_body_json(serde_json::json!({ 59 | "ok": false, 60 | "error_code": 401, 61 | "description": "Unauthorized" 62 | }))) 63 | .mount(&mock_server) 64 | .await; 65 | 66 | let token = "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 67 | let chat_id = "12345"; 68 | 69 | let message = 70 | Message::new_with_base_url(token.to_string(), chat_id.to_string(), mock_server.uri()); 71 | 72 | // Send a test message 73 | let result = message.send("Test message".to_string()).await; 74 | 75 | // Assert we get the expected error 76 | assert!(result.is_err()); 77 | match result.unwrap_err() { 78 | TelegramError::ApiError(status) => { 79 | assert_eq!(status, StatusCode::UNAUTHORIZED); 80 | } 81 | _ => panic!("Expected ApiError"), 82 | } 83 | } 84 | 85 | #[tokio::test] 86 | async fn test_telegram_message_with_markdown_characters() { 87 | let mock_server = MockServer::start().await; 88 | 89 | // Test message with special MarkdownV2 characters that need escaping 90 | let test_message = "Cost: $10.50 (AWS EC2-Instance)"; 91 | 92 | Mock::given(method("GET")) 93 | .and(path("/bot123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ/sendMessage")) 94 | .and(query_param("chat_id", "12345")) 95 | .and(query_param("parse_mode", "MarkdownV2")) 96 | .and(query_param("text", test_message)) 97 | .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ 98 | "ok": true, 99 | "result": { 100 | "message_id": 124, 101 | "date": 1234567891, 102 | "chat": { 103 | "id": 12345, 104 | "type": "private" 105 | }, 106 | "text": test_message 107 | } 108 | }))) 109 | .mount(&mock_server) 110 | .await; 111 | 112 | let token = "123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 113 | let chat_id = "12345"; 114 | 115 | let message = 116 | Message::new_with_base_url(token.to_string(), chat_id.to_string(), mock_server.uri()); 117 | 118 | let result = message.send(test_message.to_string()).await; 119 | assert!(result.is_ok()); 120 | } 121 | 122 | #[test] 123 | fn test_telegram_message_creation() { 124 | let token = "test_token".to_string(); 125 | let chat_id = "test_chat_id".to_string(); 126 | 127 | let message = Message::new(token.clone(), chat_id.clone()); 128 | 129 | // We can't directly test the private fields, but we can test that creation succeeds 130 | // This is more of a sanity check that the constructor works 131 | assert_eq!( 132 | std::mem::size_of_val(&message), 133 | std::mem::size_of::() 134 | ); 135 | } 136 | 137 | // Integration test that would require network access (disabled by default) 138 | #[tokio::test] 139 | #[ignore] // Use `cargo test -- --ignored` to run this test 140 | async fn test_telegram_real_api_integration() { 141 | // This test would require real Telegram credentials 142 | // Set these environment variables to run this test: 143 | // TELEGRAM_TOKEN_TEST and CHAT_ID_TEST 144 | 145 | let token = std::env::var("TELEGRAM_TOKEN_TEST").unwrap_or_else(|_| { 146 | panic!("Set TELEGRAM_TOKEN_TEST environment variable to run integration tests") 147 | }); 148 | let chat_id = std::env::var("CHAT_ID_TEST").unwrap_or_else(|_| { 149 | panic!("Set CHAT_ID_TEST environment variable to run integration tests") 150 | }); 151 | 152 | let message = Message::new(token, chat_id); 153 | let result = message 154 | .send("🤖 Test message from Rust integration test".to_string()) 155 | .await; 156 | 157 | assert!(result.is_ok()); 158 | } 159 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use aws_billing_notifier::{aws, escape_markdown, format_amount, telegram, AppError}; 2 | use lambda_runtime::{service_fn, Error, LambdaEvent}; 3 | use serde_json::Value; 4 | 5 | /// Service cost information 6 | #[derive(Clone)] 7 | struct ServiceCostInfo { 8 | service: String, 9 | amount: f64, 10 | formatted_amount: String, 11 | unit: String, 12 | } 13 | 14 | // AppError already implements std::error::Error via thiserror, 15 | // so lambda_runtime::Error can automatically convert from it 16 | 17 | /// Fetches and sends AWS service costs via Telegram 18 | async fn send_service_costs( 19 | aws: &aws::BillExplorer, 20 | message: &telegram::Message, 21 | ) -> Result<(), AppError> { 22 | // Get AWS account ID 23 | let account_id = aws.get_account_id().await?; 24 | let mut total_amount: f64 = 0.0; 25 | let mut body = String::new(); 26 | 27 | body.push_str("```text\n"); 28 | body.push_str(&format!( 29 | "Your AWS Account {account_id} costs in this month\n\n" 30 | )); 31 | 32 | // Get cost data from AWS 33 | let results = aws.get_cost_by_service().await?; 34 | let mut service_costs: Vec = Vec::new(); 35 | 36 | // Process cost data 37 | for result in results { 38 | for group in result.groups() { 39 | let service = group 40 | .keys() 41 | .first() 42 | .ok_or_else(|| AppError::DataProcessing("No service name found".to_string()))?; 43 | 44 | let mut service_name = service.to_string(); 45 | 46 | // if the service is over than 30 characters, replace it with "..." 47 | if service_name.len() > 30 { 48 | service_name.truncate(30); 49 | service_name.push_str("..."); 50 | } 51 | 52 | let metrics = group 53 | .metrics() 54 | .ok_or_else(|| AppError::DataProcessing("No metrics found".to_string()))?; 55 | 56 | if let Some(value) = metrics.get("UnblendedCost") { 57 | let amount = value 58 | .amount() 59 | .ok_or_else(|| AppError::DataProcessing("Error getting amount".to_string()))?; 60 | 61 | let formatted_amount = format_amount(amount)?; 62 | let unit = value.unit().unwrap_or("USD"); 63 | 64 | // Skip zero-cost services 65 | if formatted_amount != "0.00" { 66 | let amount_value = formatted_amount 67 | .parse::() 68 | .map_err(|e| AppError::Parse(format!("Error parsing amount: {}", e)))?; 69 | 70 | total_amount += amount_value; 71 | 72 | service_costs.push(ServiceCostInfo { 73 | service: service_name, 74 | amount: amount_value, 75 | formatted_amount, 76 | unit: unit.to_string(), 77 | }); 78 | } 79 | } 80 | } 81 | } 82 | 83 | // Handle empty results 84 | if service_costs.is_empty() { 85 | body.push_str("No costs found for this month.\n"); 86 | body.push_str("```"); 87 | message.send(escape_markdown(body)).await?; 88 | 89 | return Ok(()); 90 | } 91 | 92 | // Find the service with the longest display text for formatting 93 | let mut max_text_length = 0; 94 | for cost in &service_costs { 95 | let text_length = format!("{} {} {}", cost.service, cost.formatted_amount, cost.unit).len(); 96 | if text_length > max_text_length { 97 | max_text_length = text_length; 98 | } 99 | } 100 | 101 | // Sort by cost (descending) 102 | service_costs.sort_by(|a, b| { 103 | b.amount 104 | .partial_cmp(&a.amount) 105 | .unwrap_or(std::cmp::Ordering::Equal) 106 | }); 107 | 108 | // Format and add each service cost to the message 109 | for cost in service_costs { 110 | let service_text = format!("{} {} {}", cost.service, cost.formatted_amount, cost.unit); 111 | let padding = max_text_length - service_text.len(); 112 | 113 | // Create a line with dashes between the service name and amount 114 | let service_line = format!( 115 | "{} {} {}\n", 116 | cost.service, 117 | "-".repeat(padding + 2), 118 | format!("{} {}", cost.formatted_amount, cost.unit) 119 | ); 120 | 121 | body.push_str(&service_line); 122 | } 123 | 124 | body.push_str(&format!("\nTotal: {:.2} USD", total_amount)); 125 | body.push_str("```"); 126 | 127 | // Send the message via Telegram 128 | message.send(escape_markdown(body)).await?; 129 | 130 | Ok(()) 131 | } 132 | 133 | /// Lambda handler function 134 | async fn handler( 135 | telegram_token: &str, 136 | chat_id: &str, 137 | _event: LambdaEvent, 138 | ) -> Result<(), Error> { 139 | let aws = aws::BillExplorer::new(); 140 | let telegram = telegram::Message::new(telegram_token.to_string(), chat_id.to_string()); 141 | 142 | send_service_costs(&aws, &telegram).await?; 143 | 144 | Ok(()) 145 | } 146 | 147 | /// Main function - entry point for the Lambda 148 | #[tokio::main] 149 | async fn main() -> Result<(), Error> { 150 | // Get environment variables 151 | let telegram_token: String = std::env::var("TELEGRAM_TOKEN").map_err(|_| { 152 | AppError::Environment( 153 | "TELEGRAM_TOKEN must be set in Lambda environment variables".to_string(), 154 | ) 155 | })?; 156 | 157 | let chat_id: String = std::env::var("CHAT_ID").map_err(|_| { 158 | AppError::Environment("CHAT_ID must be set in Lambda environment variables".to_string()) 159 | })?; 160 | 161 | // Run the Lambda handler 162 | lambda_runtime::run(service_fn(|event: LambdaEvent| async { 163 | handler(&telegram_token, &chat_id, event).await 164 | })) 165 | .await 166 | } 167 | -------------------------------------------------------------------------------- /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.1" 17 | source = "registry+https://github.com/rust-lang/crates.io-index" 18 | checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 19 | 20 | [[package]] 21 | name = "aho-corasick" 22 | version = "1.1.3" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 25 | dependencies = [ 26 | "memchr", 27 | ] 28 | 29 | [[package]] 30 | name = "android-tzdata" 31 | version = "0.1.1" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 34 | 35 | [[package]] 36 | name = "android_system_properties" 37 | version = "0.1.5" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 40 | dependencies = [ 41 | "libc", 42 | ] 43 | 44 | [[package]] 45 | name = "assert-json-diff" 46 | version = "2.0.2" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" 49 | dependencies = [ 50 | "serde", 51 | "serde_json", 52 | ] 53 | 54 | [[package]] 55 | name = "async-stream" 56 | version = "0.3.6" 57 | source = "registry+https://github.com/rust-lang/crates.io-index" 58 | checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 59 | dependencies = [ 60 | "async-stream-impl", 61 | "futures-core", 62 | "pin-project-lite", 63 | ] 64 | 65 | [[package]] 66 | name = "async-stream-impl" 67 | version = "0.3.6" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 70 | dependencies = [ 71 | "proc-macro2", 72 | "quote", 73 | "syn", 74 | ] 75 | 76 | [[package]] 77 | name = "atomic-waker" 78 | version = "1.1.2" 79 | source = "registry+https://github.com/rust-lang/crates.io-index" 80 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 81 | 82 | [[package]] 83 | name = "autocfg" 84 | version = "1.5.0" 85 | source = "registry+https://github.com/rust-lang/crates.io-index" 86 | checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 87 | 88 | [[package]] 89 | name = "aws-config" 90 | version = "1.8.5" 91 | source = "registry+https://github.com/rust-lang/crates.io-index" 92 | checksum = "c478f5b10ce55c9a33f87ca3404ca92768b144fc1bfdede7c0121214a8283a25" 93 | dependencies = [ 94 | "aws-credential-types", 95 | "aws-runtime", 96 | "aws-sdk-sso", 97 | "aws-sdk-ssooidc", 98 | "aws-sdk-sts", 99 | "aws-smithy-async", 100 | "aws-smithy-http", 101 | "aws-smithy-json", 102 | "aws-smithy-runtime", 103 | "aws-smithy-runtime-api", 104 | "aws-smithy-types", 105 | "aws-types", 106 | "bytes", 107 | "fastrand", 108 | "hex", 109 | "http 1.3.1", 110 | "ring", 111 | "time", 112 | "tokio", 113 | "tracing", 114 | "url", 115 | "zeroize", 116 | ] 117 | 118 | [[package]] 119 | name = "aws-credential-types" 120 | version = "1.2.5" 121 | source = "registry+https://github.com/rust-lang/crates.io-index" 122 | checksum = "1541072f81945fa1251f8795ef6c92c4282d74d59f88498ae7d4bf00f0ebdad9" 123 | dependencies = [ 124 | "aws-smithy-async", 125 | "aws-smithy-runtime-api", 126 | "aws-smithy-types", 127 | "zeroize", 128 | ] 129 | 130 | [[package]] 131 | name = "aws-lc-rs" 132 | version = "1.13.3" 133 | source = "registry+https://github.com/rust-lang/crates.io-index" 134 | checksum = "5c953fe1ba023e6b7730c0d4b031d06f267f23a46167dcbd40316644b10a17ba" 135 | dependencies = [ 136 | "aws-lc-sys", 137 | "zeroize", 138 | ] 139 | 140 | [[package]] 141 | name = "aws-lc-sys" 142 | version = "0.30.0" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "dbfd150b5dbdb988bcc8fb1fe787eb6b7ee6180ca24da683b61ea5405f3d43ff" 145 | dependencies = [ 146 | "bindgen", 147 | "cc", 148 | "cmake", 149 | "dunce", 150 | "fs_extra", 151 | ] 152 | 153 | [[package]] 154 | name = "aws-runtime" 155 | version = "1.5.10" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "c034a1bc1d70e16e7f4e4caf7e9f7693e4c9c24cd91cf17c2a0b21abaebc7c8b" 158 | dependencies = [ 159 | "aws-credential-types", 160 | "aws-sigv4", 161 | "aws-smithy-async", 162 | "aws-smithy-http", 163 | "aws-smithy-runtime", 164 | "aws-smithy-runtime-api", 165 | "aws-smithy-types", 166 | "aws-types", 167 | "bytes", 168 | "fastrand", 169 | "http 0.2.12", 170 | "http-body 0.4.6", 171 | "percent-encoding", 172 | "pin-project-lite", 173 | "tracing", 174 | "uuid", 175 | ] 176 | 177 | [[package]] 178 | name = "aws-sdk-costexplorer" 179 | version = "1.91.0" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "33a2c156eeadd4817866049f2f96044cde171b4c3295dd30ab656959bda6f61a" 182 | dependencies = [ 183 | "aws-credential-types", 184 | "aws-runtime", 185 | "aws-smithy-async", 186 | "aws-smithy-http", 187 | "aws-smithy-json", 188 | "aws-smithy-runtime", 189 | "aws-smithy-runtime-api", 190 | "aws-smithy-types", 191 | "aws-types", 192 | "bytes", 193 | "fastrand", 194 | "http 0.2.12", 195 | "regex-lite", 196 | "tracing", 197 | ] 198 | 199 | [[package]] 200 | name = "aws-sdk-sso" 201 | version = "1.81.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "79ede098271e3471036c46957cba2ba30888f53bda2515bf04b560614a30a36e" 204 | dependencies = [ 205 | "aws-credential-types", 206 | "aws-runtime", 207 | "aws-smithy-async", 208 | "aws-smithy-http", 209 | "aws-smithy-json", 210 | "aws-smithy-runtime", 211 | "aws-smithy-runtime-api", 212 | "aws-smithy-types", 213 | "aws-types", 214 | "bytes", 215 | "fastrand", 216 | "http 0.2.12", 217 | "regex-lite", 218 | "tracing", 219 | ] 220 | 221 | [[package]] 222 | name = "aws-sdk-ssooidc" 223 | version = "1.83.0" 224 | source = "registry+https://github.com/rust-lang/crates.io-index" 225 | checksum = "0b49e8fe57ff100a2f717abfa65bdd94e39702fa5ab3f60cddc6ac7784010c68" 226 | dependencies = [ 227 | "aws-credential-types", 228 | "aws-runtime", 229 | "aws-smithy-async", 230 | "aws-smithy-http", 231 | "aws-smithy-json", 232 | "aws-smithy-runtime", 233 | "aws-smithy-runtime-api", 234 | "aws-smithy-types", 235 | "aws-types", 236 | "bytes", 237 | "fastrand", 238 | "http 0.2.12", 239 | "regex-lite", 240 | "tracing", 241 | ] 242 | 243 | [[package]] 244 | name = "aws-sdk-sts" 245 | version = "1.84.0" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | checksum = "91abcdbfb48c38a0419eb75e0eac772a4783a96750392680e4f3c25a8a0535b9" 248 | dependencies = [ 249 | "aws-credential-types", 250 | "aws-runtime", 251 | "aws-smithy-async", 252 | "aws-smithy-http", 253 | "aws-smithy-json", 254 | "aws-smithy-query", 255 | "aws-smithy-runtime", 256 | "aws-smithy-runtime-api", 257 | "aws-smithy-types", 258 | "aws-smithy-xml", 259 | "aws-types", 260 | "fastrand", 261 | "http 0.2.12", 262 | "regex-lite", 263 | "tracing", 264 | ] 265 | 266 | [[package]] 267 | name = "aws-sigv4" 268 | version = "1.3.4" 269 | source = "registry+https://github.com/rust-lang/crates.io-index" 270 | checksum = "084c34162187d39e3740cb635acd73c4e3a551a36146ad6fe8883c929c9f876c" 271 | dependencies = [ 272 | "aws-credential-types", 273 | "aws-smithy-http", 274 | "aws-smithy-runtime-api", 275 | "aws-smithy-types", 276 | "bytes", 277 | "form_urlencoded", 278 | "hex", 279 | "hmac", 280 | "http 0.2.12", 281 | "http 1.3.1", 282 | "percent-encoding", 283 | "sha2", 284 | "time", 285 | "tracing", 286 | ] 287 | 288 | [[package]] 289 | name = "aws-smithy-async" 290 | version = "1.2.5" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | checksum = "1e190749ea56f8c42bf15dd76c65e14f8f765233e6df9b0506d9d934ebef867c" 293 | dependencies = [ 294 | "futures-util", 295 | "pin-project-lite", 296 | "tokio", 297 | ] 298 | 299 | [[package]] 300 | name = "aws-smithy-http" 301 | version = "0.62.3" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "7c4dacf2d38996cf729f55e7a762b30918229917eca115de45dfa8dfb97796c9" 304 | dependencies = [ 305 | "aws-smithy-runtime-api", 306 | "aws-smithy-types", 307 | "bytes", 308 | "bytes-utils", 309 | "futures-core", 310 | "http 0.2.12", 311 | "http 1.3.1", 312 | "http-body 0.4.6", 313 | "percent-encoding", 314 | "pin-project-lite", 315 | "pin-utils", 316 | "tracing", 317 | ] 318 | 319 | [[package]] 320 | name = "aws-smithy-http-client" 321 | version = "1.1.0" 322 | source = "registry+https://github.com/rust-lang/crates.io-index" 323 | checksum = "4fdbad9bd9dbcc6c5e68c311a841b54b70def3ca3b674c42fbebb265980539f8" 324 | dependencies = [ 325 | "aws-smithy-async", 326 | "aws-smithy-runtime-api", 327 | "aws-smithy-types", 328 | "h2 0.3.27", 329 | "h2 0.4.12", 330 | "http 0.2.12", 331 | "http 1.3.1", 332 | "http-body 0.4.6", 333 | "hyper 0.14.32", 334 | "hyper 1.7.0", 335 | "hyper-rustls 0.24.2", 336 | "hyper-rustls 0.27.7", 337 | "hyper-util", 338 | "pin-project-lite", 339 | "rustls 0.21.12", 340 | "rustls 0.23.31", 341 | "rustls-native-certs 0.8.1", 342 | "rustls-pki-types", 343 | "tokio", 344 | "tokio-rustls 0.26.2", 345 | "tower", 346 | "tracing", 347 | ] 348 | 349 | [[package]] 350 | name = "aws-smithy-json" 351 | version = "0.61.4" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "a16e040799d29c17412943bdbf488fd75db04112d0c0d4b9290bacf5ae0014b9" 354 | dependencies = [ 355 | "aws-smithy-types", 356 | ] 357 | 358 | [[package]] 359 | name = "aws-smithy-observability" 360 | version = "0.1.3" 361 | source = "registry+https://github.com/rust-lang/crates.io-index" 362 | checksum = "9364d5989ac4dd918e5cc4c4bdcc61c9be17dcd2586ea7f69e348fc7c6cab393" 363 | dependencies = [ 364 | "aws-smithy-runtime-api", 365 | ] 366 | 367 | [[package]] 368 | name = "aws-smithy-query" 369 | version = "0.60.7" 370 | source = "registry+https://github.com/rust-lang/crates.io-index" 371 | checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb" 372 | dependencies = [ 373 | "aws-smithy-types", 374 | "urlencoding", 375 | ] 376 | 377 | [[package]] 378 | name = "aws-smithy-runtime" 379 | version = "1.9.0" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "a3d57c8b53a72d15c8e190475743acf34e4996685e346a3448dd54ef696fc6e0" 382 | dependencies = [ 383 | "aws-smithy-async", 384 | "aws-smithy-http", 385 | "aws-smithy-http-client", 386 | "aws-smithy-observability", 387 | "aws-smithy-runtime-api", 388 | "aws-smithy-types", 389 | "bytes", 390 | "fastrand", 391 | "http 0.2.12", 392 | "http 1.3.1", 393 | "http-body 0.4.6", 394 | "http-body 1.0.1", 395 | "pin-project-lite", 396 | "pin-utils", 397 | "tokio", 398 | "tracing", 399 | ] 400 | 401 | [[package]] 402 | name = "aws-smithy-runtime-api" 403 | version = "1.9.0" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | checksum = "07f5e0fc8a6b3f2303f331b94504bbf754d85488f402d6f1dd7a6080f99afe56" 406 | dependencies = [ 407 | "aws-smithy-async", 408 | "aws-smithy-types", 409 | "bytes", 410 | "http 0.2.12", 411 | "http 1.3.1", 412 | "pin-project-lite", 413 | "tokio", 414 | "tracing", 415 | "zeroize", 416 | ] 417 | 418 | [[package]] 419 | name = "aws-smithy-types" 420 | version = "1.3.2" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "d498595448e43de7f4296b7b7a18a8a02c61ec9349128c80a368f7c3b4ab11a8" 423 | dependencies = [ 424 | "base64-simd", 425 | "bytes", 426 | "bytes-utils", 427 | "futures-core", 428 | "http 0.2.12", 429 | "http 1.3.1", 430 | "http-body 0.4.6", 431 | "http-body 1.0.1", 432 | "http-body-util", 433 | "itoa", 434 | "num-integer", 435 | "pin-project-lite", 436 | "pin-utils", 437 | "ryu", 438 | "serde", 439 | "time", 440 | "tokio", 441 | "tokio-util", 442 | ] 443 | 444 | [[package]] 445 | name = "aws-smithy-xml" 446 | version = "0.60.10" 447 | source = "registry+https://github.com/rust-lang/crates.io-index" 448 | checksum = "3db87b96cb1b16c024980f133968d52882ca0daaee3a086c6decc500f6c99728" 449 | dependencies = [ 450 | "xmlparser", 451 | ] 452 | 453 | [[package]] 454 | name = "aws-types" 455 | version = "1.3.8" 456 | source = "registry+https://github.com/rust-lang/crates.io-index" 457 | checksum = "b069d19bf01e46298eaedd7c6f283fe565a59263e53eebec945f3e6398f42390" 458 | dependencies = [ 459 | "aws-credential-types", 460 | "aws-smithy-async", 461 | "aws-smithy-runtime-api", 462 | "aws-smithy-types", 463 | "rustc_version", 464 | "tracing", 465 | ] 466 | 467 | [[package]] 468 | name = "aws_billing_notifier" 469 | version = "0.1.0" 470 | dependencies = [ 471 | "aws-config", 472 | "aws-sdk-costexplorer", 473 | "aws-sdk-sts", 474 | "chrono", 475 | "lambda_runtime", 476 | "reqwest", 477 | "serde_json", 478 | "thiserror", 479 | "tokio", 480 | "tokio-test", 481 | "url", 482 | "wiremock", 483 | ] 484 | 485 | [[package]] 486 | name = "backtrace" 487 | version = "0.3.75" 488 | source = "registry+https://github.com/rust-lang/crates.io-index" 489 | checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" 490 | dependencies = [ 491 | "addr2line", 492 | "cfg-if", 493 | "libc", 494 | "miniz_oxide", 495 | "object", 496 | "rustc-demangle", 497 | "windows-targets 0.52.6", 498 | ] 499 | 500 | [[package]] 501 | name = "base64" 502 | version = "0.21.7" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" 505 | 506 | [[package]] 507 | name = "base64" 508 | version = "0.22.1" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 511 | 512 | [[package]] 513 | name = "base64-simd" 514 | version = "0.8.0" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" 517 | dependencies = [ 518 | "outref", 519 | "vsimd", 520 | ] 521 | 522 | [[package]] 523 | name = "bindgen" 524 | version = "0.69.5" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" 527 | dependencies = [ 528 | "bitflags", 529 | "cexpr", 530 | "clang-sys", 531 | "itertools", 532 | "lazy_static", 533 | "lazycell", 534 | "log", 535 | "prettyplease", 536 | "proc-macro2", 537 | "quote", 538 | "regex", 539 | "rustc-hash", 540 | "shlex", 541 | "syn", 542 | "which", 543 | ] 544 | 545 | [[package]] 546 | name = "bitflags" 547 | version = "2.9.3" 548 | source = "registry+https://github.com/rust-lang/crates.io-index" 549 | checksum = "34efbcccd345379ca2868b2b2c9d3782e9cc58ba87bc7d79d5b53d9c9ae6f25d" 550 | 551 | [[package]] 552 | name = "block-buffer" 553 | version = "0.10.4" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 556 | dependencies = [ 557 | "generic-array", 558 | ] 559 | 560 | [[package]] 561 | name = "bumpalo" 562 | version = "3.19.0" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 565 | 566 | [[package]] 567 | name = "bytes" 568 | version = "1.10.1" 569 | source = "registry+https://github.com/rust-lang/crates.io-index" 570 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 571 | 572 | [[package]] 573 | name = "bytes-utils" 574 | version = "0.1.4" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" 577 | dependencies = [ 578 | "bytes", 579 | "either", 580 | ] 581 | 582 | [[package]] 583 | name = "cc" 584 | version = "1.2.34" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | checksum = "42bc4aea80032b7bf409b0bc7ccad88853858911b7713a8062fdc0623867bedc" 587 | dependencies = [ 588 | "jobserver", 589 | "libc", 590 | "shlex", 591 | ] 592 | 593 | [[package]] 594 | name = "cexpr" 595 | version = "0.6.0" 596 | source = "registry+https://github.com/rust-lang/crates.io-index" 597 | checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" 598 | dependencies = [ 599 | "nom", 600 | ] 601 | 602 | [[package]] 603 | name = "cfg-if" 604 | version = "1.0.3" 605 | source = "registry+https://github.com/rust-lang/crates.io-index" 606 | checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" 607 | 608 | [[package]] 609 | name = "chrono" 610 | version = "0.4.41" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" 613 | dependencies = [ 614 | "android-tzdata", 615 | "iana-time-zone", 616 | "js-sys", 617 | "num-traits", 618 | "wasm-bindgen", 619 | "windows-link", 620 | ] 621 | 622 | [[package]] 623 | name = "clang-sys" 624 | version = "1.8.1" 625 | source = "registry+https://github.com/rust-lang/crates.io-index" 626 | checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" 627 | dependencies = [ 628 | "glob", 629 | "libc", 630 | "libloading", 631 | ] 632 | 633 | [[package]] 634 | name = "cmake" 635 | version = "0.1.54" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" 638 | dependencies = [ 639 | "cc", 640 | ] 641 | 642 | [[package]] 643 | name = "core-foundation" 644 | version = "0.9.4" 645 | source = "registry+https://github.com/rust-lang/crates.io-index" 646 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 647 | dependencies = [ 648 | "core-foundation-sys", 649 | "libc", 650 | ] 651 | 652 | [[package]] 653 | name = "core-foundation" 654 | version = "0.10.1" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 657 | dependencies = [ 658 | "core-foundation-sys", 659 | "libc", 660 | ] 661 | 662 | [[package]] 663 | name = "core-foundation-sys" 664 | version = "0.8.7" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 667 | 668 | [[package]] 669 | name = "cpufeatures" 670 | version = "0.2.17" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 673 | dependencies = [ 674 | "libc", 675 | ] 676 | 677 | [[package]] 678 | name = "crypto-common" 679 | version = "0.1.6" 680 | source = "registry+https://github.com/rust-lang/crates.io-index" 681 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 682 | dependencies = [ 683 | "generic-array", 684 | "typenum", 685 | ] 686 | 687 | [[package]] 688 | name = "deadpool" 689 | version = "0.12.2" 690 | source = "registry+https://github.com/rust-lang/crates.io-index" 691 | checksum = "5ed5957ff93768adf7a65ab167a17835c3d2c3c50d084fe305174c112f468e2f" 692 | dependencies = [ 693 | "deadpool-runtime", 694 | "num_cpus", 695 | "tokio", 696 | ] 697 | 698 | [[package]] 699 | name = "deadpool-runtime" 700 | version = "0.1.4" 701 | source = "registry+https://github.com/rust-lang/crates.io-index" 702 | checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" 703 | 704 | [[package]] 705 | name = "deranged" 706 | version = "0.4.0" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" 709 | dependencies = [ 710 | "powerfmt", 711 | ] 712 | 713 | [[package]] 714 | name = "digest" 715 | version = "0.10.7" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 718 | dependencies = [ 719 | "block-buffer", 720 | "crypto-common", 721 | "subtle", 722 | ] 723 | 724 | [[package]] 725 | name = "displaydoc" 726 | version = "0.2.5" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 729 | dependencies = [ 730 | "proc-macro2", 731 | "quote", 732 | "syn", 733 | ] 734 | 735 | [[package]] 736 | name = "dunce" 737 | version = "1.0.5" 738 | source = "registry+https://github.com/rust-lang/crates.io-index" 739 | checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" 740 | 741 | [[package]] 742 | name = "either" 743 | version = "1.15.0" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 746 | 747 | [[package]] 748 | name = "encoding_rs" 749 | version = "0.8.35" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 752 | dependencies = [ 753 | "cfg-if", 754 | ] 755 | 756 | [[package]] 757 | name = "equivalent" 758 | version = "1.0.2" 759 | source = "registry+https://github.com/rust-lang/crates.io-index" 760 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 761 | 762 | [[package]] 763 | name = "errno" 764 | version = "0.3.13" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" 767 | dependencies = [ 768 | "libc", 769 | "windows-sys 0.60.2", 770 | ] 771 | 772 | [[package]] 773 | name = "fastrand" 774 | version = "2.3.0" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 777 | 778 | [[package]] 779 | name = "fnv" 780 | version = "1.0.7" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 783 | 784 | [[package]] 785 | name = "foreign-types" 786 | version = "0.3.2" 787 | source = "registry+https://github.com/rust-lang/crates.io-index" 788 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 789 | dependencies = [ 790 | "foreign-types-shared", 791 | ] 792 | 793 | [[package]] 794 | name = "foreign-types-shared" 795 | version = "0.1.1" 796 | source = "registry+https://github.com/rust-lang/crates.io-index" 797 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 798 | 799 | [[package]] 800 | name = "form_urlencoded" 801 | version = "1.2.2" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 804 | dependencies = [ 805 | "percent-encoding", 806 | ] 807 | 808 | [[package]] 809 | name = "fs_extra" 810 | version = "1.3.0" 811 | source = "registry+https://github.com/rust-lang/crates.io-index" 812 | checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 813 | 814 | [[package]] 815 | name = "futures" 816 | version = "0.3.31" 817 | source = "registry+https://github.com/rust-lang/crates.io-index" 818 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 819 | dependencies = [ 820 | "futures-channel", 821 | "futures-core", 822 | "futures-executor", 823 | "futures-io", 824 | "futures-sink", 825 | "futures-task", 826 | "futures-util", 827 | ] 828 | 829 | [[package]] 830 | name = "futures-channel" 831 | version = "0.3.31" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 834 | dependencies = [ 835 | "futures-core", 836 | "futures-sink", 837 | ] 838 | 839 | [[package]] 840 | name = "futures-core" 841 | version = "0.3.31" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 844 | 845 | [[package]] 846 | name = "futures-executor" 847 | version = "0.3.31" 848 | source = "registry+https://github.com/rust-lang/crates.io-index" 849 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 850 | dependencies = [ 851 | "futures-core", 852 | "futures-task", 853 | "futures-util", 854 | ] 855 | 856 | [[package]] 857 | name = "futures-io" 858 | version = "0.3.31" 859 | source = "registry+https://github.com/rust-lang/crates.io-index" 860 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 861 | 862 | [[package]] 863 | name = "futures-macro" 864 | version = "0.3.31" 865 | source = "registry+https://github.com/rust-lang/crates.io-index" 866 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 867 | dependencies = [ 868 | "proc-macro2", 869 | "quote", 870 | "syn", 871 | ] 872 | 873 | [[package]] 874 | name = "futures-sink" 875 | version = "0.3.31" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 878 | 879 | [[package]] 880 | name = "futures-task" 881 | version = "0.3.31" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 884 | 885 | [[package]] 886 | name = "futures-util" 887 | version = "0.3.31" 888 | source = "registry+https://github.com/rust-lang/crates.io-index" 889 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 890 | dependencies = [ 891 | "futures-channel", 892 | "futures-core", 893 | "futures-io", 894 | "futures-macro", 895 | "futures-sink", 896 | "futures-task", 897 | "memchr", 898 | "pin-project-lite", 899 | "pin-utils", 900 | "slab", 901 | ] 902 | 903 | [[package]] 904 | name = "generic-array" 905 | version = "0.14.7" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 908 | dependencies = [ 909 | "typenum", 910 | "version_check", 911 | ] 912 | 913 | [[package]] 914 | name = "getrandom" 915 | version = "0.2.16" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" 918 | dependencies = [ 919 | "cfg-if", 920 | "libc", 921 | "wasi 0.11.1+wasi-snapshot-preview1", 922 | ] 923 | 924 | [[package]] 925 | name = "getrandom" 926 | version = "0.3.3" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" 929 | dependencies = [ 930 | "cfg-if", 931 | "libc", 932 | "r-efi", 933 | "wasi 0.14.2+wasi-0.2.4", 934 | ] 935 | 936 | [[package]] 937 | name = "gimli" 938 | version = "0.31.1" 939 | source = "registry+https://github.com/rust-lang/crates.io-index" 940 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 941 | 942 | [[package]] 943 | name = "glob" 944 | version = "0.3.3" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" 947 | 948 | [[package]] 949 | name = "h2" 950 | version = "0.3.27" 951 | source = "registry+https://github.com/rust-lang/crates.io-index" 952 | checksum = "0beca50380b1fc32983fc1cb4587bfa4bb9e78fc259aad4a0032d2080309222d" 953 | dependencies = [ 954 | "bytes", 955 | "fnv", 956 | "futures-core", 957 | "futures-sink", 958 | "futures-util", 959 | "http 0.2.12", 960 | "indexmap", 961 | "slab", 962 | "tokio", 963 | "tokio-util", 964 | "tracing", 965 | ] 966 | 967 | [[package]] 968 | name = "h2" 969 | version = "0.4.12" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" 972 | dependencies = [ 973 | "atomic-waker", 974 | "bytes", 975 | "fnv", 976 | "futures-core", 977 | "futures-sink", 978 | "http 1.3.1", 979 | "indexmap", 980 | "slab", 981 | "tokio", 982 | "tokio-util", 983 | "tracing", 984 | ] 985 | 986 | [[package]] 987 | name = "hashbrown" 988 | version = "0.15.5" 989 | source = "registry+https://github.com/rust-lang/crates.io-index" 990 | checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 991 | 992 | [[package]] 993 | name = "hermit-abi" 994 | version = "0.5.2" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 997 | 998 | [[package]] 999 | name = "hex" 1000 | version = "0.4.3" 1001 | source = "registry+https://github.com/rust-lang/crates.io-index" 1002 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1003 | 1004 | [[package]] 1005 | name = "hmac" 1006 | version = "0.12.1" 1007 | source = "registry+https://github.com/rust-lang/crates.io-index" 1008 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1009 | dependencies = [ 1010 | "digest", 1011 | ] 1012 | 1013 | [[package]] 1014 | name = "home" 1015 | version = "0.5.11" 1016 | source = "registry+https://github.com/rust-lang/crates.io-index" 1017 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 1018 | dependencies = [ 1019 | "windows-sys 0.59.0", 1020 | ] 1021 | 1022 | [[package]] 1023 | name = "http" 1024 | version = "0.2.12" 1025 | source = "registry+https://github.com/rust-lang/crates.io-index" 1026 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 1027 | dependencies = [ 1028 | "bytes", 1029 | "fnv", 1030 | "itoa", 1031 | ] 1032 | 1033 | [[package]] 1034 | name = "http" 1035 | version = "1.3.1" 1036 | source = "registry+https://github.com/rust-lang/crates.io-index" 1037 | checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" 1038 | dependencies = [ 1039 | "bytes", 1040 | "fnv", 1041 | "itoa", 1042 | ] 1043 | 1044 | [[package]] 1045 | name = "http-body" 1046 | version = "0.4.6" 1047 | source = "registry+https://github.com/rust-lang/crates.io-index" 1048 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" 1049 | dependencies = [ 1050 | "bytes", 1051 | "http 0.2.12", 1052 | "pin-project-lite", 1053 | ] 1054 | 1055 | [[package]] 1056 | name = "http-body" 1057 | version = "1.0.1" 1058 | source = "registry+https://github.com/rust-lang/crates.io-index" 1059 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1060 | dependencies = [ 1061 | "bytes", 1062 | "http 1.3.1", 1063 | ] 1064 | 1065 | [[package]] 1066 | name = "http-body-util" 1067 | version = "0.1.3" 1068 | source = "registry+https://github.com/rust-lang/crates.io-index" 1069 | checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1070 | dependencies = [ 1071 | "bytes", 1072 | "futures-core", 1073 | "http 1.3.1", 1074 | "http-body 1.0.1", 1075 | "pin-project-lite", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "http-serde" 1080 | version = "2.1.1" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" 1083 | dependencies = [ 1084 | "http 1.3.1", 1085 | "serde", 1086 | ] 1087 | 1088 | [[package]] 1089 | name = "httparse" 1090 | version = "1.10.1" 1091 | source = "registry+https://github.com/rust-lang/crates.io-index" 1092 | checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1093 | 1094 | [[package]] 1095 | name = "httpdate" 1096 | version = "1.0.3" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1099 | 1100 | [[package]] 1101 | name = "hyper" 1102 | version = "0.14.32" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" 1105 | dependencies = [ 1106 | "bytes", 1107 | "futures-channel", 1108 | "futures-core", 1109 | "futures-util", 1110 | "h2 0.3.27", 1111 | "http 0.2.12", 1112 | "http-body 0.4.6", 1113 | "httparse", 1114 | "httpdate", 1115 | "itoa", 1116 | "pin-project-lite", 1117 | "socket2 0.5.10", 1118 | "tokio", 1119 | "tower-service", 1120 | "tracing", 1121 | "want", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "hyper" 1126 | version = "1.7.0" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" 1129 | dependencies = [ 1130 | "atomic-waker", 1131 | "bytes", 1132 | "futures-channel", 1133 | "futures-core", 1134 | "h2 0.4.12", 1135 | "http 1.3.1", 1136 | "http-body 1.0.1", 1137 | "httparse", 1138 | "httpdate", 1139 | "itoa", 1140 | "pin-project-lite", 1141 | "pin-utils", 1142 | "smallvec", 1143 | "tokio", 1144 | "want", 1145 | ] 1146 | 1147 | [[package]] 1148 | name = "hyper-rustls" 1149 | version = "0.24.2" 1150 | source = "registry+https://github.com/rust-lang/crates.io-index" 1151 | checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" 1152 | dependencies = [ 1153 | "futures-util", 1154 | "http 0.2.12", 1155 | "hyper 0.14.32", 1156 | "log", 1157 | "rustls 0.21.12", 1158 | "rustls-native-certs 0.6.3", 1159 | "tokio", 1160 | "tokio-rustls 0.24.1", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "hyper-rustls" 1165 | version = "0.27.7" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 1168 | dependencies = [ 1169 | "http 1.3.1", 1170 | "hyper 1.7.0", 1171 | "hyper-util", 1172 | "rustls 0.23.31", 1173 | "rustls-native-certs 0.8.1", 1174 | "rustls-pki-types", 1175 | "tokio", 1176 | "tokio-rustls 0.26.2", 1177 | "tower-service", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "hyper-tls" 1182 | version = "0.6.0" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 1185 | dependencies = [ 1186 | "bytes", 1187 | "http-body-util", 1188 | "hyper 1.7.0", 1189 | "hyper-util", 1190 | "native-tls", 1191 | "tokio", 1192 | "tokio-native-tls", 1193 | "tower-service", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "hyper-util" 1198 | version = "0.1.16" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e" 1201 | dependencies = [ 1202 | "base64 0.22.1", 1203 | "bytes", 1204 | "futures-channel", 1205 | "futures-core", 1206 | "futures-util", 1207 | "http 1.3.1", 1208 | "http-body 1.0.1", 1209 | "hyper 1.7.0", 1210 | "ipnet", 1211 | "libc", 1212 | "percent-encoding", 1213 | "pin-project-lite", 1214 | "socket2 0.6.0", 1215 | "system-configuration", 1216 | "tokio", 1217 | "tower-service", 1218 | "tracing", 1219 | "windows-registry", 1220 | ] 1221 | 1222 | [[package]] 1223 | name = "iana-time-zone" 1224 | version = "0.1.63" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" 1227 | dependencies = [ 1228 | "android_system_properties", 1229 | "core-foundation-sys", 1230 | "iana-time-zone-haiku", 1231 | "js-sys", 1232 | "log", 1233 | "wasm-bindgen", 1234 | "windows-core", 1235 | ] 1236 | 1237 | [[package]] 1238 | name = "iana-time-zone-haiku" 1239 | version = "0.1.2" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1242 | dependencies = [ 1243 | "cc", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "icu_collections" 1248 | version = "2.0.0" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" 1251 | dependencies = [ 1252 | "displaydoc", 1253 | "potential_utf", 1254 | "yoke", 1255 | "zerofrom", 1256 | "zerovec", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "icu_locale_core" 1261 | version = "2.0.0" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" 1264 | dependencies = [ 1265 | "displaydoc", 1266 | "litemap", 1267 | "tinystr", 1268 | "writeable", 1269 | "zerovec", 1270 | ] 1271 | 1272 | [[package]] 1273 | name = "icu_normalizer" 1274 | version = "2.0.0" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" 1277 | dependencies = [ 1278 | "displaydoc", 1279 | "icu_collections", 1280 | "icu_normalizer_data", 1281 | "icu_properties", 1282 | "icu_provider", 1283 | "smallvec", 1284 | "zerovec", 1285 | ] 1286 | 1287 | [[package]] 1288 | name = "icu_normalizer_data" 1289 | version = "2.0.0" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" 1292 | 1293 | [[package]] 1294 | name = "icu_properties" 1295 | version = "2.0.1" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" 1298 | dependencies = [ 1299 | "displaydoc", 1300 | "icu_collections", 1301 | "icu_locale_core", 1302 | "icu_properties_data", 1303 | "icu_provider", 1304 | "potential_utf", 1305 | "zerotrie", 1306 | "zerovec", 1307 | ] 1308 | 1309 | [[package]] 1310 | name = "icu_properties_data" 1311 | version = "2.0.1" 1312 | source = "registry+https://github.com/rust-lang/crates.io-index" 1313 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" 1314 | 1315 | [[package]] 1316 | name = "icu_provider" 1317 | version = "2.0.0" 1318 | source = "registry+https://github.com/rust-lang/crates.io-index" 1319 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" 1320 | dependencies = [ 1321 | "displaydoc", 1322 | "icu_locale_core", 1323 | "stable_deref_trait", 1324 | "tinystr", 1325 | "writeable", 1326 | "yoke", 1327 | "zerofrom", 1328 | "zerotrie", 1329 | "zerovec", 1330 | ] 1331 | 1332 | [[package]] 1333 | name = "idna" 1334 | version = "1.1.0" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 1337 | dependencies = [ 1338 | "idna_adapter", 1339 | "smallvec", 1340 | "utf8_iter", 1341 | ] 1342 | 1343 | [[package]] 1344 | name = "idna_adapter" 1345 | version = "1.2.1" 1346 | source = "registry+https://github.com/rust-lang/crates.io-index" 1347 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1348 | dependencies = [ 1349 | "icu_normalizer", 1350 | "icu_properties", 1351 | ] 1352 | 1353 | [[package]] 1354 | name = "indexmap" 1355 | version = "2.11.0" 1356 | source = "registry+https://github.com/rust-lang/crates.io-index" 1357 | checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9" 1358 | dependencies = [ 1359 | "equivalent", 1360 | "hashbrown", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "io-uring" 1365 | version = "0.7.10" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" 1368 | dependencies = [ 1369 | "bitflags", 1370 | "cfg-if", 1371 | "libc", 1372 | ] 1373 | 1374 | [[package]] 1375 | name = "ipnet" 1376 | version = "2.11.0" 1377 | source = "registry+https://github.com/rust-lang/crates.io-index" 1378 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1379 | 1380 | [[package]] 1381 | name = "iri-string" 1382 | version = "0.7.8" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" 1385 | dependencies = [ 1386 | "memchr", 1387 | "serde", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "itertools" 1392 | version = "0.12.1" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" 1395 | dependencies = [ 1396 | "either", 1397 | ] 1398 | 1399 | [[package]] 1400 | name = "itoa" 1401 | version = "1.0.15" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 1404 | 1405 | [[package]] 1406 | name = "jobserver" 1407 | version = "0.1.34" 1408 | source = "registry+https://github.com/rust-lang/crates.io-index" 1409 | checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 1410 | dependencies = [ 1411 | "getrandom 0.3.3", 1412 | "libc", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "js-sys" 1417 | version = "0.3.77" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1420 | dependencies = [ 1421 | "once_cell", 1422 | "wasm-bindgen", 1423 | ] 1424 | 1425 | [[package]] 1426 | name = "lambda_runtime" 1427 | version = "0.14.4" 1428 | source = "registry+https://github.com/rust-lang/crates.io-index" 1429 | checksum = "edb1a631df22d6d81314268a94fda06ab15b3fa1fcea660e7c5c162caa8fba6b" 1430 | dependencies = [ 1431 | "async-stream", 1432 | "base64 0.22.1", 1433 | "bytes", 1434 | "futures", 1435 | "http 1.3.1", 1436 | "http-body-util", 1437 | "http-serde", 1438 | "hyper 1.7.0", 1439 | "lambda_runtime_api_client", 1440 | "pin-project", 1441 | "serde", 1442 | "serde_json", 1443 | "serde_path_to_error", 1444 | "tokio", 1445 | "tokio-stream", 1446 | "tower", 1447 | "tracing", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "lambda_runtime_api_client" 1452 | version = "0.12.4" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | checksum = "dd3ccfa59944d61c20b98892c84d9e0e8118d722a75beaebe68e69db36b4afe1" 1455 | dependencies = [ 1456 | "bytes", 1457 | "futures-channel", 1458 | "futures-util", 1459 | "http 1.3.1", 1460 | "http-body 1.0.1", 1461 | "http-body-util", 1462 | "hyper 1.7.0", 1463 | "hyper-util", 1464 | "tower", 1465 | "tracing", 1466 | "tracing-subscriber", 1467 | ] 1468 | 1469 | [[package]] 1470 | name = "lazy_static" 1471 | version = "1.5.0" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1474 | 1475 | [[package]] 1476 | name = "lazycell" 1477 | version = "1.3.0" 1478 | source = "registry+https://github.com/rust-lang/crates.io-index" 1479 | checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" 1480 | 1481 | [[package]] 1482 | name = "libc" 1483 | version = "0.2.175" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" 1486 | 1487 | [[package]] 1488 | name = "libloading" 1489 | version = "0.8.8" 1490 | source = "registry+https://github.com/rust-lang/crates.io-index" 1491 | checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" 1492 | dependencies = [ 1493 | "cfg-if", 1494 | "windows-targets 0.53.3", 1495 | ] 1496 | 1497 | [[package]] 1498 | name = "linux-raw-sys" 1499 | version = "0.4.15" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1502 | 1503 | [[package]] 1504 | name = "linux-raw-sys" 1505 | version = "0.9.4" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" 1508 | 1509 | [[package]] 1510 | name = "litemap" 1511 | version = "0.8.0" 1512 | source = "registry+https://github.com/rust-lang/crates.io-index" 1513 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" 1514 | 1515 | [[package]] 1516 | name = "log" 1517 | version = "0.4.27" 1518 | source = "registry+https://github.com/rust-lang/crates.io-index" 1519 | checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" 1520 | 1521 | [[package]] 1522 | name = "matchers" 1523 | version = "0.1.0" 1524 | source = "registry+https://github.com/rust-lang/crates.io-index" 1525 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 1526 | dependencies = [ 1527 | "regex-automata 0.1.10", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "memchr" 1532 | version = "2.7.5" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" 1535 | 1536 | [[package]] 1537 | name = "mime" 1538 | version = "0.3.17" 1539 | source = "registry+https://github.com/rust-lang/crates.io-index" 1540 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1541 | 1542 | [[package]] 1543 | name = "minimal-lexical" 1544 | version = "0.2.1" 1545 | source = "registry+https://github.com/rust-lang/crates.io-index" 1546 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1547 | 1548 | [[package]] 1549 | name = "miniz_oxide" 1550 | version = "0.8.9" 1551 | source = "registry+https://github.com/rust-lang/crates.io-index" 1552 | checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 1553 | dependencies = [ 1554 | "adler2", 1555 | ] 1556 | 1557 | [[package]] 1558 | name = "mio" 1559 | version = "1.0.4" 1560 | source = "registry+https://github.com/rust-lang/crates.io-index" 1561 | checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" 1562 | dependencies = [ 1563 | "libc", 1564 | "wasi 0.11.1+wasi-snapshot-preview1", 1565 | "windows-sys 0.59.0", 1566 | ] 1567 | 1568 | [[package]] 1569 | name = "native-tls" 1570 | version = "0.2.14" 1571 | source = "registry+https://github.com/rust-lang/crates.io-index" 1572 | checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" 1573 | dependencies = [ 1574 | "libc", 1575 | "log", 1576 | "openssl", 1577 | "openssl-probe", 1578 | "openssl-sys", 1579 | "schannel", 1580 | "security-framework 2.11.1", 1581 | "security-framework-sys", 1582 | "tempfile", 1583 | ] 1584 | 1585 | [[package]] 1586 | name = "nom" 1587 | version = "7.1.3" 1588 | source = "registry+https://github.com/rust-lang/crates.io-index" 1589 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1590 | dependencies = [ 1591 | "memchr", 1592 | "minimal-lexical", 1593 | ] 1594 | 1595 | [[package]] 1596 | name = "num-conv" 1597 | version = "0.1.0" 1598 | source = "registry+https://github.com/rust-lang/crates.io-index" 1599 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1600 | 1601 | [[package]] 1602 | name = "num-integer" 1603 | version = "0.1.46" 1604 | source = "registry+https://github.com/rust-lang/crates.io-index" 1605 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 1606 | dependencies = [ 1607 | "num-traits", 1608 | ] 1609 | 1610 | [[package]] 1611 | name = "num-traits" 1612 | version = "0.2.19" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1615 | dependencies = [ 1616 | "autocfg", 1617 | ] 1618 | 1619 | [[package]] 1620 | name = "num_cpus" 1621 | version = "1.17.0" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 1624 | dependencies = [ 1625 | "hermit-abi", 1626 | "libc", 1627 | ] 1628 | 1629 | [[package]] 1630 | name = "object" 1631 | version = "0.36.7" 1632 | source = "registry+https://github.com/rust-lang/crates.io-index" 1633 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1634 | dependencies = [ 1635 | "memchr", 1636 | ] 1637 | 1638 | [[package]] 1639 | name = "once_cell" 1640 | version = "1.21.3" 1641 | source = "registry+https://github.com/rust-lang/crates.io-index" 1642 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 1643 | 1644 | [[package]] 1645 | name = "openssl" 1646 | version = "0.10.73" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8" 1649 | dependencies = [ 1650 | "bitflags", 1651 | "cfg-if", 1652 | "foreign-types", 1653 | "libc", 1654 | "once_cell", 1655 | "openssl-macros", 1656 | "openssl-sys", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "openssl-macros" 1661 | version = "0.1.1" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 1664 | dependencies = [ 1665 | "proc-macro2", 1666 | "quote", 1667 | "syn", 1668 | ] 1669 | 1670 | [[package]] 1671 | name = "openssl-probe" 1672 | version = "0.1.6" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" 1675 | 1676 | [[package]] 1677 | name = "openssl-src" 1678 | version = "300.5.2+3.5.2" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "d270b79e2926f5150189d475bc7e9d2c69f9c4697b185fa917d5a32b792d21b4" 1681 | dependencies = [ 1682 | "cc", 1683 | ] 1684 | 1685 | [[package]] 1686 | name = "openssl-sys" 1687 | version = "0.9.109" 1688 | source = "registry+https://github.com/rust-lang/crates.io-index" 1689 | checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571" 1690 | dependencies = [ 1691 | "cc", 1692 | "libc", 1693 | "openssl-src", 1694 | "pkg-config", 1695 | "vcpkg", 1696 | ] 1697 | 1698 | [[package]] 1699 | name = "outref" 1700 | version = "0.5.2" 1701 | source = "registry+https://github.com/rust-lang/crates.io-index" 1702 | checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" 1703 | 1704 | [[package]] 1705 | name = "percent-encoding" 1706 | version = "2.3.2" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 1709 | 1710 | [[package]] 1711 | name = "pin-project" 1712 | version = "1.1.10" 1713 | source = "registry+https://github.com/rust-lang/crates.io-index" 1714 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 1715 | dependencies = [ 1716 | "pin-project-internal", 1717 | ] 1718 | 1719 | [[package]] 1720 | name = "pin-project-internal" 1721 | version = "1.1.10" 1722 | source = "registry+https://github.com/rust-lang/crates.io-index" 1723 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 1724 | dependencies = [ 1725 | "proc-macro2", 1726 | "quote", 1727 | "syn", 1728 | ] 1729 | 1730 | [[package]] 1731 | name = "pin-project-lite" 1732 | version = "0.2.16" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1735 | 1736 | [[package]] 1737 | name = "pin-utils" 1738 | version = "0.1.0" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1741 | 1742 | [[package]] 1743 | name = "pkg-config" 1744 | version = "0.3.32" 1745 | source = "registry+https://github.com/rust-lang/crates.io-index" 1746 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 1747 | 1748 | [[package]] 1749 | name = "potential_utf" 1750 | version = "0.1.2" 1751 | source = "registry+https://github.com/rust-lang/crates.io-index" 1752 | checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" 1753 | dependencies = [ 1754 | "zerovec", 1755 | ] 1756 | 1757 | [[package]] 1758 | name = "powerfmt" 1759 | version = "0.2.0" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1762 | 1763 | [[package]] 1764 | name = "prettyplease" 1765 | version = "0.2.37" 1766 | source = "registry+https://github.com/rust-lang/crates.io-index" 1767 | checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 1768 | dependencies = [ 1769 | "proc-macro2", 1770 | "syn", 1771 | ] 1772 | 1773 | [[package]] 1774 | name = "proc-macro2" 1775 | version = "1.0.101" 1776 | source = "registry+https://github.com/rust-lang/crates.io-index" 1777 | checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" 1778 | dependencies = [ 1779 | "unicode-ident", 1780 | ] 1781 | 1782 | [[package]] 1783 | name = "quote" 1784 | version = "1.0.40" 1785 | source = "registry+https://github.com/rust-lang/crates.io-index" 1786 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 1787 | dependencies = [ 1788 | "proc-macro2", 1789 | ] 1790 | 1791 | [[package]] 1792 | name = "r-efi" 1793 | version = "5.3.0" 1794 | source = "registry+https://github.com/rust-lang/crates.io-index" 1795 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 1796 | 1797 | [[package]] 1798 | name = "regex" 1799 | version = "1.11.2" 1800 | source = "registry+https://github.com/rust-lang/crates.io-index" 1801 | checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" 1802 | dependencies = [ 1803 | "aho-corasick", 1804 | "memchr", 1805 | "regex-automata 0.4.10", 1806 | "regex-syntax 0.8.6", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "regex-automata" 1811 | version = "0.1.10" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 1814 | dependencies = [ 1815 | "regex-syntax 0.6.29", 1816 | ] 1817 | 1818 | [[package]] 1819 | name = "regex-automata" 1820 | version = "0.4.10" 1821 | source = "registry+https://github.com/rust-lang/crates.io-index" 1822 | checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" 1823 | dependencies = [ 1824 | "aho-corasick", 1825 | "memchr", 1826 | "regex-syntax 0.8.6", 1827 | ] 1828 | 1829 | [[package]] 1830 | name = "regex-lite" 1831 | version = "0.1.7" 1832 | source = "registry+https://github.com/rust-lang/crates.io-index" 1833 | checksum = "943f41321c63ef1c92fd763bfe054d2668f7f225a5c29f0105903dc2fc04ba30" 1834 | 1835 | [[package]] 1836 | name = "regex-syntax" 1837 | version = "0.6.29" 1838 | source = "registry+https://github.com/rust-lang/crates.io-index" 1839 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" 1840 | 1841 | [[package]] 1842 | name = "regex-syntax" 1843 | version = "0.8.6" 1844 | source = "registry+https://github.com/rust-lang/crates.io-index" 1845 | checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" 1846 | 1847 | [[package]] 1848 | name = "reqwest" 1849 | version = "0.12.23" 1850 | source = "registry+https://github.com/rust-lang/crates.io-index" 1851 | checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" 1852 | dependencies = [ 1853 | "base64 0.22.1", 1854 | "bytes", 1855 | "encoding_rs", 1856 | "futures-core", 1857 | "h2 0.4.12", 1858 | "http 1.3.1", 1859 | "http-body 1.0.1", 1860 | "http-body-util", 1861 | "hyper 1.7.0", 1862 | "hyper-rustls 0.27.7", 1863 | "hyper-tls", 1864 | "hyper-util", 1865 | "js-sys", 1866 | "log", 1867 | "mime", 1868 | "native-tls", 1869 | "percent-encoding", 1870 | "pin-project-lite", 1871 | "rustls-pki-types", 1872 | "serde", 1873 | "serde_json", 1874 | "serde_urlencoded", 1875 | "sync_wrapper", 1876 | "tokio", 1877 | "tokio-native-tls", 1878 | "tower", 1879 | "tower-http", 1880 | "tower-service", 1881 | "url", 1882 | "wasm-bindgen", 1883 | "wasm-bindgen-futures", 1884 | "web-sys", 1885 | ] 1886 | 1887 | [[package]] 1888 | name = "ring" 1889 | version = "0.17.14" 1890 | source = "registry+https://github.com/rust-lang/crates.io-index" 1891 | checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 1892 | dependencies = [ 1893 | "cc", 1894 | "cfg-if", 1895 | "getrandom 0.2.16", 1896 | "libc", 1897 | "untrusted", 1898 | "windows-sys 0.52.0", 1899 | ] 1900 | 1901 | [[package]] 1902 | name = "rustc-demangle" 1903 | version = "0.1.26" 1904 | source = "registry+https://github.com/rust-lang/crates.io-index" 1905 | checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" 1906 | 1907 | [[package]] 1908 | name = "rustc-hash" 1909 | version = "1.1.0" 1910 | source = "registry+https://github.com/rust-lang/crates.io-index" 1911 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 1912 | 1913 | [[package]] 1914 | name = "rustc_version" 1915 | version = "0.4.1" 1916 | source = "registry+https://github.com/rust-lang/crates.io-index" 1917 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 1918 | dependencies = [ 1919 | "semver", 1920 | ] 1921 | 1922 | [[package]] 1923 | name = "rustix" 1924 | version = "0.38.44" 1925 | source = "registry+https://github.com/rust-lang/crates.io-index" 1926 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 1927 | dependencies = [ 1928 | "bitflags", 1929 | "errno", 1930 | "libc", 1931 | "linux-raw-sys 0.4.15", 1932 | "windows-sys 0.59.0", 1933 | ] 1934 | 1935 | [[package]] 1936 | name = "rustix" 1937 | version = "1.0.8" 1938 | source = "registry+https://github.com/rust-lang/crates.io-index" 1939 | checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8" 1940 | dependencies = [ 1941 | "bitflags", 1942 | "errno", 1943 | "libc", 1944 | "linux-raw-sys 0.9.4", 1945 | "windows-sys 0.60.2", 1946 | ] 1947 | 1948 | [[package]] 1949 | name = "rustls" 1950 | version = "0.21.12" 1951 | source = "registry+https://github.com/rust-lang/crates.io-index" 1952 | checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" 1953 | dependencies = [ 1954 | "log", 1955 | "ring", 1956 | "rustls-webpki 0.101.7", 1957 | "sct", 1958 | ] 1959 | 1960 | [[package]] 1961 | name = "rustls" 1962 | version = "0.23.31" 1963 | source = "registry+https://github.com/rust-lang/crates.io-index" 1964 | checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" 1965 | dependencies = [ 1966 | "aws-lc-rs", 1967 | "once_cell", 1968 | "rustls-pki-types", 1969 | "rustls-webpki 0.103.4", 1970 | "subtle", 1971 | "zeroize", 1972 | ] 1973 | 1974 | [[package]] 1975 | name = "rustls-native-certs" 1976 | version = "0.6.3" 1977 | source = "registry+https://github.com/rust-lang/crates.io-index" 1978 | checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" 1979 | dependencies = [ 1980 | "openssl-probe", 1981 | "rustls-pemfile", 1982 | "schannel", 1983 | "security-framework 2.11.1", 1984 | ] 1985 | 1986 | [[package]] 1987 | name = "rustls-native-certs" 1988 | version = "0.8.1" 1989 | source = "registry+https://github.com/rust-lang/crates.io-index" 1990 | checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" 1991 | dependencies = [ 1992 | "openssl-probe", 1993 | "rustls-pki-types", 1994 | "schannel", 1995 | "security-framework 3.3.0", 1996 | ] 1997 | 1998 | [[package]] 1999 | name = "rustls-pemfile" 2000 | version = "1.0.4" 2001 | source = "registry+https://github.com/rust-lang/crates.io-index" 2002 | checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" 2003 | dependencies = [ 2004 | "base64 0.21.7", 2005 | ] 2006 | 2007 | [[package]] 2008 | name = "rustls-pki-types" 2009 | version = "1.12.0" 2010 | source = "registry+https://github.com/rust-lang/crates.io-index" 2011 | checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" 2012 | dependencies = [ 2013 | "zeroize", 2014 | ] 2015 | 2016 | [[package]] 2017 | name = "rustls-webpki" 2018 | version = "0.101.7" 2019 | source = "registry+https://github.com/rust-lang/crates.io-index" 2020 | checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" 2021 | dependencies = [ 2022 | "ring", 2023 | "untrusted", 2024 | ] 2025 | 2026 | [[package]] 2027 | name = "rustls-webpki" 2028 | version = "0.103.4" 2029 | source = "registry+https://github.com/rust-lang/crates.io-index" 2030 | checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" 2031 | dependencies = [ 2032 | "aws-lc-rs", 2033 | "ring", 2034 | "rustls-pki-types", 2035 | "untrusted", 2036 | ] 2037 | 2038 | [[package]] 2039 | name = "rustversion" 2040 | version = "1.0.22" 2041 | source = "registry+https://github.com/rust-lang/crates.io-index" 2042 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2043 | 2044 | [[package]] 2045 | name = "ryu" 2046 | version = "1.0.20" 2047 | source = "registry+https://github.com/rust-lang/crates.io-index" 2048 | checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" 2049 | 2050 | [[package]] 2051 | name = "schannel" 2052 | version = "0.1.27" 2053 | source = "registry+https://github.com/rust-lang/crates.io-index" 2054 | checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" 2055 | dependencies = [ 2056 | "windows-sys 0.59.0", 2057 | ] 2058 | 2059 | [[package]] 2060 | name = "sct" 2061 | version = "0.7.1" 2062 | source = "registry+https://github.com/rust-lang/crates.io-index" 2063 | checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" 2064 | dependencies = [ 2065 | "ring", 2066 | "untrusted", 2067 | ] 2068 | 2069 | [[package]] 2070 | name = "security-framework" 2071 | version = "2.11.1" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" 2074 | dependencies = [ 2075 | "bitflags", 2076 | "core-foundation 0.9.4", 2077 | "core-foundation-sys", 2078 | "libc", 2079 | "security-framework-sys", 2080 | ] 2081 | 2082 | [[package]] 2083 | name = "security-framework" 2084 | version = "3.3.0" 2085 | source = "registry+https://github.com/rust-lang/crates.io-index" 2086 | checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c" 2087 | dependencies = [ 2088 | "bitflags", 2089 | "core-foundation 0.10.1", 2090 | "core-foundation-sys", 2091 | "libc", 2092 | "security-framework-sys", 2093 | ] 2094 | 2095 | [[package]] 2096 | name = "security-framework-sys" 2097 | version = "2.14.0" 2098 | source = "registry+https://github.com/rust-lang/crates.io-index" 2099 | checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" 2100 | dependencies = [ 2101 | "core-foundation-sys", 2102 | "libc", 2103 | ] 2104 | 2105 | [[package]] 2106 | name = "semver" 2107 | version = "1.0.26" 2108 | source = "registry+https://github.com/rust-lang/crates.io-index" 2109 | checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" 2110 | 2111 | [[package]] 2112 | name = "serde" 2113 | version = "1.0.219" 2114 | source = "registry+https://github.com/rust-lang/crates.io-index" 2115 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 2116 | dependencies = [ 2117 | "serde_derive", 2118 | ] 2119 | 2120 | [[package]] 2121 | name = "serde_derive" 2122 | version = "1.0.219" 2123 | source = "registry+https://github.com/rust-lang/crates.io-index" 2124 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 2125 | dependencies = [ 2126 | "proc-macro2", 2127 | "quote", 2128 | "syn", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "serde_json" 2133 | version = "1.0.143" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a" 2136 | dependencies = [ 2137 | "itoa", 2138 | "memchr", 2139 | "ryu", 2140 | "serde", 2141 | ] 2142 | 2143 | [[package]] 2144 | name = "serde_path_to_error" 2145 | version = "0.1.17" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a" 2148 | dependencies = [ 2149 | "itoa", 2150 | "serde", 2151 | ] 2152 | 2153 | [[package]] 2154 | name = "serde_urlencoded" 2155 | version = "0.7.1" 2156 | source = "registry+https://github.com/rust-lang/crates.io-index" 2157 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 2158 | dependencies = [ 2159 | "form_urlencoded", 2160 | "itoa", 2161 | "ryu", 2162 | "serde", 2163 | ] 2164 | 2165 | [[package]] 2166 | name = "sha2" 2167 | version = "0.10.9" 2168 | source = "registry+https://github.com/rust-lang/crates.io-index" 2169 | checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 2170 | dependencies = [ 2171 | "cfg-if", 2172 | "cpufeatures", 2173 | "digest", 2174 | ] 2175 | 2176 | [[package]] 2177 | name = "sharded-slab" 2178 | version = "0.1.7" 2179 | source = "registry+https://github.com/rust-lang/crates.io-index" 2180 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2181 | dependencies = [ 2182 | "lazy_static", 2183 | ] 2184 | 2185 | [[package]] 2186 | name = "shlex" 2187 | version = "1.3.0" 2188 | source = "registry+https://github.com/rust-lang/crates.io-index" 2189 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2190 | 2191 | [[package]] 2192 | name = "signal-hook-registry" 2193 | version = "1.4.6" 2194 | source = "registry+https://github.com/rust-lang/crates.io-index" 2195 | checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b" 2196 | dependencies = [ 2197 | "libc", 2198 | ] 2199 | 2200 | [[package]] 2201 | name = "slab" 2202 | version = "0.4.11" 2203 | source = "registry+https://github.com/rust-lang/crates.io-index" 2204 | checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 2205 | 2206 | [[package]] 2207 | name = "smallvec" 2208 | version = "1.15.1" 2209 | source = "registry+https://github.com/rust-lang/crates.io-index" 2210 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2211 | 2212 | [[package]] 2213 | name = "socket2" 2214 | version = "0.5.10" 2215 | source = "registry+https://github.com/rust-lang/crates.io-index" 2216 | checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 2217 | dependencies = [ 2218 | "libc", 2219 | "windows-sys 0.52.0", 2220 | ] 2221 | 2222 | [[package]] 2223 | name = "socket2" 2224 | version = "0.6.0" 2225 | source = "registry+https://github.com/rust-lang/crates.io-index" 2226 | checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" 2227 | dependencies = [ 2228 | "libc", 2229 | "windows-sys 0.59.0", 2230 | ] 2231 | 2232 | [[package]] 2233 | name = "stable_deref_trait" 2234 | version = "1.2.0" 2235 | source = "registry+https://github.com/rust-lang/crates.io-index" 2236 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 2237 | 2238 | [[package]] 2239 | name = "subtle" 2240 | version = "2.6.1" 2241 | source = "registry+https://github.com/rust-lang/crates.io-index" 2242 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 2243 | 2244 | [[package]] 2245 | name = "syn" 2246 | version = "2.0.106" 2247 | source = "registry+https://github.com/rust-lang/crates.io-index" 2248 | checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" 2249 | dependencies = [ 2250 | "proc-macro2", 2251 | "quote", 2252 | "unicode-ident", 2253 | ] 2254 | 2255 | [[package]] 2256 | name = "sync_wrapper" 2257 | version = "1.0.2" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 2260 | dependencies = [ 2261 | "futures-core", 2262 | ] 2263 | 2264 | [[package]] 2265 | name = "synstructure" 2266 | version = "0.13.2" 2267 | source = "registry+https://github.com/rust-lang/crates.io-index" 2268 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 2269 | dependencies = [ 2270 | "proc-macro2", 2271 | "quote", 2272 | "syn", 2273 | ] 2274 | 2275 | [[package]] 2276 | name = "system-configuration" 2277 | version = "0.6.1" 2278 | source = "registry+https://github.com/rust-lang/crates.io-index" 2279 | checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" 2280 | dependencies = [ 2281 | "bitflags", 2282 | "core-foundation 0.9.4", 2283 | "system-configuration-sys", 2284 | ] 2285 | 2286 | [[package]] 2287 | name = "system-configuration-sys" 2288 | version = "0.6.0" 2289 | source = "registry+https://github.com/rust-lang/crates.io-index" 2290 | checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 2291 | dependencies = [ 2292 | "core-foundation-sys", 2293 | "libc", 2294 | ] 2295 | 2296 | [[package]] 2297 | name = "tempfile" 2298 | version = "3.21.0" 2299 | source = "registry+https://github.com/rust-lang/crates.io-index" 2300 | checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e" 2301 | dependencies = [ 2302 | "fastrand", 2303 | "getrandom 0.3.3", 2304 | "once_cell", 2305 | "rustix 1.0.8", 2306 | "windows-sys 0.60.2", 2307 | ] 2308 | 2309 | [[package]] 2310 | name = "thiserror" 2311 | version = "2.0.16" 2312 | source = "registry+https://github.com/rust-lang/crates.io-index" 2313 | checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" 2314 | dependencies = [ 2315 | "thiserror-impl", 2316 | ] 2317 | 2318 | [[package]] 2319 | name = "thiserror-impl" 2320 | version = "2.0.16" 2321 | source = "registry+https://github.com/rust-lang/crates.io-index" 2322 | checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" 2323 | dependencies = [ 2324 | "proc-macro2", 2325 | "quote", 2326 | "syn", 2327 | ] 2328 | 2329 | [[package]] 2330 | name = "thread_local" 2331 | version = "1.1.9" 2332 | source = "registry+https://github.com/rust-lang/crates.io-index" 2333 | checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 2334 | dependencies = [ 2335 | "cfg-if", 2336 | ] 2337 | 2338 | [[package]] 2339 | name = "time" 2340 | version = "0.3.41" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" 2343 | dependencies = [ 2344 | "deranged", 2345 | "num-conv", 2346 | "powerfmt", 2347 | "serde", 2348 | "time-core", 2349 | "time-macros", 2350 | ] 2351 | 2352 | [[package]] 2353 | name = "time-core" 2354 | version = "0.1.4" 2355 | source = "registry+https://github.com/rust-lang/crates.io-index" 2356 | checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" 2357 | 2358 | [[package]] 2359 | name = "time-macros" 2360 | version = "0.2.22" 2361 | source = "registry+https://github.com/rust-lang/crates.io-index" 2362 | checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" 2363 | dependencies = [ 2364 | "num-conv", 2365 | "time-core", 2366 | ] 2367 | 2368 | [[package]] 2369 | name = "tinystr" 2370 | version = "0.8.1" 2371 | source = "registry+https://github.com/rust-lang/crates.io-index" 2372 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" 2373 | dependencies = [ 2374 | "displaydoc", 2375 | "zerovec", 2376 | ] 2377 | 2378 | [[package]] 2379 | name = "tokio" 2380 | version = "1.47.1" 2381 | source = "registry+https://github.com/rust-lang/crates.io-index" 2382 | checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" 2383 | dependencies = [ 2384 | "backtrace", 2385 | "bytes", 2386 | "io-uring", 2387 | "libc", 2388 | "mio", 2389 | "pin-project-lite", 2390 | "signal-hook-registry", 2391 | "slab", 2392 | "socket2 0.6.0", 2393 | "tokio-macros", 2394 | "windows-sys 0.59.0", 2395 | ] 2396 | 2397 | [[package]] 2398 | name = "tokio-macros" 2399 | version = "2.5.0" 2400 | source = "registry+https://github.com/rust-lang/crates.io-index" 2401 | checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 2402 | dependencies = [ 2403 | "proc-macro2", 2404 | "quote", 2405 | "syn", 2406 | ] 2407 | 2408 | [[package]] 2409 | name = "tokio-native-tls" 2410 | version = "0.3.1" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 2413 | dependencies = [ 2414 | "native-tls", 2415 | "tokio", 2416 | ] 2417 | 2418 | [[package]] 2419 | name = "tokio-rustls" 2420 | version = "0.24.1" 2421 | source = "registry+https://github.com/rust-lang/crates.io-index" 2422 | checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" 2423 | dependencies = [ 2424 | "rustls 0.21.12", 2425 | "tokio", 2426 | ] 2427 | 2428 | [[package]] 2429 | name = "tokio-rustls" 2430 | version = "0.26.2" 2431 | source = "registry+https://github.com/rust-lang/crates.io-index" 2432 | checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b" 2433 | dependencies = [ 2434 | "rustls 0.23.31", 2435 | "tokio", 2436 | ] 2437 | 2438 | [[package]] 2439 | name = "tokio-stream" 2440 | version = "0.1.17" 2441 | source = "registry+https://github.com/rust-lang/crates.io-index" 2442 | checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" 2443 | dependencies = [ 2444 | "futures-core", 2445 | "pin-project-lite", 2446 | "tokio", 2447 | ] 2448 | 2449 | [[package]] 2450 | name = "tokio-test" 2451 | version = "0.4.4" 2452 | source = "registry+https://github.com/rust-lang/crates.io-index" 2453 | checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7" 2454 | dependencies = [ 2455 | "async-stream", 2456 | "bytes", 2457 | "futures-core", 2458 | "tokio", 2459 | "tokio-stream", 2460 | ] 2461 | 2462 | [[package]] 2463 | name = "tokio-util" 2464 | version = "0.7.16" 2465 | source = "registry+https://github.com/rust-lang/crates.io-index" 2466 | checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" 2467 | dependencies = [ 2468 | "bytes", 2469 | "futures-core", 2470 | "futures-sink", 2471 | "pin-project-lite", 2472 | "tokio", 2473 | ] 2474 | 2475 | [[package]] 2476 | name = "tower" 2477 | version = "0.5.2" 2478 | source = "registry+https://github.com/rust-lang/crates.io-index" 2479 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 2480 | dependencies = [ 2481 | "futures-core", 2482 | "futures-util", 2483 | "pin-project-lite", 2484 | "sync_wrapper", 2485 | "tokio", 2486 | "tower-layer", 2487 | "tower-service", 2488 | ] 2489 | 2490 | [[package]] 2491 | name = "tower-http" 2492 | version = "0.6.6" 2493 | source = "registry+https://github.com/rust-lang/crates.io-index" 2494 | checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" 2495 | dependencies = [ 2496 | "bitflags", 2497 | "bytes", 2498 | "futures-util", 2499 | "http 1.3.1", 2500 | "http-body 1.0.1", 2501 | "iri-string", 2502 | "pin-project-lite", 2503 | "tower", 2504 | "tower-layer", 2505 | "tower-service", 2506 | ] 2507 | 2508 | [[package]] 2509 | name = "tower-layer" 2510 | version = "0.3.3" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 2513 | 2514 | [[package]] 2515 | name = "tower-service" 2516 | version = "0.3.3" 2517 | source = "registry+https://github.com/rust-lang/crates.io-index" 2518 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2519 | 2520 | [[package]] 2521 | name = "tracing" 2522 | version = "0.1.41" 2523 | source = "registry+https://github.com/rust-lang/crates.io-index" 2524 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2525 | dependencies = [ 2526 | "log", 2527 | "pin-project-lite", 2528 | "tracing-attributes", 2529 | "tracing-core", 2530 | ] 2531 | 2532 | [[package]] 2533 | name = "tracing-attributes" 2534 | version = "0.1.30" 2535 | source = "registry+https://github.com/rust-lang/crates.io-index" 2536 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 2537 | dependencies = [ 2538 | "proc-macro2", 2539 | "quote", 2540 | "syn", 2541 | ] 2542 | 2543 | [[package]] 2544 | name = "tracing-core" 2545 | version = "0.1.34" 2546 | source = "registry+https://github.com/rust-lang/crates.io-index" 2547 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 2548 | dependencies = [ 2549 | "once_cell", 2550 | "valuable", 2551 | ] 2552 | 2553 | [[package]] 2554 | name = "tracing-serde" 2555 | version = "0.2.0" 2556 | source = "registry+https://github.com/rust-lang/crates.io-index" 2557 | checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1" 2558 | dependencies = [ 2559 | "serde", 2560 | "tracing-core", 2561 | ] 2562 | 2563 | [[package]] 2564 | name = "tracing-subscriber" 2565 | version = "0.3.19" 2566 | source = "registry+https://github.com/rust-lang/crates.io-index" 2567 | checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" 2568 | dependencies = [ 2569 | "matchers", 2570 | "once_cell", 2571 | "regex", 2572 | "serde", 2573 | "serde_json", 2574 | "sharded-slab", 2575 | "thread_local", 2576 | "tracing", 2577 | "tracing-core", 2578 | "tracing-serde", 2579 | ] 2580 | 2581 | [[package]] 2582 | name = "try-lock" 2583 | version = "0.2.5" 2584 | source = "registry+https://github.com/rust-lang/crates.io-index" 2585 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2586 | 2587 | [[package]] 2588 | name = "typenum" 2589 | version = "1.18.0" 2590 | source = "registry+https://github.com/rust-lang/crates.io-index" 2591 | checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" 2592 | 2593 | [[package]] 2594 | name = "unicode-ident" 2595 | version = "1.0.18" 2596 | source = "registry+https://github.com/rust-lang/crates.io-index" 2597 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 2598 | 2599 | [[package]] 2600 | name = "untrusted" 2601 | version = "0.9.0" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2604 | 2605 | [[package]] 2606 | name = "url" 2607 | version = "2.5.7" 2608 | source = "registry+https://github.com/rust-lang/crates.io-index" 2609 | checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" 2610 | dependencies = [ 2611 | "form_urlencoded", 2612 | "idna", 2613 | "percent-encoding", 2614 | "serde", 2615 | ] 2616 | 2617 | [[package]] 2618 | name = "urlencoding" 2619 | version = "2.1.3" 2620 | source = "registry+https://github.com/rust-lang/crates.io-index" 2621 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 2622 | 2623 | [[package]] 2624 | name = "utf8_iter" 2625 | version = "1.0.4" 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" 2627 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2628 | 2629 | [[package]] 2630 | name = "uuid" 2631 | version = "1.18.0" 2632 | source = "registry+https://github.com/rust-lang/crates.io-index" 2633 | checksum = "f33196643e165781c20a5ead5582283a7dacbb87855d867fbc2df3f81eddc1be" 2634 | dependencies = [ 2635 | "js-sys", 2636 | "wasm-bindgen", 2637 | ] 2638 | 2639 | [[package]] 2640 | name = "valuable" 2641 | version = "0.1.1" 2642 | source = "registry+https://github.com/rust-lang/crates.io-index" 2643 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 2644 | 2645 | [[package]] 2646 | name = "vcpkg" 2647 | version = "0.2.15" 2648 | source = "registry+https://github.com/rust-lang/crates.io-index" 2649 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 2650 | 2651 | [[package]] 2652 | name = "version_check" 2653 | version = "0.9.5" 2654 | source = "registry+https://github.com/rust-lang/crates.io-index" 2655 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2656 | 2657 | [[package]] 2658 | name = "vsimd" 2659 | version = "0.8.0" 2660 | source = "registry+https://github.com/rust-lang/crates.io-index" 2661 | checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" 2662 | 2663 | [[package]] 2664 | name = "want" 2665 | version = "0.3.1" 2666 | source = "registry+https://github.com/rust-lang/crates.io-index" 2667 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2668 | dependencies = [ 2669 | "try-lock", 2670 | ] 2671 | 2672 | [[package]] 2673 | name = "wasi" 2674 | version = "0.11.1+wasi-snapshot-preview1" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 2677 | 2678 | [[package]] 2679 | name = "wasi" 2680 | version = "0.14.2+wasi-0.2.4" 2681 | source = "registry+https://github.com/rust-lang/crates.io-index" 2682 | checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" 2683 | dependencies = [ 2684 | "wit-bindgen-rt", 2685 | ] 2686 | 2687 | [[package]] 2688 | name = "wasm-bindgen" 2689 | version = "0.2.100" 2690 | source = "registry+https://github.com/rust-lang/crates.io-index" 2691 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2692 | dependencies = [ 2693 | "cfg-if", 2694 | "once_cell", 2695 | "rustversion", 2696 | "wasm-bindgen-macro", 2697 | ] 2698 | 2699 | [[package]] 2700 | name = "wasm-bindgen-backend" 2701 | version = "0.2.100" 2702 | source = "registry+https://github.com/rust-lang/crates.io-index" 2703 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2704 | dependencies = [ 2705 | "bumpalo", 2706 | "log", 2707 | "proc-macro2", 2708 | "quote", 2709 | "syn", 2710 | "wasm-bindgen-shared", 2711 | ] 2712 | 2713 | [[package]] 2714 | name = "wasm-bindgen-futures" 2715 | version = "0.4.50" 2716 | source = "registry+https://github.com/rust-lang/crates.io-index" 2717 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2718 | dependencies = [ 2719 | "cfg-if", 2720 | "js-sys", 2721 | "once_cell", 2722 | "wasm-bindgen", 2723 | "web-sys", 2724 | ] 2725 | 2726 | [[package]] 2727 | name = "wasm-bindgen-macro" 2728 | version = "0.2.100" 2729 | source = "registry+https://github.com/rust-lang/crates.io-index" 2730 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2731 | dependencies = [ 2732 | "quote", 2733 | "wasm-bindgen-macro-support", 2734 | ] 2735 | 2736 | [[package]] 2737 | name = "wasm-bindgen-macro-support" 2738 | version = "0.2.100" 2739 | source = "registry+https://github.com/rust-lang/crates.io-index" 2740 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2741 | dependencies = [ 2742 | "proc-macro2", 2743 | "quote", 2744 | "syn", 2745 | "wasm-bindgen-backend", 2746 | "wasm-bindgen-shared", 2747 | ] 2748 | 2749 | [[package]] 2750 | name = "wasm-bindgen-shared" 2751 | version = "0.2.100" 2752 | source = "registry+https://github.com/rust-lang/crates.io-index" 2753 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2754 | dependencies = [ 2755 | "unicode-ident", 2756 | ] 2757 | 2758 | [[package]] 2759 | name = "web-sys" 2760 | version = "0.3.77" 2761 | source = "registry+https://github.com/rust-lang/crates.io-index" 2762 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 2763 | dependencies = [ 2764 | "js-sys", 2765 | "wasm-bindgen", 2766 | ] 2767 | 2768 | [[package]] 2769 | name = "which" 2770 | version = "4.4.2" 2771 | source = "registry+https://github.com/rust-lang/crates.io-index" 2772 | checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" 2773 | dependencies = [ 2774 | "either", 2775 | "home", 2776 | "once_cell", 2777 | "rustix 0.38.44", 2778 | ] 2779 | 2780 | [[package]] 2781 | name = "windows-core" 2782 | version = "0.61.2" 2783 | source = "registry+https://github.com/rust-lang/crates.io-index" 2784 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 2785 | dependencies = [ 2786 | "windows-implement", 2787 | "windows-interface", 2788 | "windows-link", 2789 | "windows-result", 2790 | "windows-strings", 2791 | ] 2792 | 2793 | [[package]] 2794 | name = "windows-implement" 2795 | version = "0.60.0" 2796 | source = "registry+https://github.com/rust-lang/crates.io-index" 2797 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" 2798 | dependencies = [ 2799 | "proc-macro2", 2800 | "quote", 2801 | "syn", 2802 | ] 2803 | 2804 | [[package]] 2805 | name = "windows-interface" 2806 | version = "0.59.1" 2807 | source = "registry+https://github.com/rust-lang/crates.io-index" 2808 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" 2809 | dependencies = [ 2810 | "proc-macro2", 2811 | "quote", 2812 | "syn", 2813 | ] 2814 | 2815 | [[package]] 2816 | name = "windows-link" 2817 | version = "0.1.3" 2818 | source = "registry+https://github.com/rust-lang/crates.io-index" 2819 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 2820 | 2821 | [[package]] 2822 | name = "windows-registry" 2823 | version = "0.5.3" 2824 | source = "registry+https://github.com/rust-lang/crates.io-index" 2825 | checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" 2826 | dependencies = [ 2827 | "windows-link", 2828 | "windows-result", 2829 | "windows-strings", 2830 | ] 2831 | 2832 | [[package]] 2833 | name = "windows-result" 2834 | version = "0.3.4" 2835 | source = "registry+https://github.com/rust-lang/crates.io-index" 2836 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 2837 | dependencies = [ 2838 | "windows-link", 2839 | ] 2840 | 2841 | [[package]] 2842 | name = "windows-strings" 2843 | version = "0.4.2" 2844 | source = "registry+https://github.com/rust-lang/crates.io-index" 2845 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 2846 | dependencies = [ 2847 | "windows-link", 2848 | ] 2849 | 2850 | [[package]] 2851 | name = "windows-sys" 2852 | version = "0.52.0" 2853 | source = "registry+https://github.com/rust-lang/crates.io-index" 2854 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2855 | dependencies = [ 2856 | "windows-targets 0.52.6", 2857 | ] 2858 | 2859 | [[package]] 2860 | name = "windows-sys" 2861 | version = "0.59.0" 2862 | source = "registry+https://github.com/rust-lang/crates.io-index" 2863 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2864 | dependencies = [ 2865 | "windows-targets 0.52.6", 2866 | ] 2867 | 2868 | [[package]] 2869 | name = "windows-sys" 2870 | version = "0.60.2" 2871 | source = "registry+https://github.com/rust-lang/crates.io-index" 2872 | checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 2873 | dependencies = [ 2874 | "windows-targets 0.53.3", 2875 | ] 2876 | 2877 | [[package]] 2878 | name = "windows-targets" 2879 | version = "0.52.6" 2880 | source = "registry+https://github.com/rust-lang/crates.io-index" 2881 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2882 | dependencies = [ 2883 | "windows_aarch64_gnullvm 0.52.6", 2884 | "windows_aarch64_msvc 0.52.6", 2885 | "windows_i686_gnu 0.52.6", 2886 | "windows_i686_gnullvm 0.52.6", 2887 | "windows_i686_msvc 0.52.6", 2888 | "windows_x86_64_gnu 0.52.6", 2889 | "windows_x86_64_gnullvm 0.52.6", 2890 | "windows_x86_64_msvc 0.52.6", 2891 | ] 2892 | 2893 | [[package]] 2894 | name = "windows-targets" 2895 | version = "0.53.3" 2896 | source = "registry+https://github.com/rust-lang/crates.io-index" 2897 | checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" 2898 | dependencies = [ 2899 | "windows-link", 2900 | "windows_aarch64_gnullvm 0.53.0", 2901 | "windows_aarch64_msvc 0.53.0", 2902 | "windows_i686_gnu 0.53.0", 2903 | "windows_i686_gnullvm 0.53.0", 2904 | "windows_i686_msvc 0.53.0", 2905 | "windows_x86_64_gnu 0.53.0", 2906 | "windows_x86_64_gnullvm 0.53.0", 2907 | "windows_x86_64_msvc 0.53.0", 2908 | ] 2909 | 2910 | [[package]] 2911 | name = "windows_aarch64_gnullvm" 2912 | version = "0.52.6" 2913 | source = "registry+https://github.com/rust-lang/crates.io-index" 2914 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2915 | 2916 | [[package]] 2917 | name = "windows_aarch64_gnullvm" 2918 | version = "0.53.0" 2919 | source = "registry+https://github.com/rust-lang/crates.io-index" 2920 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" 2921 | 2922 | [[package]] 2923 | name = "windows_aarch64_msvc" 2924 | version = "0.52.6" 2925 | source = "registry+https://github.com/rust-lang/crates.io-index" 2926 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2927 | 2928 | [[package]] 2929 | name = "windows_aarch64_msvc" 2930 | version = "0.53.0" 2931 | source = "registry+https://github.com/rust-lang/crates.io-index" 2932 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" 2933 | 2934 | [[package]] 2935 | name = "windows_i686_gnu" 2936 | version = "0.52.6" 2937 | source = "registry+https://github.com/rust-lang/crates.io-index" 2938 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2939 | 2940 | [[package]] 2941 | name = "windows_i686_gnu" 2942 | version = "0.53.0" 2943 | source = "registry+https://github.com/rust-lang/crates.io-index" 2944 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" 2945 | 2946 | [[package]] 2947 | name = "windows_i686_gnullvm" 2948 | version = "0.52.6" 2949 | source = "registry+https://github.com/rust-lang/crates.io-index" 2950 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2951 | 2952 | [[package]] 2953 | name = "windows_i686_gnullvm" 2954 | version = "0.53.0" 2955 | source = "registry+https://github.com/rust-lang/crates.io-index" 2956 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" 2957 | 2958 | [[package]] 2959 | name = "windows_i686_msvc" 2960 | version = "0.52.6" 2961 | source = "registry+https://github.com/rust-lang/crates.io-index" 2962 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2963 | 2964 | [[package]] 2965 | name = "windows_i686_msvc" 2966 | version = "0.53.0" 2967 | source = "registry+https://github.com/rust-lang/crates.io-index" 2968 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" 2969 | 2970 | [[package]] 2971 | name = "windows_x86_64_gnu" 2972 | version = "0.52.6" 2973 | source = "registry+https://github.com/rust-lang/crates.io-index" 2974 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2975 | 2976 | [[package]] 2977 | name = "windows_x86_64_gnu" 2978 | version = "0.53.0" 2979 | source = "registry+https://github.com/rust-lang/crates.io-index" 2980 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" 2981 | 2982 | [[package]] 2983 | name = "windows_x86_64_gnullvm" 2984 | version = "0.52.6" 2985 | source = "registry+https://github.com/rust-lang/crates.io-index" 2986 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2987 | 2988 | [[package]] 2989 | name = "windows_x86_64_gnullvm" 2990 | version = "0.53.0" 2991 | source = "registry+https://github.com/rust-lang/crates.io-index" 2992 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" 2993 | 2994 | [[package]] 2995 | name = "windows_x86_64_msvc" 2996 | version = "0.52.6" 2997 | source = "registry+https://github.com/rust-lang/crates.io-index" 2998 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2999 | 3000 | [[package]] 3001 | name = "windows_x86_64_msvc" 3002 | version = "0.53.0" 3003 | source = "registry+https://github.com/rust-lang/crates.io-index" 3004 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 3005 | 3006 | [[package]] 3007 | name = "wiremock" 3008 | version = "0.6.5" 3009 | source = "registry+https://github.com/rust-lang/crates.io-index" 3010 | checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" 3011 | dependencies = [ 3012 | "assert-json-diff", 3013 | "base64 0.22.1", 3014 | "deadpool", 3015 | "futures", 3016 | "http 1.3.1", 3017 | "http-body-util", 3018 | "hyper 1.7.0", 3019 | "hyper-util", 3020 | "log", 3021 | "once_cell", 3022 | "regex", 3023 | "serde", 3024 | "serde_json", 3025 | "tokio", 3026 | "url", 3027 | ] 3028 | 3029 | [[package]] 3030 | name = "wit-bindgen-rt" 3031 | version = "0.39.0" 3032 | source = "registry+https://github.com/rust-lang/crates.io-index" 3033 | checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" 3034 | dependencies = [ 3035 | "bitflags", 3036 | ] 3037 | 3038 | [[package]] 3039 | name = "writeable" 3040 | version = "0.6.1" 3041 | source = "registry+https://github.com/rust-lang/crates.io-index" 3042 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" 3043 | 3044 | [[package]] 3045 | name = "xmlparser" 3046 | version = "0.13.6" 3047 | source = "registry+https://github.com/rust-lang/crates.io-index" 3048 | checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" 3049 | 3050 | [[package]] 3051 | name = "yoke" 3052 | version = "0.8.0" 3053 | source = "registry+https://github.com/rust-lang/crates.io-index" 3054 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" 3055 | dependencies = [ 3056 | "serde", 3057 | "stable_deref_trait", 3058 | "yoke-derive", 3059 | "zerofrom", 3060 | ] 3061 | 3062 | [[package]] 3063 | name = "yoke-derive" 3064 | version = "0.8.0" 3065 | source = "registry+https://github.com/rust-lang/crates.io-index" 3066 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" 3067 | dependencies = [ 3068 | "proc-macro2", 3069 | "quote", 3070 | "syn", 3071 | "synstructure", 3072 | ] 3073 | 3074 | [[package]] 3075 | name = "zerofrom" 3076 | version = "0.1.6" 3077 | source = "registry+https://github.com/rust-lang/crates.io-index" 3078 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 3079 | dependencies = [ 3080 | "zerofrom-derive", 3081 | ] 3082 | 3083 | [[package]] 3084 | name = "zerofrom-derive" 3085 | version = "0.1.6" 3086 | source = "registry+https://github.com/rust-lang/crates.io-index" 3087 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 3088 | dependencies = [ 3089 | "proc-macro2", 3090 | "quote", 3091 | "syn", 3092 | "synstructure", 3093 | ] 3094 | 3095 | [[package]] 3096 | name = "zeroize" 3097 | version = "1.8.1" 3098 | source = "registry+https://github.com/rust-lang/crates.io-index" 3099 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 3100 | 3101 | [[package]] 3102 | name = "zerotrie" 3103 | version = "0.2.2" 3104 | source = "registry+https://github.com/rust-lang/crates.io-index" 3105 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" 3106 | dependencies = [ 3107 | "displaydoc", 3108 | "yoke", 3109 | "zerofrom", 3110 | ] 3111 | 3112 | [[package]] 3113 | name = "zerovec" 3114 | version = "0.11.4" 3115 | source = "registry+https://github.com/rust-lang/crates.io-index" 3116 | checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" 3117 | dependencies = [ 3118 | "yoke", 3119 | "zerofrom", 3120 | "zerovec-derive", 3121 | ] 3122 | 3123 | [[package]] 3124 | name = "zerovec-derive" 3125 | version = "0.11.1" 3126 | source = "registry+https://github.com/rust-lang/crates.io-index" 3127 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" 3128 | dependencies = [ 3129 | "proc-macro2", 3130 | "quote", 3131 | "syn", 3132 | ] 3133 | --------------------------------------------------------------------------------