├── .gitignore ├── src ├── models.rs ├── controllers.rs ├── controllers │ ├── user.rs │ ├── info.rs │ └── auth.rs ├── models │ └── auth.rs ├── error.rs ├── utils.rs └── main.rs ├── README.md ├── Cargo.toml └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .env -------------------------------------------------------------------------------- /src/models.rs: -------------------------------------------------------------------------------- 1 | pub mod auth; 2 | -------------------------------------------------------------------------------- /src/controllers.rs: -------------------------------------------------------------------------------- 1 | pub mod auth; 2 | pub mod user; 3 | pub mod info; -------------------------------------------------------------------------------- /src/controllers/user.rs: -------------------------------------------------------------------------------- 1 | use crate::{error::AppError, models::auth::Claims}; 2 | 3 | pub async fn user_profile(claims: Claims) -> Result, AppError> { 4 | // if the token is varified and data is extracted from the token by the implimentation in utils.rs then only the below code will run 5 | Ok(axum::Json(serde_json::json!({"email": claims.email}))) 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A REST API with Rust using axum crate 2 | 3 | > to run the project clone this repo then run the below command from root of the project 4 | 5 | ````bash 6 | DATABASE_URL="postgresql://user:password@host:port/database" cargo run 7 | ```` 8 | 9 | **NOTE: for the database i have used cockroachDB, you can also use any postgres DB, but for other database you have to make some changes** 10 | -------------------------------------------------------------------------------- /src/controllers/info.rs: -------------------------------------------------------------------------------- 1 | pub async fn route_info() -> axum::Json { 2 | axum::Json(serde_json::json!({ 3 | "routes": ["/", "/register", "/login", "/user_profile"], 4 | "routes_info": { 5 | "/" : "this route", 6 | "/register": "register a user with email and password", 7 | "/login": "login with the credentials used for registering", 8 | "/user_profile": "view your user profile with the token recieved from /login" 9 | } 10 | })) 11 | } 12 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "axum_api" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 7 | 8 | [dependencies] 9 | axum = {version = "0.5.13", features = ["headers"]} 10 | serde = { version = "1.0", features = ["derive"] } 11 | serde_json = "1.0.68" 12 | tokio = { version = "1.0", features = ["full"] } 13 | tracing = "0.1" 14 | tracing-subscriber = { version = "0.3", features = ["env-filter"] } 15 | tower-http = { version = "0.3.0", features = ["cors"] } 16 | sqlx = { version = "0.6", features = [ "runtime-tokio-rustls", "postgres", "json" ] } 17 | jsonwebtoken = "8.0" 18 | once_cell = "1.8" -------------------------------------------------------------------------------- /src/models/auth.rs: -------------------------------------------------------------------------------- 1 | use jsonwebtoken::{DecodingKey, EncodingKey}; 2 | use serde::{Deserialize, Serialize}; 3 | 4 | #[derive(Deserialize, sqlx::FromRow)] 5 | pub struct User { 6 | pub email: String, 7 | pub password: String, 8 | } 9 | 10 | #[derive(Deserialize, Serialize)] 11 | pub struct Claims { 12 | pub email: String, 13 | pub exp: u64, 14 | } 15 | 16 | pub struct Keys { 17 | pub encoding: EncodingKey, 18 | pub decoding: DecodingKey, 19 | } 20 | 21 | impl Keys { 22 | pub fn new(secret: &[u8]) -> Self { 23 | Self { 24 | encoding: EncodingKey::from_secret(secret), 25 | decoding: DecodingKey::from_secret(secret), 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/error.rs: -------------------------------------------------------------------------------- 1 | use axum::{http::StatusCode, response::IntoResponse, Json}; 2 | use serde_json::json; 3 | 4 | #[derive(Debug)] 5 | pub enum AppError { 6 | InvalidToken, 7 | WrongCredential, 8 | MissingCredential, 9 | TokenCreation, 10 | InternalServerError, 11 | UserDoesNotExist, 12 | UserAlreadyExits, 13 | } 14 | 15 | impl IntoResponse for AppError { 16 | fn into_response(self) -> axum::response::Response { 17 | let (status, err_msg) = match self { 18 | Self::InternalServerError => ( 19 | StatusCode::INTERNAL_SERVER_ERROR, 20 | "an internal server error occured", 21 | ), 22 | Self::InvalidToken => (StatusCode::BAD_REQUEST, "invalid token"), 23 | Self::MissingCredential => (StatusCode::BAD_REQUEST, "missing credential"), 24 | Self::TokenCreation => (StatusCode::INTERNAL_SERVER_ERROR, "failed to create token"), 25 | Self::WrongCredential => (StatusCode::UNAUTHORIZED, "wrong credentials"), 26 | Self::UserDoesNotExist => (StatusCode::UNAUTHORIZED, "User does not exist"), 27 | Self::UserAlreadyExits => (StatusCode::BAD_REQUEST, "User already exists"), 28 | }; 29 | (status, Json(json!({ "error": err_msg }))).into_response() 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/utils.rs: -------------------------------------------------------------------------------- 1 | use std::time::{Duration, SystemTime, UNIX_EPOCH}; 2 | 3 | use axum::{ 4 | async_trait, 5 | extract::{FromRequest, RequestParts}, 6 | headers::{authorization::Bearer, Authorization}, 7 | TypedHeader, 8 | }; 9 | use jsonwebtoken::{decode, Validation}; 10 | 11 | use crate::{error::AppError, models::auth::Claims, KEYS}; 12 | 13 | // get 8 hours timestamp for jwt expiry 14 | pub fn get_timestamp_8_hours_from_now() -> u64 { 15 | let now = SystemTime::now(); 16 | let since_the_epoch = now.duration_since(UNIX_EPOCH).expect("Time went backwards"); 17 | let eighthoursfromnow = since_the_epoch + Duration::from_secs(28800); 18 | eighthoursfromnow.as_secs() 19 | } 20 | 21 | // verify token and extract data from it (a kind of middleware), whenever you try to extract claims in the handle it will first run this code 22 | #[async_trait] 23 | impl FromRequest for Claims 24 | where 25 | B: Send, 26 | { 27 | type Rejection = AppError; 28 | 29 | async fn from_request(req: &mut RequestParts) -> Result { 30 | let TypedHeader(Authorization(bearer)) = 31 | TypedHeader::>::from_request(req) 32 | .await 33 | .map_err(|_| AppError::InvalidToken)?; 34 | let data = decode::(bearer.token(), &KEYS.decoding, &Validation::default()) 35 | .map_err(|_| AppError::InvalidToken)?; 36 | Ok(data.claims) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use axum::{ 2 | extract::Extension, 3 | routing::{get, post}, 4 | Router, 5 | }; 6 | use once_cell::sync::Lazy; 7 | use sqlx::postgres::PgPoolOptions; 8 | use tower_http::cors::{Any, CorsLayer}; 9 | use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; 10 | 11 | // import module 12 | mod controllers; 13 | mod error; 14 | mod models; 15 | mod utils; 16 | 17 | // secret key for JWT token 18 | static KEYS: Lazy = Lazy::new(|| { 19 | let secret = std::env::var("JWT_SECRET").unwrap_or_else(|_| "Your secret here".to_owned()); 20 | models::auth::Keys::new(secret.as_bytes()) 21 | }); 22 | 23 | #[tokio::main] 24 | async fn main() { 25 | let durl = std::env::var("DATABASE_URL").expect("set DATABASE_URL env variable"); 26 | // initialize tracing 27 | tracing_subscriber::registry() 28 | .with(tracing_subscriber::EnvFilter::new( 29 | std::env::var("RUST_LOG").unwrap_or_else(|_| "axum_api=debug".into()), 30 | )) 31 | .with(tracing_subscriber::fmt::layer()) 32 | .init(); 33 | 34 | let cors = CorsLayer::new().allow_origin(Any); 35 | 36 | let pool = PgPoolOptions::new() 37 | .max_connections(5) 38 | .connect(&durl) 39 | .await 40 | .expect("unable to connect to database"); 41 | 42 | let app = Router::new() 43 | .route("/", get(controllers::info::route_info)) 44 | .route("/login", post(controllers::auth::login)) 45 | .route("/register", post(controllers::auth::register)) 46 | //only loggedin user can access this route 47 | .route("/user_profile", get(controllers::user::user_profile)) 48 | .layer(cors) 49 | .layer(Extension(pool)); 50 | 51 | let addr = std::net::SocketAddr::from(([127, 0, 0, 1], 3000)); 52 | tracing::debug!("listening on {}", addr); 53 | axum::Server::bind(&addr) 54 | .serve(app.into_make_service()) 55 | .await 56 | .expect("failed to start server"); 57 | } 58 | -------------------------------------------------------------------------------- /src/controllers/auth.rs: -------------------------------------------------------------------------------- 1 | use axum::{Extension, Json}; 2 | use jsonwebtoken::{encode, Header}; 3 | use serde_json::{json, Value}; 4 | use sqlx::PgPool; 5 | 6 | use crate::{ 7 | error::AppError, 8 | models::{self, auth::Claims}, 9 | utils::get_timestamp_8_hours_from_now, 10 | KEYS, 11 | }; 12 | 13 | pub async fn login( 14 | Json(credentials): Json, 15 | Extension(pool): Extension, 16 | ) -> Result, AppError> { 17 | // check if email or password is a blank string 18 | if credentials.email.is_empty() || credentials.password.is_empty() { 19 | return Err(AppError::MissingCredential); 20 | } 21 | 22 | // get the user for the email from database 23 | let user = sqlx::query_as::<_, models::auth::User>( 24 | "SELECT email, password FROM users where email = $1", 25 | ) 26 | .bind(&credentials.email) 27 | .fetch_optional(&pool) 28 | .await 29 | .map_err(|err| { 30 | dbg!(err); 31 | AppError::InternalServerError 32 | })?; 33 | 34 | if let Some(user) = user { 35 | //if user exits then: 36 | 37 | // if password is encrypted than decode it first before comparing 38 | if user.password != credentials.password { 39 | // password is incorrect 40 | Err(AppError::WrongCredential) 41 | } else { 42 | let claims = Claims { 43 | email: credentials.email.to_owned(), 44 | exp: get_timestamp_8_hours_from_now(), 45 | }; 46 | let token = encode(&Header::default(), &claims, &KEYS.encoding) 47 | .map_err(|_| AppError::TokenCreation)?; 48 | // return bearer token 49 | Ok(Json(json!({ "access_token": token, "type": "Bearer" }))) 50 | } 51 | } else { 52 | // if the user does not exit 53 | Err(AppError::UserDoesNotExist) 54 | } 55 | } 56 | 57 | pub async fn register( 58 | Json(credentials): Json, 59 | Extension(pool): Extension, 60 | ) -> Result, AppError> { 61 | // check if email or password is a blank string 62 | if credentials.email.is_empty() || credentials.password.is_empty() { 63 | return Err(AppError::MissingCredential); 64 | } 65 | 66 | // get the user for the email from database 67 | let user = sqlx::query_as::<_, models::auth::User>( 68 | "SELECT email, password FROM users where email = $1", 69 | ) 70 | .bind(&credentials.email) 71 | .fetch_optional(&pool) 72 | .await 73 | .map_err(|err| { 74 | dbg!(err); 75 | AppError::InternalServerError 76 | })?; 77 | 78 | if let Some(_) = user { 79 | //if a user with email already exits send error 80 | return Err(AppError::UserAlreadyExits); 81 | } 82 | 83 | let result = sqlx::query("INSERT INTO users (email, password) values ($1, $2)") 84 | .bind(&credentials.email) 85 | .bind(credentials.password) 86 | .execute(&pool) 87 | .await 88 | .map_err(|_| AppError::InternalServerError)?; 89 | if result.rows_affected() < 1 { 90 | Err(AppError::InternalServerError) 91 | } else { 92 | Ok(Json(json!({ "msg": "registered successfully" }))) 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "ahash" 7 | version = "0.7.6" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" 10 | dependencies = [ 11 | "getrandom", 12 | "once_cell", 13 | "version_check", 14 | ] 15 | 16 | [[package]] 17 | name = "ansi_term" 18 | version = "0.12.1" 19 | source = "registry+https://github.com/rust-lang/crates.io-index" 20 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" 21 | dependencies = [ 22 | "winapi", 23 | ] 24 | 25 | [[package]] 26 | name = "async-trait" 27 | version = "0.1.56" 28 | source = "registry+https://github.com/rust-lang/crates.io-index" 29 | checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716" 30 | dependencies = [ 31 | "proc-macro2", 32 | "quote", 33 | "syn", 34 | ] 35 | 36 | [[package]] 37 | name = "atoi" 38 | version = "1.0.0" 39 | source = "registry+https://github.com/rust-lang/crates.io-index" 40 | checksum = "d7c57d12312ff59c811c0643f4d80830505833c9ffaebd193d819392b265be8e" 41 | dependencies = [ 42 | "num-traits", 43 | ] 44 | 45 | [[package]] 46 | name = "autocfg" 47 | version = "1.1.0" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" 50 | 51 | [[package]] 52 | name = "axum" 53 | version = "0.5.13" 54 | source = "registry+https://github.com/rust-lang/crates.io-index" 55 | checksum = "6b9496f0c1d1afb7a2af4338bbe1d969cddfead41d87a9fb3aaa6d0bbc7af648" 56 | dependencies = [ 57 | "async-trait", 58 | "axum-core", 59 | "bitflags", 60 | "bytes", 61 | "futures-util", 62 | "headers", 63 | "http", 64 | "http-body", 65 | "hyper", 66 | "itoa", 67 | "matchit", 68 | "memchr", 69 | "mime", 70 | "percent-encoding", 71 | "pin-project-lite", 72 | "serde", 73 | "serde_json", 74 | "serde_urlencoded", 75 | "sync_wrapper", 76 | "tokio", 77 | "tower", 78 | "tower-http", 79 | "tower-layer", 80 | "tower-service", 81 | ] 82 | 83 | [[package]] 84 | name = "axum-core" 85 | version = "0.2.7" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "e4f44a0e6200e9d11a1cdc989e4b358f6e3d354fbf48478f345a17f4e43f8635" 88 | dependencies = [ 89 | "async-trait", 90 | "bytes", 91 | "futures-util", 92 | "http", 93 | "http-body", 94 | "mime", 95 | ] 96 | 97 | [[package]] 98 | name = "axum_api" 99 | version = "0.1.0" 100 | dependencies = [ 101 | "axum", 102 | "jsonwebtoken", 103 | "once_cell", 104 | "serde", 105 | "serde_json", 106 | "sqlx", 107 | "tokio", 108 | "tower-http", 109 | "tracing", 110 | "tracing-subscriber", 111 | ] 112 | 113 | [[package]] 114 | name = "base64" 115 | version = "0.13.0" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" 118 | 119 | [[package]] 120 | name = "bitflags" 121 | version = "1.3.2" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 124 | 125 | [[package]] 126 | name = "block-buffer" 127 | version = "0.10.2" 128 | source = "registry+https://github.com/rust-lang/crates.io-index" 129 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" 130 | dependencies = [ 131 | "generic-array", 132 | ] 133 | 134 | [[package]] 135 | name = "bumpalo" 136 | version = "3.10.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" 139 | 140 | [[package]] 141 | name = "byteorder" 142 | version = "1.4.3" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" 145 | 146 | [[package]] 147 | name = "bytes" 148 | version = "1.2.0" 149 | source = "registry+https://github.com/rust-lang/crates.io-index" 150 | checksum = "f0b3de4a0c5e67e16066a0715723abd91edc2f9001d09c46e1dca929351e130e" 151 | 152 | [[package]] 153 | name = "cc" 154 | version = "1.0.73" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" 157 | 158 | [[package]] 159 | name = "cfg-if" 160 | version = "1.0.0" 161 | source = "registry+https://github.com/rust-lang/crates.io-index" 162 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 163 | 164 | [[package]] 165 | name = "cpufeatures" 166 | version = "0.2.2" 167 | source = "registry+https://github.com/rust-lang/crates.io-index" 168 | checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" 169 | dependencies = [ 170 | "libc", 171 | ] 172 | 173 | [[package]] 174 | name = "crc" 175 | version = "3.0.0" 176 | source = "registry+https://github.com/rust-lang/crates.io-index" 177 | checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3" 178 | dependencies = [ 179 | "crc-catalog", 180 | ] 181 | 182 | [[package]] 183 | name = "crc-catalog" 184 | version = "2.1.0" 185 | source = "registry+https://github.com/rust-lang/crates.io-index" 186 | checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" 187 | 188 | [[package]] 189 | name = "crossbeam-queue" 190 | version = "0.3.6" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" 193 | dependencies = [ 194 | "cfg-if", 195 | "crossbeam-utils", 196 | ] 197 | 198 | [[package]] 199 | name = "crossbeam-utils" 200 | version = "0.8.11" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" 203 | dependencies = [ 204 | "cfg-if", 205 | "once_cell", 206 | ] 207 | 208 | [[package]] 209 | name = "crypto-common" 210 | version = "0.1.6" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 213 | dependencies = [ 214 | "generic-array", 215 | "typenum", 216 | ] 217 | 218 | [[package]] 219 | name = "digest" 220 | version = "0.10.3" 221 | source = "registry+https://github.com/rust-lang/crates.io-index" 222 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" 223 | dependencies = [ 224 | "block-buffer", 225 | "crypto-common", 226 | "subtle", 227 | ] 228 | 229 | [[package]] 230 | name = "dirs" 231 | version = "4.0.0" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" 234 | dependencies = [ 235 | "dirs-sys", 236 | ] 237 | 238 | [[package]] 239 | name = "dirs-sys" 240 | version = "0.3.7" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" 243 | dependencies = [ 244 | "libc", 245 | "redox_users", 246 | "winapi", 247 | ] 248 | 249 | [[package]] 250 | name = "dotenv" 251 | version = "0.15.0" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" 254 | 255 | [[package]] 256 | name = "either" 257 | version = "1.7.0" 258 | source = "registry+https://github.com/rust-lang/crates.io-index" 259 | checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" 260 | 261 | [[package]] 262 | name = "event-listener" 263 | version = "2.5.3" 264 | source = "registry+https://github.com/rust-lang/crates.io-index" 265 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" 266 | 267 | [[package]] 268 | name = "fnv" 269 | version = "1.0.7" 270 | source = "registry+https://github.com/rust-lang/crates.io-index" 271 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 272 | 273 | [[package]] 274 | name = "form_urlencoded" 275 | version = "1.0.1" 276 | source = "registry+https://github.com/rust-lang/crates.io-index" 277 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" 278 | dependencies = [ 279 | "matches", 280 | "percent-encoding", 281 | ] 282 | 283 | [[package]] 284 | name = "futures-channel" 285 | version = "0.3.21" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" 288 | dependencies = [ 289 | "futures-core", 290 | "futures-sink", 291 | ] 292 | 293 | [[package]] 294 | name = "futures-core" 295 | version = "0.3.21" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" 298 | 299 | [[package]] 300 | name = "futures-intrusive" 301 | version = "0.4.0" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" 304 | dependencies = [ 305 | "futures-core", 306 | "lock_api", 307 | "parking_lot 0.11.2", 308 | ] 309 | 310 | [[package]] 311 | name = "futures-sink" 312 | version = "0.3.21" 313 | source = "registry+https://github.com/rust-lang/crates.io-index" 314 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" 315 | 316 | [[package]] 317 | name = "futures-task" 318 | version = "0.3.21" 319 | source = "registry+https://github.com/rust-lang/crates.io-index" 320 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" 321 | 322 | [[package]] 323 | name = "futures-util" 324 | version = "0.3.21" 325 | source = "registry+https://github.com/rust-lang/crates.io-index" 326 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" 327 | dependencies = [ 328 | "futures-core", 329 | "futures-sink", 330 | "futures-task", 331 | "pin-project-lite", 332 | "pin-utils", 333 | ] 334 | 335 | [[package]] 336 | name = "generic-array" 337 | version = "0.14.5" 338 | source = "registry+https://github.com/rust-lang/crates.io-index" 339 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" 340 | dependencies = [ 341 | "typenum", 342 | "version_check", 343 | ] 344 | 345 | [[package]] 346 | name = "getrandom" 347 | version = "0.2.7" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" 350 | dependencies = [ 351 | "cfg-if", 352 | "libc", 353 | "wasi", 354 | ] 355 | 356 | [[package]] 357 | name = "hashbrown" 358 | version = "0.12.3" 359 | source = "registry+https://github.com/rust-lang/crates.io-index" 360 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 361 | dependencies = [ 362 | "ahash", 363 | ] 364 | 365 | [[package]] 366 | name = "hashlink" 367 | version = "0.8.0" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "d452c155cb93fecdfb02a73dd57b5d8e442c2063bd7aac72f1bc5e4263a43086" 370 | dependencies = [ 371 | "hashbrown", 372 | ] 373 | 374 | [[package]] 375 | name = "headers" 376 | version = "0.3.7" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" 379 | dependencies = [ 380 | "base64", 381 | "bitflags", 382 | "bytes", 383 | "headers-core", 384 | "http", 385 | "httpdate", 386 | "mime", 387 | "sha-1", 388 | ] 389 | 390 | [[package]] 391 | name = "headers-core" 392 | version = "0.2.0" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" 395 | dependencies = [ 396 | "http", 397 | ] 398 | 399 | [[package]] 400 | name = "heck" 401 | version = "0.4.0" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" 404 | dependencies = [ 405 | "unicode-segmentation", 406 | ] 407 | 408 | [[package]] 409 | name = "hermit-abi" 410 | version = "0.1.19" 411 | source = "registry+https://github.com/rust-lang/crates.io-index" 412 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" 413 | dependencies = [ 414 | "libc", 415 | ] 416 | 417 | [[package]] 418 | name = "hex" 419 | version = "0.4.3" 420 | source = "registry+https://github.com/rust-lang/crates.io-index" 421 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 422 | 423 | [[package]] 424 | name = "hkdf" 425 | version = "0.12.3" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" 428 | dependencies = [ 429 | "hmac", 430 | ] 431 | 432 | [[package]] 433 | name = "hmac" 434 | version = "0.12.1" 435 | source = "registry+https://github.com/rust-lang/crates.io-index" 436 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 437 | dependencies = [ 438 | "digest", 439 | ] 440 | 441 | [[package]] 442 | name = "http" 443 | version = "0.2.8" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" 446 | dependencies = [ 447 | "bytes", 448 | "fnv", 449 | "itoa", 450 | ] 451 | 452 | [[package]] 453 | name = "http-body" 454 | version = "0.4.5" 455 | source = "registry+https://github.com/rust-lang/crates.io-index" 456 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" 457 | dependencies = [ 458 | "bytes", 459 | "http", 460 | "pin-project-lite", 461 | ] 462 | 463 | [[package]] 464 | name = "http-range-header" 465 | version = "0.3.0" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" 468 | 469 | [[package]] 470 | name = "httparse" 471 | version = "1.7.1" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" 474 | 475 | [[package]] 476 | name = "httpdate" 477 | version = "1.0.2" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" 480 | 481 | [[package]] 482 | name = "hyper" 483 | version = "0.14.20" 484 | source = "registry+https://github.com/rust-lang/crates.io-index" 485 | checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" 486 | dependencies = [ 487 | "bytes", 488 | "futures-channel", 489 | "futures-core", 490 | "futures-util", 491 | "http", 492 | "http-body", 493 | "httparse", 494 | "httpdate", 495 | "itoa", 496 | "pin-project-lite", 497 | "socket2", 498 | "tokio", 499 | "tower-service", 500 | "tracing", 501 | "want", 502 | ] 503 | 504 | [[package]] 505 | name = "idna" 506 | version = "0.2.3" 507 | source = "registry+https://github.com/rust-lang/crates.io-index" 508 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" 509 | dependencies = [ 510 | "matches", 511 | "unicode-bidi", 512 | "unicode-normalization", 513 | ] 514 | 515 | [[package]] 516 | name = "indexmap" 517 | version = "1.9.1" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" 520 | dependencies = [ 521 | "autocfg", 522 | "hashbrown", 523 | ] 524 | 525 | [[package]] 526 | name = "instant" 527 | version = "0.1.12" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" 530 | dependencies = [ 531 | "cfg-if", 532 | ] 533 | 534 | [[package]] 535 | name = "itertools" 536 | version = "0.10.3" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" 539 | dependencies = [ 540 | "either", 541 | ] 542 | 543 | [[package]] 544 | name = "itoa" 545 | version = "1.0.2" 546 | source = "registry+https://github.com/rust-lang/crates.io-index" 547 | checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" 548 | 549 | [[package]] 550 | name = "js-sys" 551 | version = "0.3.59" 552 | source = "registry+https://github.com/rust-lang/crates.io-index" 553 | checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" 554 | dependencies = [ 555 | "wasm-bindgen", 556 | ] 557 | 558 | [[package]] 559 | name = "jsonwebtoken" 560 | version = "8.1.1" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "1aa4b4af834c6cfd35d8763d359661b90f2e45d8f750a0849156c7f4671af09c" 563 | dependencies = [ 564 | "base64", 565 | "pem", 566 | "ring", 567 | "serde", 568 | "serde_json", 569 | "simple_asn1", 570 | ] 571 | 572 | [[package]] 573 | name = "lazy_static" 574 | version = "1.4.0" 575 | source = "registry+https://github.com/rust-lang/crates.io-index" 576 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 577 | 578 | [[package]] 579 | name = "libc" 580 | version = "0.2.126" 581 | source = "registry+https://github.com/rust-lang/crates.io-index" 582 | checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" 583 | 584 | [[package]] 585 | name = "lock_api" 586 | version = "0.4.7" 587 | source = "registry+https://github.com/rust-lang/crates.io-index" 588 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" 589 | dependencies = [ 590 | "autocfg", 591 | "scopeguard", 592 | ] 593 | 594 | [[package]] 595 | name = "log" 596 | version = "0.4.17" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" 599 | dependencies = [ 600 | "cfg-if", 601 | ] 602 | 603 | [[package]] 604 | name = "matchers" 605 | version = "0.1.0" 606 | source = "registry+https://github.com/rust-lang/crates.io-index" 607 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" 608 | dependencies = [ 609 | "regex-automata", 610 | ] 611 | 612 | [[package]] 613 | name = "matches" 614 | version = "0.1.9" 615 | source = "registry+https://github.com/rust-lang/crates.io-index" 616 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" 617 | 618 | [[package]] 619 | name = "matchit" 620 | version = "0.5.0" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" 623 | 624 | [[package]] 625 | name = "md-5" 626 | version = "0.10.1" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582" 629 | dependencies = [ 630 | "digest", 631 | ] 632 | 633 | [[package]] 634 | name = "memchr" 635 | version = "2.5.0" 636 | source = "registry+https://github.com/rust-lang/crates.io-index" 637 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" 638 | 639 | [[package]] 640 | name = "mime" 641 | version = "0.3.16" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 644 | 645 | [[package]] 646 | name = "minimal-lexical" 647 | version = "0.2.1" 648 | source = "registry+https://github.com/rust-lang/crates.io-index" 649 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 650 | 651 | [[package]] 652 | name = "mio" 653 | version = "0.8.4" 654 | source = "registry+https://github.com/rust-lang/crates.io-index" 655 | checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" 656 | dependencies = [ 657 | "libc", 658 | "log", 659 | "wasi", 660 | "windows-sys", 661 | ] 662 | 663 | [[package]] 664 | name = "nom" 665 | version = "7.1.1" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" 668 | dependencies = [ 669 | "memchr", 670 | "minimal-lexical", 671 | ] 672 | 673 | [[package]] 674 | name = "num-bigint" 675 | version = "0.4.3" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" 678 | dependencies = [ 679 | "autocfg", 680 | "num-integer", 681 | "num-traits", 682 | ] 683 | 684 | [[package]] 685 | name = "num-integer" 686 | version = "0.1.45" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" 689 | dependencies = [ 690 | "autocfg", 691 | "num-traits", 692 | ] 693 | 694 | [[package]] 695 | name = "num-traits" 696 | version = "0.2.15" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" 699 | dependencies = [ 700 | "autocfg", 701 | ] 702 | 703 | [[package]] 704 | name = "num_cpus" 705 | version = "1.13.1" 706 | source = "registry+https://github.com/rust-lang/crates.io-index" 707 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" 708 | dependencies = [ 709 | "hermit-abi", 710 | "libc", 711 | ] 712 | 713 | [[package]] 714 | name = "num_threads" 715 | version = "0.1.6" 716 | source = "registry+https://github.com/rust-lang/crates.io-index" 717 | checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" 718 | dependencies = [ 719 | "libc", 720 | ] 721 | 722 | [[package]] 723 | name = "once_cell" 724 | version = "1.13.0" 725 | source = "registry+https://github.com/rust-lang/crates.io-index" 726 | checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" 727 | 728 | [[package]] 729 | name = "parking_lot" 730 | version = "0.11.2" 731 | source = "registry+https://github.com/rust-lang/crates.io-index" 732 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" 733 | dependencies = [ 734 | "instant", 735 | "lock_api", 736 | "parking_lot_core 0.8.5", 737 | ] 738 | 739 | [[package]] 740 | name = "parking_lot" 741 | version = "0.12.1" 742 | source = "registry+https://github.com/rust-lang/crates.io-index" 743 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" 744 | dependencies = [ 745 | "lock_api", 746 | "parking_lot_core 0.9.3", 747 | ] 748 | 749 | [[package]] 750 | name = "parking_lot_core" 751 | version = "0.8.5" 752 | source = "registry+https://github.com/rust-lang/crates.io-index" 753 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" 754 | dependencies = [ 755 | "cfg-if", 756 | "instant", 757 | "libc", 758 | "redox_syscall", 759 | "smallvec", 760 | "winapi", 761 | ] 762 | 763 | [[package]] 764 | name = "parking_lot_core" 765 | version = "0.9.3" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" 768 | dependencies = [ 769 | "cfg-if", 770 | "libc", 771 | "redox_syscall", 772 | "smallvec", 773 | "windows-sys", 774 | ] 775 | 776 | [[package]] 777 | name = "paste" 778 | version = "1.0.7" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" 781 | 782 | [[package]] 783 | name = "pem" 784 | version = "1.1.0" 785 | source = "registry+https://github.com/rust-lang/crates.io-index" 786 | checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4" 787 | dependencies = [ 788 | "base64", 789 | ] 790 | 791 | [[package]] 792 | name = "percent-encoding" 793 | version = "2.1.0" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 796 | 797 | [[package]] 798 | name = "pin-project" 799 | version = "1.0.11" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "78203e83c48cffbe01e4a2d35d566ca4de445d79a85372fc64e378bfc812a260" 802 | dependencies = [ 803 | "pin-project-internal", 804 | ] 805 | 806 | [[package]] 807 | name = "pin-project-internal" 808 | version = "1.0.11" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "710faf75e1b33345361201d36d04e98ac1ed8909151a017ed384700836104c74" 811 | dependencies = [ 812 | "proc-macro2", 813 | "quote", 814 | "syn", 815 | ] 816 | 817 | [[package]] 818 | name = "pin-project-lite" 819 | version = "0.2.9" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" 822 | 823 | [[package]] 824 | name = "pin-utils" 825 | version = "0.1.0" 826 | source = "registry+https://github.com/rust-lang/crates.io-index" 827 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 828 | 829 | [[package]] 830 | name = "ppv-lite86" 831 | version = "0.2.16" 832 | source = "registry+https://github.com/rust-lang/crates.io-index" 833 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" 834 | 835 | [[package]] 836 | name = "proc-macro2" 837 | version = "1.0.42" 838 | source = "registry+https://github.com/rust-lang/crates.io-index" 839 | checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" 840 | dependencies = [ 841 | "unicode-ident", 842 | ] 843 | 844 | [[package]] 845 | name = "quote" 846 | version = "1.0.20" 847 | source = "registry+https://github.com/rust-lang/crates.io-index" 848 | checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" 849 | dependencies = [ 850 | "proc-macro2", 851 | ] 852 | 853 | [[package]] 854 | name = "rand" 855 | version = "0.8.5" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 858 | dependencies = [ 859 | "libc", 860 | "rand_chacha", 861 | "rand_core", 862 | ] 863 | 864 | [[package]] 865 | name = "rand_chacha" 866 | version = "0.3.1" 867 | source = "registry+https://github.com/rust-lang/crates.io-index" 868 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 869 | dependencies = [ 870 | "ppv-lite86", 871 | "rand_core", 872 | ] 873 | 874 | [[package]] 875 | name = "rand_core" 876 | version = "0.6.3" 877 | source = "registry+https://github.com/rust-lang/crates.io-index" 878 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" 879 | dependencies = [ 880 | "getrandom", 881 | ] 882 | 883 | [[package]] 884 | name = "redox_syscall" 885 | version = "0.2.16" 886 | source = "registry+https://github.com/rust-lang/crates.io-index" 887 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" 888 | dependencies = [ 889 | "bitflags", 890 | ] 891 | 892 | [[package]] 893 | name = "redox_users" 894 | version = "0.4.3" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" 897 | dependencies = [ 898 | "getrandom", 899 | "redox_syscall", 900 | "thiserror", 901 | ] 902 | 903 | [[package]] 904 | name = "regex" 905 | version = "1.6.0" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" 908 | dependencies = [ 909 | "regex-syntax", 910 | ] 911 | 912 | [[package]] 913 | name = "regex-automata" 914 | version = "0.1.10" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" 917 | dependencies = [ 918 | "regex-syntax", 919 | ] 920 | 921 | [[package]] 922 | name = "regex-syntax" 923 | version = "0.6.27" 924 | source = "registry+https://github.com/rust-lang/crates.io-index" 925 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" 926 | 927 | [[package]] 928 | name = "ring" 929 | version = "0.16.20" 930 | source = "registry+https://github.com/rust-lang/crates.io-index" 931 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" 932 | dependencies = [ 933 | "cc", 934 | "libc", 935 | "once_cell", 936 | "spin", 937 | "untrusted", 938 | "web-sys", 939 | "winapi", 940 | ] 941 | 942 | [[package]] 943 | name = "rustls" 944 | version = "0.20.6" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" 947 | dependencies = [ 948 | "log", 949 | "ring", 950 | "sct", 951 | "webpki", 952 | ] 953 | 954 | [[package]] 955 | name = "rustls-pemfile" 956 | version = "1.0.0" 957 | source = "registry+https://github.com/rust-lang/crates.io-index" 958 | checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" 959 | dependencies = [ 960 | "base64", 961 | ] 962 | 963 | [[package]] 964 | name = "ryu" 965 | version = "1.0.10" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" 968 | 969 | [[package]] 970 | name = "scopeguard" 971 | version = "1.1.0" 972 | source = "registry+https://github.com/rust-lang/crates.io-index" 973 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 974 | 975 | [[package]] 976 | name = "sct" 977 | version = "0.7.0" 978 | source = "registry+https://github.com/rust-lang/crates.io-index" 979 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" 980 | dependencies = [ 981 | "ring", 982 | "untrusted", 983 | ] 984 | 985 | [[package]] 986 | name = "serde" 987 | version = "1.0.140" 988 | source = "registry+https://github.com/rust-lang/crates.io-index" 989 | checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" 990 | dependencies = [ 991 | "serde_derive", 992 | ] 993 | 994 | [[package]] 995 | name = "serde_derive" 996 | version = "1.0.140" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" 999 | dependencies = [ 1000 | "proc-macro2", 1001 | "quote", 1002 | "syn", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "serde_json" 1007 | version = "1.0.82" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" 1010 | dependencies = [ 1011 | "itoa", 1012 | "ryu", 1013 | "serde", 1014 | ] 1015 | 1016 | [[package]] 1017 | name = "serde_urlencoded" 1018 | version = "0.7.1" 1019 | source = "registry+https://github.com/rust-lang/crates.io-index" 1020 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1021 | dependencies = [ 1022 | "form_urlencoded", 1023 | "itoa", 1024 | "ryu", 1025 | "serde", 1026 | ] 1027 | 1028 | [[package]] 1029 | name = "sha-1" 1030 | version = "0.10.0" 1031 | source = "registry+https://github.com/rust-lang/crates.io-index" 1032 | checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" 1033 | dependencies = [ 1034 | "cfg-if", 1035 | "cpufeatures", 1036 | "digest", 1037 | ] 1038 | 1039 | [[package]] 1040 | name = "sha2" 1041 | version = "0.10.2" 1042 | source = "registry+https://github.com/rust-lang/crates.io-index" 1043 | checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" 1044 | dependencies = [ 1045 | "cfg-if", 1046 | "cpufeatures", 1047 | "digest", 1048 | ] 1049 | 1050 | [[package]] 1051 | name = "sharded-slab" 1052 | version = "0.1.4" 1053 | source = "registry+https://github.com/rust-lang/crates.io-index" 1054 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" 1055 | dependencies = [ 1056 | "lazy_static", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "signal-hook-registry" 1061 | version = "1.4.0" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" 1064 | dependencies = [ 1065 | "libc", 1066 | ] 1067 | 1068 | [[package]] 1069 | name = "simple_asn1" 1070 | version = "0.6.2" 1071 | source = "registry+https://github.com/rust-lang/crates.io-index" 1072 | checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" 1073 | dependencies = [ 1074 | "num-bigint", 1075 | "num-traits", 1076 | "thiserror", 1077 | "time", 1078 | ] 1079 | 1080 | [[package]] 1081 | name = "smallvec" 1082 | version = "1.9.0" 1083 | source = "registry+https://github.com/rust-lang/crates.io-index" 1084 | checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" 1085 | 1086 | [[package]] 1087 | name = "socket2" 1088 | version = "0.4.4" 1089 | source = "registry+https://github.com/rust-lang/crates.io-index" 1090 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" 1091 | dependencies = [ 1092 | "libc", 1093 | "winapi", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "spin" 1098 | version = "0.5.2" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 1101 | 1102 | [[package]] 1103 | name = "sqlformat" 1104 | version = "0.1.8" 1105 | source = "registry+https://github.com/rust-lang/crates.io-index" 1106 | checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4" 1107 | dependencies = [ 1108 | "itertools", 1109 | "nom", 1110 | "unicode_categories", 1111 | ] 1112 | 1113 | [[package]] 1114 | name = "sqlx" 1115 | version = "0.6.0" 1116 | source = "registry+https://github.com/rust-lang/crates.io-index" 1117 | checksum = "1f82cbe94f41641d6c410ded25bbf5097c240cefdf8e3b06d04198d0a96af6a4" 1118 | dependencies = [ 1119 | "sqlx-core", 1120 | "sqlx-macros", 1121 | ] 1122 | 1123 | [[package]] 1124 | name = "sqlx-core" 1125 | version = "0.6.0" 1126 | source = "registry+https://github.com/rust-lang/crates.io-index" 1127 | checksum = "6b69bf218860335ddda60d6ce85ee39f6cf6e5630e300e19757d1de15886a093" 1128 | dependencies = [ 1129 | "ahash", 1130 | "atoi", 1131 | "base64", 1132 | "bitflags", 1133 | "byteorder", 1134 | "bytes", 1135 | "crc", 1136 | "crossbeam-queue", 1137 | "dirs", 1138 | "either", 1139 | "event-listener", 1140 | "futures-channel", 1141 | "futures-core", 1142 | "futures-intrusive", 1143 | "futures-util", 1144 | "hashlink", 1145 | "hex", 1146 | "hkdf", 1147 | "hmac", 1148 | "indexmap", 1149 | "itoa", 1150 | "libc", 1151 | "log", 1152 | "md-5", 1153 | "memchr", 1154 | "once_cell", 1155 | "paste", 1156 | "percent-encoding", 1157 | "rand", 1158 | "rustls", 1159 | "rustls-pemfile", 1160 | "serde", 1161 | "serde_json", 1162 | "sha-1", 1163 | "sha2", 1164 | "smallvec", 1165 | "sqlformat", 1166 | "sqlx-rt", 1167 | "stringprep", 1168 | "thiserror", 1169 | "tokio-stream", 1170 | "url", 1171 | "webpki-roots", 1172 | "whoami", 1173 | ] 1174 | 1175 | [[package]] 1176 | name = "sqlx-macros" 1177 | version = "0.6.0" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "f40c63177cf23d356b159b60acd27c54af7423f1736988502e36bae9a712118f" 1180 | dependencies = [ 1181 | "dotenv", 1182 | "either", 1183 | "heck", 1184 | "once_cell", 1185 | "proc-macro2", 1186 | "quote", 1187 | "serde_json", 1188 | "sha2", 1189 | "sqlx-core", 1190 | "sqlx-rt", 1191 | "syn", 1192 | "url", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "sqlx-rt" 1197 | version = "0.6.0" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "874e93a365a598dc3dadb197565952cb143ae4aa716f7bcc933a8d836f6bf89f" 1200 | dependencies = [ 1201 | "once_cell", 1202 | "tokio", 1203 | "tokio-rustls", 1204 | ] 1205 | 1206 | [[package]] 1207 | name = "stringprep" 1208 | version = "0.1.2" 1209 | source = "registry+https://github.com/rust-lang/crates.io-index" 1210 | checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" 1211 | dependencies = [ 1212 | "unicode-bidi", 1213 | "unicode-normalization", 1214 | ] 1215 | 1216 | [[package]] 1217 | name = "subtle" 1218 | version = "2.4.1" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" 1221 | 1222 | [[package]] 1223 | name = "syn" 1224 | version = "1.0.98" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" 1227 | dependencies = [ 1228 | "proc-macro2", 1229 | "quote", 1230 | "unicode-ident", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "sync_wrapper" 1235 | version = "0.1.1" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" 1238 | 1239 | [[package]] 1240 | name = "thiserror" 1241 | version = "1.0.31" 1242 | source = "registry+https://github.com/rust-lang/crates.io-index" 1243 | checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" 1244 | dependencies = [ 1245 | "thiserror-impl", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "thiserror-impl" 1250 | version = "1.0.31" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" 1253 | dependencies = [ 1254 | "proc-macro2", 1255 | "quote", 1256 | "syn", 1257 | ] 1258 | 1259 | [[package]] 1260 | name = "thread_local" 1261 | version = "1.1.4" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" 1264 | dependencies = [ 1265 | "once_cell", 1266 | ] 1267 | 1268 | [[package]] 1269 | name = "time" 1270 | version = "0.3.11" 1271 | source = "registry+https://github.com/rust-lang/crates.io-index" 1272 | checksum = "72c91f41dcb2f096c05f0873d667dceec1087ce5bcf984ec8ffb19acddbb3217" 1273 | dependencies = [ 1274 | "itoa", 1275 | "libc", 1276 | "num_threads", 1277 | "time-macros", 1278 | ] 1279 | 1280 | [[package]] 1281 | name = "time-macros" 1282 | version = "0.2.4" 1283 | source = "registry+https://github.com/rust-lang/crates.io-index" 1284 | checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" 1285 | 1286 | [[package]] 1287 | name = "tinyvec" 1288 | version = "1.6.0" 1289 | source = "registry+https://github.com/rust-lang/crates.io-index" 1290 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" 1291 | dependencies = [ 1292 | "tinyvec_macros", 1293 | ] 1294 | 1295 | [[package]] 1296 | name = "tinyvec_macros" 1297 | version = "0.1.0" 1298 | source = "registry+https://github.com/rust-lang/crates.io-index" 1299 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" 1300 | 1301 | [[package]] 1302 | name = "tokio" 1303 | version = "1.20.1" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" 1306 | dependencies = [ 1307 | "autocfg", 1308 | "bytes", 1309 | "libc", 1310 | "memchr", 1311 | "mio", 1312 | "num_cpus", 1313 | "once_cell", 1314 | "parking_lot 0.12.1", 1315 | "pin-project-lite", 1316 | "signal-hook-registry", 1317 | "socket2", 1318 | "tokio-macros", 1319 | "winapi", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "tokio-macros" 1324 | version = "1.8.0" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" 1327 | dependencies = [ 1328 | "proc-macro2", 1329 | "quote", 1330 | "syn", 1331 | ] 1332 | 1333 | [[package]] 1334 | name = "tokio-rustls" 1335 | version = "0.23.4" 1336 | source = "registry+https://github.com/rust-lang/crates.io-index" 1337 | checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" 1338 | dependencies = [ 1339 | "rustls", 1340 | "tokio", 1341 | "webpki", 1342 | ] 1343 | 1344 | [[package]] 1345 | name = "tokio-stream" 1346 | version = "0.1.9" 1347 | source = "registry+https://github.com/rust-lang/crates.io-index" 1348 | checksum = "df54d54117d6fdc4e4fea40fe1e4e566b3505700e148a6827e59b34b0d2600d9" 1349 | dependencies = [ 1350 | "futures-core", 1351 | "pin-project-lite", 1352 | "tokio", 1353 | ] 1354 | 1355 | [[package]] 1356 | name = "tower" 1357 | version = "0.4.13" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" 1360 | dependencies = [ 1361 | "futures-core", 1362 | "futures-util", 1363 | "pin-project", 1364 | "pin-project-lite", 1365 | "tokio", 1366 | "tower-layer", 1367 | "tower-service", 1368 | "tracing", 1369 | ] 1370 | 1371 | [[package]] 1372 | name = "tower-http" 1373 | version = "0.3.4" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" 1376 | dependencies = [ 1377 | "bitflags", 1378 | "bytes", 1379 | "futures-core", 1380 | "futures-util", 1381 | "http", 1382 | "http-body", 1383 | "http-range-header", 1384 | "pin-project-lite", 1385 | "tower", 1386 | "tower-layer", 1387 | "tower-service", 1388 | ] 1389 | 1390 | [[package]] 1391 | name = "tower-layer" 1392 | version = "0.3.1" 1393 | source = "registry+https://github.com/rust-lang/crates.io-index" 1394 | checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" 1395 | 1396 | [[package]] 1397 | name = "tower-service" 1398 | version = "0.3.2" 1399 | source = "registry+https://github.com/rust-lang/crates.io-index" 1400 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" 1401 | 1402 | [[package]] 1403 | name = "tracing" 1404 | version = "0.1.35" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" 1407 | dependencies = [ 1408 | "cfg-if", 1409 | "log", 1410 | "pin-project-lite", 1411 | "tracing-attributes", 1412 | "tracing-core", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "tracing-attributes" 1417 | version = "0.1.22" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" 1420 | dependencies = [ 1421 | "proc-macro2", 1422 | "quote", 1423 | "syn", 1424 | ] 1425 | 1426 | [[package]] 1427 | name = "tracing-core" 1428 | version = "0.1.28" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | checksum = "7b7358be39f2f274f322d2aaed611acc57f382e8eb1e5b48cb9ae30933495ce7" 1431 | dependencies = [ 1432 | "once_cell", 1433 | "valuable", 1434 | ] 1435 | 1436 | [[package]] 1437 | name = "tracing-log" 1438 | version = "0.1.3" 1439 | source = "registry+https://github.com/rust-lang/crates.io-index" 1440 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" 1441 | dependencies = [ 1442 | "lazy_static", 1443 | "log", 1444 | "tracing-core", 1445 | ] 1446 | 1447 | [[package]] 1448 | name = "tracing-subscriber" 1449 | version = "0.3.15" 1450 | source = "registry+https://github.com/rust-lang/crates.io-index" 1451 | checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" 1452 | dependencies = [ 1453 | "ansi_term", 1454 | "matchers", 1455 | "once_cell", 1456 | "regex", 1457 | "sharded-slab", 1458 | "smallvec", 1459 | "thread_local", 1460 | "tracing", 1461 | "tracing-core", 1462 | "tracing-log", 1463 | ] 1464 | 1465 | [[package]] 1466 | name = "try-lock" 1467 | version = "0.2.3" 1468 | source = "registry+https://github.com/rust-lang/crates.io-index" 1469 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" 1470 | 1471 | [[package]] 1472 | name = "typenum" 1473 | version = "1.15.0" 1474 | source = "registry+https://github.com/rust-lang/crates.io-index" 1475 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" 1476 | 1477 | [[package]] 1478 | name = "unicode-bidi" 1479 | version = "0.3.8" 1480 | source = "registry+https://github.com/rust-lang/crates.io-index" 1481 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" 1482 | 1483 | [[package]] 1484 | name = "unicode-ident" 1485 | version = "1.0.2" 1486 | source = "registry+https://github.com/rust-lang/crates.io-index" 1487 | checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" 1488 | 1489 | [[package]] 1490 | name = "unicode-normalization" 1491 | version = "0.1.21" 1492 | source = "registry+https://github.com/rust-lang/crates.io-index" 1493 | checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" 1494 | dependencies = [ 1495 | "tinyvec", 1496 | ] 1497 | 1498 | [[package]] 1499 | name = "unicode-segmentation" 1500 | version = "1.9.0" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" 1503 | 1504 | [[package]] 1505 | name = "unicode_categories" 1506 | version = "0.1.1" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" 1509 | 1510 | [[package]] 1511 | name = "untrusted" 1512 | version = "0.7.1" 1513 | source = "registry+https://github.com/rust-lang/crates.io-index" 1514 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" 1515 | 1516 | [[package]] 1517 | name = "url" 1518 | version = "2.2.2" 1519 | source = "registry+https://github.com/rust-lang/crates.io-index" 1520 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" 1521 | dependencies = [ 1522 | "form_urlencoded", 1523 | "idna", 1524 | "matches", 1525 | "percent-encoding", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "valuable" 1530 | version = "0.1.0" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" 1533 | 1534 | [[package]] 1535 | name = "version_check" 1536 | version = "0.9.4" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" 1539 | 1540 | [[package]] 1541 | name = "want" 1542 | version = "0.3.0" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" 1545 | dependencies = [ 1546 | "log", 1547 | "try-lock", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "wasi" 1552 | version = "0.11.0+wasi-snapshot-preview1" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1555 | 1556 | [[package]] 1557 | name = "wasm-bindgen" 1558 | version = "0.2.82" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" 1561 | dependencies = [ 1562 | "cfg-if", 1563 | "wasm-bindgen-macro", 1564 | ] 1565 | 1566 | [[package]] 1567 | name = "wasm-bindgen-backend" 1568 | version = "0.2.82" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" 1571 | dependencies = [ 1572 | "bumpalo", 1573 | "log", 1574 | "once_cell", 1575 | "proc-macro2", 1576 | "quote", 1577 | "syn", 1578 | "wasm-bindgen-shared", 1579 | ] 1580 | 1581 | [[package]] 1582 | name = "wasm-bindgen-macro" 1583 | version = "0.2.82" 1584 | source = "registry+https://github.com/rust-lang/crates.io-index" 1585 | checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" 1586 | dependencies = [ 1587 | "quote", 1588 | "wasm-bindgen-macro-support", 1589 | ] 1590 | 1591 | [[package]] 1592 | name = "wasm-bindgen-macro-support" 1593 | version = "0.2.82" 1594 | source = "registry+https://github.com/rust-lang/crates.io-index" 1595 | checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" 1596 | dependencies = [ 1597 | "proc-macro2", 1598 | "quote", 1599 | "syn", 1600 | "wasm-bindgen-backend", 1601 | "wasm-bindgen-shared", 1602 | ] 1603 | 1604 | [[package]] 1605 | name = "wasm-bindgen-shared" 1606 | version = "0.2.82" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" 1609 | 1610 | [[package]] 1611 | name = "web-sys" 1612 | version = "0.3.59" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" 1615 | dependencies = [ 1616 | "js-sys", 1617 | "wasm-bindgen", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "webpki" 1622 | version = "0.22.0" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" 1625 | dependencies = [ 1626 | "ring", 1627 | "untrusted", 1628 | ] 1629 | 1630 | [[package]] 1631 | name = "webpki-roots" 1632 | version = "0.22.4" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf" 1635 | dependencies = [ 1636 | "webpki", 1637 | ] 1638 | 1639 | [[package]] 1640 | name = "whoami" 1641 | version = "1.2.1" 1642 | source = "registry+https://github.com/rust-lang/crates.io-index" 1643 | checksum = "524b58fa5a20a2fb3014dd6358b70e6579692a56ef6fce928834e488f42f65e8" 1644 | dependencies = [ 1645 | "wasm-bindgen", 1646 | "web-sys", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "winapi" 1651 | version = "0.3.9" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1654 | dependencies = [ 1655 | "winapi-i686-pc-windows-gnu", 1656 | "winapi-x86_64-pc-windows-gnu", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "winapi-i686-pc-windows-gnu" 1661 | version = "0.4.0" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1664 | 1665 | [[package]] 1666 | name = "winapi-x86_64-pc-windows-gnu" 1667 | version = "0.4.0" 1668 | source = "registry+https://github.com/rust-lang/crates.io-index" 1669 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1670 | 1671 | [[package]] 1672 | name = "windows-sys" 1673 | version = "0.36.1" 1674 | source = "registry+https://github.com/rust-lang/crates.io-index" 1675 | checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" 1676 | dependencies = [ 1677 | "windows_aarch64_msvc", 1678 | "windows_i686_gnu", 1679 | "windows_i686_msvc", 1680 | "windows_x86_64_gnu", 1681 | "windows_x86_64_msvc", 1682 | ] 1683 | 1684 | [[package]] 1685 | name = "windows_aarch64_msvc" 1686 | version = "0.36.1" 1687 | source = "registry+https://github.com/rust-lang/crates.io-index" 1688 | checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" 1689 | 1690 | [[package]] 1691 | name = "windows_i686_gnu" 1692 | version = "0.36.1" 1693 | source = "registry+https://github.com/rust-lang/crates.io-index" 1694 | checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" 1695 | 1696 | [[package]] 1697 | name = "windows_i686_msvc" 1698 | version = "0.36.1" 1699 | source = "registry+https://github.com/rust-lang/crates.io-index" 1700 | checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" 1701 | 1702 | [[package]] 1703 | name = "windows_x86_64_gnu" 1704 | version = "0.36.1" 1705 | source = "registry+https://github.com/rust-lang/crates.io-index" 1706 | checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" 1707 | 1708 | [[package]] 1709 | name = "windows_x86_64_msvc" 1710 | version = "0.36.1" 1711 | source = "registry+https://github.com/rust-lang/crates.io-index" 1712 | checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" 1713 | --------------------------------------------------------------------------------