├── .gitignore
├── Shuttle.toml
├── README.md
├── templates
├── users.html
├── user.html
├── login.html
├── signup.html
├── base.html
└── index.html
├── schema.sql
├── .github
└── workflows
│ └── deploy.yml
├── Cargo.toml
├── tests
└── password.rs
├── public
└── styles.css
├── src
├── utils.rs
├── errors.rs
├── authentication.rs
└── main.rs
└── Cargo.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | .env
3 | .vscode
4 | todo.txt
--------------------------------------------------------------------------------
/Shuttle.toml:
--------------------------------------------------------------------------------
1 | name = "axum-postgres-authentication"
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # axum-shuttle-postgres-authentication-demo
2 | Full stack authenticated site built in Rust with Axum, Postgres and Shuttle
3 |
4 | # full write up
5 | https://www.shuttle.rs/blog/2022/08/11/authentication-tutorial
6 |
--------------------------------------------------------------------------------
/templates/users.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}Users:{% endblock title %}
3 | {% block content %}
4 |
5 | {% for user in users %}
6 | - {{ user }}
7 | {% endfor %}
8 |
9 | {% endblock content %}
--------------------------------------------------------------------------------
/templates/user.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}{{username}}{% endblock title %}
3 | {% block content %}
4 | @{{ username }}
5 | {% if is_self %}
6 |
9 | {% endif %}
10 | {% endblock content %}
--------------------------------------------------------------------------------
/schema.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS users (
2 | id integer PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
3 | username text NOT NULL UNIQUE, -- CHECK (name <> '')
4 | password text NOT NULL
5 | );
6 |
7 | CREATE TABLE IF NOT EXISTS sessions (
8 | session_token BYTEA PRIMARY KEY,
9 | user_id integer REFERENCES users (id) ON DELETE CASCADE
10 | );
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | name: Shuttle deploy
2 |
3 | on:
4 | push:
5 | branches:
6 | - "main"
7 |
8 | jobs:
9 | deploy:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: shuttle-hq/deploy-action@main
13 | with:
14 | allow-dirty: true
15 | deploy-key: ${{ secrets.SHUTTLE_DEPLOY_KEY }}
16 |
--------------------------------------------------------------------------------
/templates/login.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}Login{% endblock title %}
3 | {% block content %}
4 |
11 | {% endblock content %}
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "axum-postgres-authentication"
3 | version = "0.1.0"
4 | edition = "2021"
5 | publish = false
6 |
7 | [dependencies]
8 | axum = { version = "0.6.18", features = ["multipart"] }
9 | cookie = "0.17.0"
10 | http = "0.2.9"
11 | shuttle-axum = "0.24.0"
12 | shuttle-runtime = "0.24.0"
13 | sqlx = { version = "0.7.1", features = ["runtime-tokio-native-tls", "postgres"] }
14 | tokio = "1.28.2"
15 | pbkdf2 = { version = "0.12", features = ["simple"] }
16 | rand_core = { version = "0.6", features = ["std"] }
17 | rand_chacha = "0.3.1"
18 | http-body = "0.4.5"
19 | shuttle-service = "0.24.0"
20 | tera = "1.19.0"
21 | shuttle-shared-db = { version = "0.24.0", features = ["postgres-rustls", "sqlx", "postgres"] }
22 |
--------------------------------------------------------------------------------
/tests/password.rs:
--------------------------------------------------------------------------------
1 | #[test]
2 | fn passwords() {
3 | use pbkdf2::{
4 | password_hash::{
5 | rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString,
6 | },
7 | Pbkdf2,
8 | };
9 |
10 | let password = b"hunter42"; // Bad password; don't actually use!
11 | let salt = SaltString::generate(&mut OsRng);
12 |
13 | // Hash password to PHC string ($pbkdf2-sha256$...)
14 | let password_hash = Pbkdf2.hash_password(password, &salt).unwrap().to_string();
15 |
16 | // Verify password against PHC string
17 | let parsed_hash = PasswordHash::new(&password_hash).unwrap();
18 | assert!(Pbkdf2.verify_password(password, &parsed_hash).is_ok());
19 | }
20 |
--------------------------------------------------------------------------------
/templates/signup.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}Signup{% endblock title %}
3 | {% block content %}
4 |
13 | {% endblock content %}
--------------------------------------------------------------------------------
/templates/base.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Axum, Postgres, Shuttle Authentication Demo
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | {% block title %}{% endblock title %}
18 | {% if not home_screen %}
19 | Back to home screen
20 | {% endif %}
21 |
22 |
23 | {% block content %}{% endblock content %}
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/public/styles.css:
--------------------------------------------------------------------------------
1 | body {
2 | display: grid;
3 | grid-template-columns: 1fr 400px 1fr;
4 | grid-template-rows: 1fr 400px 1fr;
5 | min-height: 100vh;
6 | margin: 0;
7 | font-family: 'Karla', sans-serif;
8 | user-select: none;
9 | font-size: 12pt;
10 | }
11 |
12 | body>header {
13 | margin-top: auto;
14 | grid-column: 2;
15 | margin-bottom: 20px;
16 | }
17 |
18 | body>header>h1 {
19 | margin: 10px 0;
20 | }
21 |
22 | body>main {
23 | grid-column: 2;
24 | grid-row: 2;
25 | }
26 |
27 | form {
28 | gap: 10px;
29 | display: flex;
30 | flex-direction: column;
31 | }
32 |
33 | input {
34 | font-size: inherit;
35 | font-family: inherit;
36 | padding: 4px 8px;
37 | border-radius: 6px;
38 | border: 2px solid #d8d8d8;
39 | }
40 |
41 | input[type="submit"] {
42 | border: none;
43 | margin-right: auto;
44 | padding: 10px 22px;
45 | margin-top: 20px;
46 | font-size: 12pt;
47 | }
--------------------------------------------------------------------------------
/templates/index.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 | {% block title %}Axum Shuttle Postgres Authentication Demo Site{% endblock title %}
3 | {% block content %}
4 |
5 | Built on a Axum web server with Tera templates, a postgres database with sqlx and hosted on Shuttle!
6 |
7 | {% if logged_in %}
8 | View my page
9 |
12 | {% else %}
13 |
14 | Signup or Login
15 |
16 | {% endif %}
17 |
18 | View full article
19 |
20 |
21 | View repository
22 |
23 |
24 | View all users
25 |
26 | {% endblock content %}
27 |
--------------------------------------------------------------------------------
/src/utils.rs:
--------------------------------------------------------------------------------
1 | use std::collections::HashMap;
2 |
3 | use axum::extract::Multipart;
4 | use http::Response;
5 | use http_body::Empty;
6 |
7 | use crate::{
8 | authentication::SessionToken, errors::MultipartError, COOKIE_MAX_AGE, USER_COOKIE_NAME,
9 | };
10 |
11 | pub(crate) fn login_response(session_token: SessionToken) -> impl axum::response::IntoResponse {
12 | http::Response::builder()
13 | .status(http::StatusCode::SEE_OTHER)
14 | .header("Location", "/")
15 | .header(
16 | "Set-Cookie",
17 | format!(
18 | "{}={}; Max-Age={}",
19 | USER_COOKIE_NAME,
20 | session_token.into_cookie_value(),
21 | COOKIE_MAX_AGE
22 | ),
23 | )
24 | .body(http_body::Empty::new())
25 | .unwrap()
26 | }
27 |
28 | // TODO database and change session...?
29 | pub(crate) async fn logout_response() -> impl axum::response::IntoResponse {
30 | Response::builder()
31 | .status(http::StatusCode::SEE_OTHER)
32 | .header("Location", "/")
33 | .header("Set-Cookie", format!("{}=_; Max-Age=0", USER_COOKIE_NAME,))
34 | .body(Empty::new())
35 | .unwrap()
36 | }
37 |
38 | pub(crate) fn error_page(err: &dyn std::error::Error) -> impl axum::response::IntoResponse {
39 | Response::builder()
40 | .status(http::StatusCode::INTERNAL_SERVER_ERROR)
41 | .body(format!("Err: {}", err))
42 | .unwrap()
43 | }
44 |
45 | pub(crate) async fn parse_multipart(
46 | mut multipart: Multipart,
47 | ) -> Result, MultipartError> {
48 | let mut map = HashMap::new();
49 | while let Some(field) = multipart
50 | .next_field()
51 | .await
52 | .map_err(|_err| MultipartError::ReadError)?
53 | {
54 | let name = field.name().ok_or(MultipartError::NoName)?.to_string();
55 |
56 | let data = field
57 | .text()
58 | .await
59 | .map_err(|_| MultipartError::InvalidValue)?;
60 |
61 | map.insert(name, data);
62 | }
63 | Ok(map)
64 | }
65 |
--------------------------------------------------------------------------------
/src/errors.rs:
--------------------------------------------------------------------------------
1 | use std::{error::Error, fmt::Display};
2 |
3 | #[derive(Debug)]
4 | pub(crate) enum MultipartError {
5 | NoName,
6 | InvalidValue,
7 | ReadError,
8 | }
9 |
10 | impl Display for MultipartError {
11 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12 | match self {
13 | MultipartError::NoName => f.write_str("No named field in multipart"),
14 | MultipartError::InvalidValue => f.write_str("Invalid value in multipart"),
15 | MultipartError::ReadError => f.write_str("Reading multipart error"),
16 | }
17 | }
18 | }
19 |
20 | impl Error for MultipartError {}
21 |
22 | #[derive(Debug)]
23 | pub(crate) struct NotLoggedIn;
24 |
25 | impl Display for NotLoggedIn {
26 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
27 | f.write_str("Not logged in")
28 | }
29 | }
30 |
31 | impl Error for NotLoggedIn {}
32 |
33 | #[derive(Debug)]
34 | pub(crate) enum SignupError {
35 | UsernameExists,
36 | InvalidUsername,
37 | PasswordsDoNotMatch,
38 | MissingDetails,
39 | InvalidPassword,
40 | InternalError,
41 | }
42 |
43 | impl Display for SignupError {
44 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
45 | match self {
46 | SignupError::InvalidUsername => f.write_str("Invalid username"),
47 | SignupError::UsernameExists => f.write_str("Username already exists"),
48 | SignupError::PasswordsDoNotMatch => f.write_str("Passwords do not match"),
49 | SignupError::MissingDetails => f.write_str("Missing Details"),
50 | SignupError::InvalidPassword => f.write_str("Invalid Password"),
51 | SignupError::InternalError => f.write_str("Internal Error"),
52 | }
53 | }
54 | }
55 |
56 | impl Error for SignupError {}
57 |
58 | #[derive(Debug)]
59 | pub(crate) enum LoginError {
60 | MissingDetails,
61 | UserDoesNotExist,
62 | WrongPassword,
63 | }
64 |
65 | impl Display for LoginError {
66 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
67 | match self {
68 | LoginError::UserDoesNotExist => f.write_str("User does not exist"),
69 | LoginError::MissingDetails => f.write_str("Missing details"),
70 | LoginError::WrongPassword => f.write_str("Wrong password"),
71 | }
72 | }
73 | }
74 |
75 | impl Error for LoginError {}
76 |
77 | #[derive(Debug)]
78 | pub(crate) struct NoUser(pub String);
79 |
80 | impl Display for NoUser {
81 | fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
82 | f.write_fmt(format_args!("could not find user '{}'", self.0))
83 | }
84 | }
85 |
86 | impl Error for NoUser {}
87 |
--------------------------------------------------------------------------------
/src/authentication.rs:
--------------------------------------------------------------------------------
1 | use std::str::FromStr;
2 |
3 | use pbkdf2::{
4 | password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
5 | Pbkdf2,
6 | };
7 | use rand_core::{OsRng, RngCore};
8 |
9 | use crate::{
10 | errors::{LoginError, SignupError},
11 | Database, Random, USER_COOKIE_NAME,
12 | };
13 |
14 | #[derive(Clone, Copy)]
15 | pub(crate) struct SessionToken(u128);
16 |
17 | impl FromStr for SessionToken {
18 | type Err = ::Err;
19 |
20 | fn from_str(s: &str) -> Result {
21 | s.parse().map(Self)
22 | }
23 | }
24 |
25 | impl SessionToken {
26 | pub fn generate_new(random: Random) -> Self {
27 | let mut u128_pool = [0u8; 16];
28 | random.lock().unwrap().fill_bytes(&mut u128_pool);
29 | Self(u128::from_le_bytes(u128_pool))
30 | }
31 |
32 | pub fn into_cookie_value(self) -> String {
33 | // TODO Opportunity for a smaller format that is still a valid cookie value
34 | self.0.to_string()
35 | }
36 |
37 | pub fn into_database_value(self) -> Vec {
38 | self.0.to_le_bytes().to_vec()
39 | }
40 | }
41 |
42 | #[derive(Clone)]
43 | pub(crate) struct User {
44 | pub username: String,
45 | }
46 |
47 | #[derive(Clone)]
48 | pub(crate) struct AuthState(Option<(SessionToken, Option, Database)>);
49 |
50 | impl AuthState {
51 | pub fn logged_in(&self) -> bool {
52 | self.0.is_some()
53 | }
54 |
55 | pub async fn get_user(&mut self) -> Option<&User> {
56 | let (session_token, store, database) = self.0.as_mut()?;
57 | if store.is_none() {
58 | const QUERY: &str =
59 | "SELECT id, username FROM users JOIN sessions ON user_id = id WHERE session_token = $1;";
60 |
61 | let user: Option<(i32, String)> = sqlx::query_as(QUERY)
62 | .bind(&session_token.into_database_value())
63 | .fetch_optional(&*database)
64 | .await
65 | .unwrap();
66 |
67 | if let Some((_id, username)) = user {
68 | *store = Some(User { username });
69 | }
70 | }
71 | store.as_ref()
72 | }
73 | }
74 |
75 | /// TODO date
76 | pub(crate) async fn new_session(database: &Database, random: Random, user_id: i32) -> SessionToken {
77 | const QUERY: &str = "INSERT INTO sessions (session_token, user_id) VALUES ($1, $2);";
78 |
79 | let session_token = SessionToken::generate_new(random);
80 |
81 | let _result = sqlx::query(QUERY)
82 | .bind(&session_token.into_database_value())
83 | .bind(user_id)
84 | .execute(database)
85 | .await
86 | .unwrap();
87 |
88 | session_token
89 | }
90 |
91 | /// **AUTH MIDDLEWARE**
92 | pub(crate) async fn auth(
93 | mut req: http::Request,
94 | next: axum::middleware::Next,
95 | database: Database,
96 | ) -> axum::response::Response {
97 | let session_token = req
98 | .headers()
99 | .get_all("Cookie")
100 | .iter()
101 | .filter_map(|cookie| {
102 | cookie
103 | .to_str()
104 | .ok()
105 | .and_then(|cookie| cookie.parse::().ok())
106 | })
107 | .find_map(|cookie| {
108 | (cookie.name() == USER_COOKIE_NAME).then(move || cookie.value().to_owned())
109 | })
110 | .and_then(|cookie_value| cookie_value.parse::().ok());
111 |
112 | req.extensions_mut()
113 | .insert(AuthState(session_token.map(|v| (v, None, database))));
114 |
115 | next.run(req).await
116 | }
117 |
118 | pub(crate) async fn signup(
119 | database: &Database,
120 | random: Random,
121 | username: &str,
122 | password: &str,
123 | ) -> Result {
124 | fn valid_username(username: &str) -> bool {
125 | (1..20).contains(&username.len())
126 | && username
127 | .chars()
128 | .all(|c| matches!(c, 'a'..='z' | '0'..='9' | '-'))
129 | }
130 |
131 | if !valid_username(username) {
132 | return Err(SignupError::InvalidUsername);
133 | }
134 |
135 | const INSERT_QUERY: &str =
136 | "INSERT INTO users (username, password) VALUES ($1, $2) RETURNING id;";
137 |
138 | let salt = SaltString::generate(&mut OsRng);
139 |
140 | // Hash password to PHC string ($pbkdf2-sha256$...)
141 | let password_hash = Pbkdf2.hash_password(password.as_bytes(), &salt);
142 |
143 | let hashed_password = if let Ok(password) = password_hash {
144 | password.to_string()
145 | } else {
146 | return Err(SignupError::InvalidPassword);
147 | };
148 |
149 | let fetch_one = sqlx::query_as(INSERT_QUERY)
150 | .bind(username)
151 | .bind(hashed_password)
152 | .fetch_one(database)
153 | .await;
154 |
155 | let user_id: i32 = match fetch_one {
156 | Ok((user_id,)) => user_id,
157 | Err(sqlx::Error::Database(database))
158 | if database.constraint() == Some("users_username_key") =>
159 | {
160 | return Err(SignupError::UsernameExists);
161 | }
162 | Err(_err) => {
163 | return Err(SignupError::InternalError);
164 | }
165 | };
166 |
167 | Ok(new_session(database, random, user_id).await)
168 | }
169 |
170 | pub(crate) async fn login(
171 | database: &Database,
172 | random: Random,
173 | username: &str,
174 | password: &str,
175 | ) -> Result {
176 | const LOGIN_QUERY: &str = "SELECT id, password FROM users WHERE users.username = $1;";
177 |
178 | let row: Option<(i32, String)> = sqlx::query_as(LOGIN_QUERY)
179 | .bind(username)
180 | .fetch_optional(database)
181 | .await
182 | .unwrap();
183 |
184 | let (user_id, hashed_password) = if let Some(row) = row {
185 | row
186 | } else {
187 | return Err(LoginError::UserDoesNotExist);
188 | };
189 |
190 | // Verify password against PHC string
191 | let parsed_hash = PasswordHash::new(&hashed_password).unwrap();
192 | if let Err(_err) = Pbkdf2.verify_password(password.as_bytes(), &parsed_hash) {
193 | return Err(LoginError::WrongPassword);
194 | }
195 |
196 | Ok(new_session(database, random, user_id).await)
197 | }
198 |
199 | pub(crate) async fn delete_user(auth_state: AuthState) {
200 | const DELETE_QUERY: &str = "DELETE FROM users
201 | WHERE users.id = (
202 | SELECT user_id FROM sessions WHERE sessions.session_token = $1
203 | );";
204 |
205 | let auth_state = auth_state.0.unwrap();
206 | let _res = sqlx::query(DELETE_QUERY)
207 | .bind(&auth_state.0.into_database_value())
208 | .execute(&auth_state.2)
209 | .await
210 | .unwrap();
211 | }
212 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | mod authentication;
2 | mod errors;
3 | mod utils;
4 |
5 | use std::sync::{Arc, Mutex};
6 | use sqlx::Postgres;
7 |
8 | use axum::{
9 | extract::{Extension, Multipart, Path},
10 | middleware,
11 | response::{Html, IntoResponse, Redirect},
12 | routing::{any, get, post},
13 | Router,
14 | };
15 | use http::Response;
16 |
17 | use authentication::{auth, delete_user, login, signup, AuthState};
18 | use errors::{LoginError, NoUser, NotLoggedIn, SignupError};
19 | use pbkdf2::password_hash::rand_core::OsRng;
20 | use rand_chacha::ChaCha8Rng;
21 | use rand_core::{RngCore, SeedableRng};
22 | use shuttle_service::{error::CustomError};
23 | use shuttle_axum::ShuttleAxum;
24 | use sqlx::Executor;
25 | use tera::{Context, Tera};
26 | use utils::*;
27 |
28 | use sqlx::PgPool;
29 | type Templates = Arc;
30 | type Database = sqlx::PgPool;
31 | type Random = Arc>;
32 |
33 | const USER_COOKIE_NAME: &str = "user_token";
34 | const COOKIE_MAX_AGE: &str = "9999999";
35 |
36 |
37 | #[shuttle_runtime::main]
38 | async fn server(
39 | #[shuttle_shared_db::Postgres] pool: PgPool
40 | ) -> ShuttleAxum {
41 | pool.execute(include_str!("../schema.sql"))
42 | .await
43 | .map_err(CustomError::new)?;
44 |
45 | Ok(get_router(pool).into())
46 | }
47 |
48 |
49 | pub fn get_router(database: Database) -> Router {
50 | let mut tera = Tera::default();
51 | tera.add_raw_templates(vec![
52 | ("base.html", include_str!("../templates/base.html")),
53 | ("index", include_str!("../templates/index.html")),
54 | ("signup", include_str!("../templates/signup.html")),
55 | ("login", include_str!("../templates/login.html")),
56 | ("users", include_str!("../templates/users.html")),
57 | ("user", include_str!("../templates/user.html")),
58 | ])
59 | .unwrap();
60 |
61 | let middleware_database = database.clone();
62 | let random = ChaCha8Rng::seed_from_u64(OsRng.next_u64());
63 |
64 | Router::new()
65 | .route("/", get(index))
66 | .route("/signup", get(get_signup).post(post_signup))
67 | .route("/login", get(get_login).post(post_login))
68 | .route("/logout", post(logout_response))
69 | .route("/delete", post(post_delete))
70 | .route("/me", get(me))
71 | .route("/user/:username", get(user))
72 | .route("/users", get(users))
73 | .route("/styles.css", any(styles))
74 | .layer(middleware::from_fn(move |req, next| {
75 | auth(req, next, middleware_database.clone())
76 | }))
77 | .layer(Extension(Arc::new(tera)))
78 | .layer(Extension(database))
79 | .layer(Extension(Arc::new(Mutex::new(random))))
80 | }
81 |
82 | async fn index(
83 | Extension(current_user): Extension,
84 | Extension(templates): Extension,
85 | ) -> impl IntoResponse {
86 | let mut context = Context::new();
87 | context.insert("logged_in", ¤t_user.logged_in());
88 | context.insert("home_screen", &true);
89 | Html(templates.render("index", &context).unwrap())
90 | }
91 |
92 | async fn user(
93 | Path(username): Path,
94 | Extension(mut auth_state): Extension,
95 | Extension(database): Extension,
96 | Extension(templates): Extension,
97 | ) -> impl IntoResponse {
98 | const QUERY: &str = "SELECT username FROM users WHERE username = $1;";
99 |
100 | let user: Option<(String,)> = sqlx::query_as(QUERY)
101 | .bind(&username)
102 | .fetch_optional(&database)
103 | .await
104 | .unwrap();
105 |
106 | if let Some((username,)) = user {
107 | let user_is_self = auth_state
108 | .get_user()
109 | .await
110 | .map(|logged_in_user| logged_in_user.username == username)
111 | .unwrap_or_default();
112 | let mut context = Context::new();
113 | context.insert("username", &username);
114 | context.insert("is_self", &user_is_self);
115 | Ok(Html(templates.render("user", &context).unwrap()))
116 | } else {
117 | Err(error_page(&NoUser(username)))
118 | }
119 | }
120 |
121 | async fn get_signup(Extension(templates): Extension) -> impl IntoResponse {
122 | Html(templates.render("signup", &Context::new()).unwrap())
123 | }
124 |
125 | async fn get_login(Extension(templates): Extension) -> impl IntoResponse {
126 | Html(templates.render("login", &Context::new()).unwrap())
127 | }
128 |
129 | async fn post_signup(
130 | Extension(database): Extension,
131 | Extension(random): Extension,
132 | multipart: Multipart,
133 | ) -> impl IntoResponse {
134 | let data = parse_multipart(multipart)
135 | .await
136 | .map_err(|err| error_page(&err))?;
137 |
138 | if let (Some(username), Some(password), Some(confirm_password)) = (
139 | data.get("username"),
140 | data.get("password"),
141 | data.get("confirm_password"),
142 | ) {
143 | if password != confirm_password {
144 | return Err(error_page(&SignupError::PasswordsDoNotMatch));
145 | }
146 |
147 | match signup(&database, random, username, password).await {
148 | Ok(session_token) => Ok(login_response(session_token)),
149 | Err(error) => Err(error_page(&error)),
150 | }
151 | } else {
152 | Err(error_page(&SignupError::MissingDetails))
153 | }
154 | }
155 |
156 | async fn post_login(
157 | Extension(database): Extension,
158 | Extension(random): Extension,
159 | multipart: Multipart,
160 | ) -> impl IntoResponse {
161 | let data = parse_multipart(multipart)
162 | .await
163 | .map_err(|err| error_page(&err))?;
164 |
165 | if let (Some(username), Some(password)) = (data.get("username"), data.get("password")) {
166 | match login(&database, random, username, password).await {
167 | Ok(session_token) => Ok(login_response(session_token)),
168 | Err(err) => Err(error_page(&err)),
169 | }
170 | } else {
171 | Err(error_page(&LoginError::MissingDetails))
172 | }
173 | }
174 |
175 | async fn post_delete(Extension(current_user): Extension) -> impl IntoResponse {
176 | if !current_user.logged_in() {
177 | return Err(error_page(&NotLoggedIn));
178 | }
179 |
180 | delete_user(current_user).await;
181 |
182 | Ok(logout_response().await)
183 | }
184 |
185 | async fn styles() -> impl IntoResponse {
186 | Response::builder()
187 | .status(http::StatusCode::OK)
188 | .header("Content-Type", "text/css")
189 | .body(include_str!("../public/styles.css").to_owned())
190 | .unwrap()
191 | }
192 |
193 | async fn me(
194 | Extension(mut current_user): Extension,
195 | ) -> Result {
196 | if let Some(user) = current_user.get_user().await {
197 | Ok(Redirect::to(&format!("/user/{}", user.username)))
198 | } else {
199 | Err(error_page(&NotLoggedIn))
200 | }
201 | }
202 |
203 | async fn users(
204 | Extension(database): Extension,
205 | Extension(templates): Extension,
206 | ) -> impl IntoResponse {
207 | const QUERY: &str = "SELECT username FROM users LIMIT 100;";
208 |
209 | let users: Vec<(String,)> = sqlx::query_as(QUERY).fetch_all(&database).await.unwrap();
210 |
211 | // This should be a no op right :)
212 | let users = users.into_iter().map(|(value,)| value).collect::>();
213 |
214 | let mut context = Context::new();
215 | context.insert("users", &users);
216 |
217 | Html(templates.render("users", &context).unwrap())
218 | }
219 |
--------------------------------------------------------------------------------
/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 = "addr2line"
7 | version = "0.21.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
10 | dependencies = [
11 | "gimli",
12 | ]
13 |
14 | [[package]]
15 | name = "adler"
16 | version = "1.0.2"
17 | source = "registry+https://github.com/rust-lang/crates.io-index"
18 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
19 |
20 | [[package]]
21 | name = "ahash"
22 | version = "0.7.6"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
25 | dependencies = [
26 | "getrandom",
27 | "once_cell",
28 | "version_check",
29 | ]
30 |
31 | [[package]]
32 | name = "ahash"
33 | version = "0.8.3"
34 | source = "registry+https://github.com/rust-lang/crates.io-index"
35 | checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
36 | dependencies = [
37 | "cfg-if",
38 | "getrandom",
39 | "once_cell",
40 | "version_check",
41 | ]
42 |
43 | [[package]]
44 | name = "aho-corasick"
45 | version = "1.0.4"
46 | source = "registry+https://github.com/rust-lang/crates.io-index"
47 | checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
48 | dependencies = [
49 | "memchr",
50 | ]
51 |
52 | [[package]]
53 | name = "android-tzdata"
54 | version = "0.1.1"
55 | source = "registry+https://github.com/rust-lang/crates.io-index"
56 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
57 |
58 | [[package]]
59 | name = "android_system_properties"
60 | version = "0.1.5"
61 | source = "registry+https://github.com/rust-lang/crates.io-index"
62 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
63 | dependencies = [
64 | "libc",
65 | ]
66 |
67 | [[package]]
68 | name = "anyhow"
69 | version = "1.0.75"
70 | source = "registry+https://github.com/rust-lang/crates.io-index"
71 | checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
72 |
73 | [[package]]
74 | name = "arrayvec"
75 | version = "0.7.4"
76 | source = "registry+https://github.com/rust-lang/crates.io-index"
77 | checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
78 |
79 | [[package]]
80 | name = "async-stream"
81 | version = "0.3.5"
82 | source = "registry+https://github.com/rust-lang/crates.io-index"
83 | checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
84 | dependencies = [
85 | "async-stream-impl",
86 | "futures-core",
87 | "pin-project-lite",
88 | ]
89 |
90 | [[package]]
91 | name = "async-stream-impl"
92 | version = "0.3.5"
93 | source = "registry+https://github.com/rust-lang/crates.io-index"
94 | checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
95 | dependencies = [
96 | "proc-macro2",
97 | "quote",
98 | "syn 2.0.29",
99 | ]
100 |
101 | [[package]]
102 | name = "async-trait"
103 | version = "0.1.73"
104 | source = "registry+https://github.com/rust-lang/crates.io-index"
105 | checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
106 | dependencies = [
107 | "proc-macro2",
108 | "quote",
109 | "syn 2.0.29",
110 | ]
111 |
112 | [[package]]
113 | name = "atoi"
114 | version = "2.0.0"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
117 | dependencies = [
118 | "num-traits",
119 | ]
120 |
121 | [[package]]
122 | name = "autocfg"
123 | version = "1.1.0"
124 | source = "registry+https://github.com/rust-lang/crates.io-index"
125 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
126 |
127 | [[package]]
128 | name = "axum"
129 | version = "0.6.20"
130 | source = "registry+https://github.com/rust-lang/crates.io-index"
131 | checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
132 | dependencies = [
133 | "async-trait",
134 | "axum-core",
135 | "bitflags 1.3.2",
136 | "bytes",
137 | "futures-util",
138 | "http",
139 | "http-body",
140 | "hyper",
141 | "itoa",
142 | "matchit",
143 | "memchr",
144 | "mime",
145 | "multer",
146 | "percent-encoding",
147 | "pin-project-lite",
148 | "rustversion",
149 | "serde",
150 | "serde_json",
151 | "serde_path_to_error",
152 | "serde_urlencoded",
153 | "sync_wrapper",
154 | "tokio",
155 | "tower",
156 | "tower-layer",
157 | "tower-service",
158 | ]
159 |
160 | [[package]]
161 | name = "axum-core"
162 | version = "0.3.4"
163 | source = "registry+https://github.com/rust-lang/crates.io-index"
164 | checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
165 | dependencies = [
166 | "async-trait",
167 | "bytes",
168 | "futures-util",
169 | "http",
170 | "http-body",
171 | "mime",
172 | "rustversion",
173 | "tower-layer",
174 | "tower-service",
175 | ]
176 |
177 | [[package]]
178 | name = "backtrace"
179 | version = "0.3.69"
180 | source = "registry+https://github.com/rust-lang/crates.io-index"
181 | checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
182 | dependencies = [
183 | "addr2line",
184 | "cc",
185 | "cfg-if",
186 | "libc",
187 | "miniz_oxide",
188 | "object",
189 | "rustc-demangle",
190 | ]
191 |
192 | [[package]]
193 | name = "base64"
194 | version = "0.13.0"
195 | source = "registry+https://github.com/rust-lang/crates.io-index"
196 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
197 |
198 | [[package]]
199 | name = "base64"
200 | version = "0.21.2"
201 | source = "registry+https://github.com/rust-lang/crates.io-index"
202 | checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
203 |
204 | [[package]]
205 | name = "base64ct"
206 | version = "1.5.2"
207 | source = "registry+https://github.com/rust-lang/crates.io-index"
208 | checksum = "ea2b2456fd614d856680dcd9fcc660a51a820fa09daef2e49772b56a193c8474"
209 |
210 | [[package]]
211 | name = "bitflags"
212 | version = "1.3.2"
213 | source = "registry+https://github.com/rust-lang/crates.io-index"
214 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
215 |
216 | [[package]]
217 | name = "bitflags"
218 | version = "2.4.0"
219 | source = "registry+https://github.com/rust-lang/crates.io-index"
220 | checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
221 | dependencies = [
222 | "serde",
223 | ]
224 |
225 | [[package]]
226 | name = "block-buffer"
227 | version = "0.10.3"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
230 | dependencies = [
231 | "generic-array",
232 | ]
233 |
234 | [[package]]
235 | name = "bstr"
236 | version = "1.6.0"
237 | source = "registry+https://github.com/rust-lang/crates.io-index"
238 | checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
239 | dependencies = [
240 | "memchr",
241 | "serde",
242 | ]
243 |
244 | [[package]]
245 | name = "bumpalo"
246 | version = "3.11.0"
247 | source = "registry+https://github.com/rust-lang/crates.io-index"
248 | checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d"
249 |
250 | [[package]]
251 | name = "byteorder"
252 | version = "1.4.3"
253 | source = "registry+https://github.com/rust-lang/crates.io-index"
254 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
255 |
256 | [[package]]
257 | name = "bytes"
258 | version = "1.4.0"
259 | source = "registry+https://github.com/rust-lang/crates.io-index"
260 | checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
261 |
262 | [[package]]
263 | name = "cc"
264 | version = "1.0.73"
265 | source = "registry+https://github.com/rust-lang/crates.io-index"
266 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
267 |
268 | [[package]]
269 | name = "cfg-if"
270 | version = "1.0.0"
271 | source = "registry+https://github.com/rust-lang/crates.io-index"
272 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
273 |
274 | [[package]]
275 | name = "chrono"
276 | version = "0.4.26"
277 | source = "registry+https://github.com/rust-lang/crates.io-index"
278 | checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
279 | dependencies = [
280 | "android-tzdata",
281 | "iana-time-zone",
282 | "num-traits",
283 | "serde",
284 | "winapi",
285 | ]
286 |
287 | [[package]]
288 | name = "chrono-tz"
289 | version = "0.6.1"
290 | source = "registry+https://github.com/rust-lang/crates.io-index"
291 | checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552"
292 | dependencies = [
293 | "chrono",
294 | "chrono-tz-build",
295 | "phf",
296 | ]
297 |
298 | [[package]]
299 | name = "chrono-tz-build"
300 | version = "0.0.2"
301 | source = "registry+https://github.com/rust-lang/crates.io-index"
302 | checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069"
303 | dependencies = [
304 | "parse-zoneinfo",
305 | "phf",
306 | "phf_codegen",
307 | ]
308 |
309 | [[package]]
310 | name = "codespan-reporting"
311 | version = "0.11.1"
312 | source = "registry+https://github.com/rust-lang/crates.io-index"
313 | checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
314 | dependencies = [
315 | "termcolor",
316 | "unicode-width",
317 | ]
318 |
319 | [[package]]
320 | name = "const-oid"
321 | version = "0.9.5"
322 | source = "registry+https://github.com/rust-lang/crates.io-index"
323 | checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
324 |
325 | [[package]]
326 | name = "cookie"
327 | version = "0.17.0"
328 | source = "registry+https://github.com/rust-lang/crates.io-index"
329 | checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
330 | dependencies = [
331 | "time",
332 | "version_check",
333 | ]
334 |
335 | [[package]]
336 | name = "core-foundation"
337 | version = "0.9.3"
338 | source = "registry+https://github.com/rust-lang/crates.io-index"
339 | checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
340 | dependencies = [
341 | "core-foundation-sys",
342 | "libc",
343 | ]
344 |
345 | [[package]]
346 | name = "core-foundation-sys"
347 | version = "0.8.3"
348 | source = "registry+https://github.com/rust-lang/crates.io-index"
349 | checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
350 |
351 | [[package]]
352 | name = "cpufeatures"
353 | version = "0.2.5"
354 | source = "registry+https://github.com/rust-lang/crates.io-index"
355 | checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
356 | dependencies = [
357 | "libc",
358 | ]
359 |
360 | [[package]]
361 | name = "crc"
362 | version = "3.0.0"
363 | source = "registry+https://github.com/rust-lang/crates.io-index"
364 | checksum = "53757d12b596c16c78b83458d732a5d1a17ab3f53f2f7412f6fb57cc8a140ab3"
365 | dependencies = [
366 | "crc-catalog",
367 | ]
368 |
369 | [[package]]
370 | name = "crc-catalog"
371 | version = "2.1.0"
372 | source = "registry+https://github.com/rust-lang/crates.io-index"
373 | checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff"
374 |
375 | [[package]]
376 | name = "crossbeam-channel"
377 | version = "0.5.6"
378 | source = "registry+https://github.com/rust-lang/crates.io-index"
379 | checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
380 | dependencies = [
381 | "cfg-if",
382 | "crossbeam-utils",
383 | ]
384 |
385 | [[package]]
386 | name = "crossbeam-queue"
387 | version = "0.3.6"
388 | source = "registry+https://github.com/rust-lang/crates.io-index"
389 | checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7"
390 | dependencies = [
391 | "cfg-if",
392 | "crossbeam-utils",
393 | ]
394 |
395 | [[package]]
396 | name = "crossbeam-utils"
397 | version = "0.8.12"
398 | source = "registry+https://github.com/rust-lang/crates.io-index"
399 | checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac"
400 | dependencies = [
401 | "cfg-if",
402 | ]
403 |
404 | [[package]]
405 | name = "crypto-common"
406 | version = "0.1.6"
407 | source = "registry+https://github.com/rust-lang/crates.io-index"
408 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
409 | dependencies = [
410 | "generic-array",
411 | "typenum",
412 | ]
413 |
414 | [[package]]
415 | name = "cxx"
416 | version = "1.0.79"
417 | source = "registry+https://github.com/rust-lang/crates.io-index"
418 | checksum = "3f83d0ebf42c6eafb8d7c52f7e5f2d3003b89c7aa4fd2b79229209459a849af8"
419 | dependencies = [
420 | "cc",
421 | "cxxbridge-flags",
422 | "cxxbridge-macro",
423 | "link-cplusplus",
424 | ]
425 |
426 | [[package]]
427 | name = "cxx-build"
428 | version = "1.0.79"
429 | source = "registry+https://github.com/rust-lang/crates.io-index"
430 | checksum = "07d050484b55975889284352b0ffc2ecbda25c0c55978017c132b29ba0818a86"
431 | dependencies = [
432 | "cc",
433 | "codespan-reporting",
434 | "once_cell",
435 | "proc-macro2",
436 | "quote",
437 | "scratch",
438 | "syn 1.0.102",
439 | ]
440 |
441 | [[package]]
442 | name = "cxxbridge-flags"
443 | version = "1.0.79"
444 | source = "registry+https://github.com/rust-lang/crates.io-index"
445 | checksum = "99d2199b00553eda8012dfec8d3b1c75fce747cf27c169a270b3b99e3448ab78"
446 |
447 | [[package]]
448 | name = "cxxbridge-macro"
449 | version = "1.0.79"
450 | source = "registry+https://github.com/rust-lang/crates.io-index"
451 | checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f"
452 | dependencies = [
453 | "proc-macro2",
454 | "quote",
455 | "syn 1.0.102",
456 | ]
457 |
458 | [[package]]
459 | name = "dashmap"
460 | version = "5.4.0"
461 | source = "registry+https://github.com/rust-lang/crates.io-index"
462 | checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
463 | dependencies = [
464 | "cfg-if",
465 | "hashbrown 0.12.3",
466 | "lock_api",
467 | "once_cell",
468 | "parking_lot_core",
469 | ]
470 |
471 | [[package]]
472 | name = "der"
473 | version = "0.7.8"
474 | source = "registry+https://github.com/rust-lang/crates.io-index"
475 | checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
476 | dependencies = [
477 | "const-oid",
478 | "pem-rfc7468",
479 | "zeroize",
480 | ]
481 |
482 | [[package]]
483 | name = "deunicode"
484 | version = "0.4.4"
485 | source = "registry+https://github.com/rust-lang/crates.io-index"
486 | checksum = "d95203a6a50906215a502507c0f879a0ce7ff205a6111e2db2a5ef8e4bb92e43"
487 |
488 | [[package]]
489 | name = "digest"
490 | version = "0.10.7"
491 | source = "registry+https://github.com/rust-lang/crates.io-index"
492 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
493 | dependencies = [
494 | "block-buffer",
495 | "const-oid",
496 | "crypto-common",
497 | "subtle",
498 | ]
499 |
500 | [[package]]
501 | name = "doc-comment"
502 | version = "0.3.3"
503 | source = "registry+https://github.com/rust-lang/crates.io-index"
504 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
505 |
506 | [[package]]
507 | name = "dotenvy"
508 | version = "0.15.6"
509 | source = "registry+https://github.com/rust-lang/crates.io-index"
510 | checksum = "03d8c417d7a8cb362e0c37e5d815f5eb7c37f79ff93707329d5a194e42e54ca0"
511 |
512 | [[package]]
513 | name = "either"
514 | version = "1.8.0"
515 | source = "registry+https://github.com/rust-lang/crates.io-index"
516 | checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
517 | dependencies = [
518 | "serde",
519 | ]
520 |
521 | [[package]]
522 | name = "encoding_rs"
523 | version = "0.8.33"
524 | source = "registry+https://github.com/rust-lang/crates.io-index"
525 | checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
526 | dependencies = [
527 | "cfg-if",
528 | ]
529 |
530 | [[package]]
531 | name = "equivalent"
532 | version = "1.0.1"
533 | source = "registry+https://github.com/rust-lang/crates.io-index"
534 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
535 |
536 | [[package]]
537 | name = "etcetera"
538 | version = "0.8.0"
539 | source = "registry+https://github.com/rust-lang/crates.io-index"
540 | checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
541 | dependencies = [
542 | "cfg-if",
543 | "home",
544 | "windows-sys",
545 | ]
546 |
547 | [[package]]
548 | name = "event-listener"
549 | version = "2.5.3"
550 | source = "registry+https://github.com/rust-lang/crates.io-index"
551 | checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
552 |
553 | [[package]]
554 | name = "fastrand"
555 | version = "1.8.0"
556 | source = "registry+https://github.com/rust-lang/crates.io-index"
557 | checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
558 | dependencies = [
559 | "instant",
560 | ]
561 |
562 | [[package]]
563 | name = "finl_unicode"
564 | version = "1.2.0"
565 | source = "registry+https://github.com/rust-lang/crates.io-index"
566 | checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
567 |
568 | [[package]]
569 | name = "flume"
570 | version = "0.10.14"
571 | source = "registry+https://github.com/rust-lang/crates.io-index"
572 | checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
573 | dependencies = [
574 | "futures-core",
575 | "futures-sink",
576 | "pin-project",
577 | "spin 0.9.4",
578 | ]
579 |
580 | [[package]]
581 | name = "fnv"
582 | version = "1.0.7"
583 | source = "registry+https://github.com/rust-lang/crates.io-index"
584 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
585 |
586 | [[package]]
587 | name = "foreign-types"
588 | version = "0.3.2"
589 | source = "registry+https://github.com/rust-lang/crates.io-index"
590 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
591 | dependencies = [
592 | "foreign-types-shared",
593 | ]
594 |
595 | [[package]]
596 | name = "foreign-types-shared"
597 | version = "0.1.1"
598 | source = "registry+https://github.com/rust-lang/crates.io-index"
599 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
600 |
601 | [[package]]
602 | name = "form_urlencoded"
603 | version = "1.1.0"
604 | source = "registry+https://github.com/rust-lang/crates.io-index"
605 | checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
606 | dependencies = [
607 | "percent-encoding",
608 | ]
609 |
610 | [[package]]
611 | name = "futures"
612 | version = "0.3.24"
613 | source = "registry+https://github.com/rust-lang/crates.io-index"
614 | checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
615 | dependencies = [
616 | "futures-channel",
617 | "futures-core",
618 | "futures-io",
619 | "futures-sink",
620 | "futures-task",
621 | "futures-util",
622 | ]
623 |
624 | [[package]]
625 | name = "futures-channel"
626 | version = "0.3.24"
627 | source = "registry+https://github.com/rust-lang/crates.io-index"
628 | checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
629 | dependencies = [
630 | "futures-core",
631 | "futures-sink",
632 | ]
633 |
634 | [[package]]
635 | name = "futures-core"
636 | version = "0.3.24"
637 | source = "registry+https://github.com/rust-lang/crates.io-index"
638 | checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
639 |
640 | [[package]]
641 | name = "futures-executor"
642 | version = "0.3.24"
643 | source = "registry+https://github.com/rust-lang/crates.io-index"
644 | checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
645 | dependencies = [
646 | "futures-core",
647 | "futures-task",
648 | "futures-util",
649 | ]
650 |
651 | [[package]]
652 | name = "futures-intrusive"
653 | version = "0.5.0"
654 | source = "registry+https://github.com/rust-lang/crates.io-index"
655 | checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
656 | dependencies = [
657 | "futures-core",
658 | "lock_api",
659 | "parking_lot",
660 | ]
661 |
662 | [[package]]
663 | name = "futures-io"
664 | version = "0.3.24"
665 | source = "registry+https://github.com/rust-lang/crates.io-index"
666 | checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
667 |
668 | [[package]]
669 | name = "futures-macro"
670 | version = "0.3.24"
671 | source = "registry+https://github.com/rust-lang/crates.io-index"
672 | checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
673 | dependencies = [
674 | "proc-macro2",
675 | "quote",
676 | "syn 1.0.102",
677 | ]
678 |
679 | [[package]]
680 | name = "futures-sink"
681 | version = "0.3.24"
682 | source = "registry+https://github.com/rust-lang/crates.io-index"
683 | checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
684 |
685 | [[package]]
686 | name = "futures-task"
687 | version = "0.3.24"
688 | source = "registry+https://github.com/rust-lang/crates.io-index"
689 | checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
690 |
691 | [[package]]
692 | name = "futures-util"
693 | version = "0.3.24"
694 | source = "registry+https://github.com/rust-lang/crates.io-index"
695 | checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
696 | dependencies = [
697 | "futures-channel",
698 | "futures-core",
699 | "futures-io",
700 | "futures-macro",
701 | "futures-sink",
702 | "futures-task",
703 | "memchr",
704 | "pin-project-lite",
705 | "pin-utils",
706 | "slab",
707 | ]
708 |
709 | [[package]]
710 | name = "generic-array"
711 | version = "0.14.6"
712 | source = "registry+https://github.com/rust-lang/crates.io-index"
713 | checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
714 | dependencies = [
715 | "typenum",
716 | "version_check",
717 | ]
718 |
719 | [[package]]
720 | name = "getrandom"
721 | version = "0.2.7"
722 | source = "registry+https://github.com/rust-lang/crates.io-index"
723 | checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6"
724 | dependencies = [
725 | "cfg-if",
726 | "libc",
727 | "wasi",
728 | ]
729 |
730 | [[package]]
731 | name = "gimli"
732 | version = "0.28.0"
733 | source = "registry+https://github.com/rust-lang/crates.io-index"
734 | checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
735 |
736 | [[package]]
737 | name = "globset"
738 | version = "0.4.13"
739 | source = "registry+https://github.com/rust-lang/crates.io-index"
740 | checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
741 | dependencies = [
742 | "aho-corasick",
743 | "bstr",
744 | "fnv",
745 | "log",
746 | "regex",
747 | ]
748 |
749 | [[package]]
750 | name = "globwalk"
751 | version = "0.8.1"
752 | source = "registry+https://github.com/rust-lang/crates.io-index"
753 | checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
754 | dependencies = [
755 | "bitflags 1.3.2",
756 | "ignore",
757 | "walkdir",
758 | ]
759 |
760 | [[package]]
761 | name = "h2"
762 | version = "0.3.21"
763 | source = "registry+https://github.com/rust-lang/crates.io-index"
764 | checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
765 | dependencies = [
766 | "bytes",
767 | "fnv",
768 | "futures-core",
769 | "futures-sink",
770 | "futures-util",
771 | "http",
772 | "indexmap 1.9.1",
773 | "slab",
774 | "tokio",
775 | "tokio-util",
776 | "tracing",
777 | ]
778 |
779 | [[package]]
780 | name = "hashbrown"
781 | version = "0.12.3"
782 | source = "registry+https://github.com/rust-lang/crates.io-index"
783 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
784 | dependencies = [
785 | "ahash 0.7.6",
786 | ]
787 |
788 | [[package]]
789 | name = "hashbrown"
790 | version = "0.14.0"
791 | source = "registry+https://github.com/rust-lang/crates.io-index"
792 | checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
793 |
794 | [[package]]
795 | name = "hashlink"
796 | version = "0.8.1"
797 | source = "registry+https://github.com/rust-lang/crates.io-index"
798 | checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
799 | dependencies = [
800 | "hashbrown 0.12.3",
801 | ]
802 |
803 | [[package]]
804 | name = "headers"
805 | version = "0.3.8"
806 | source = "registry+https://github.com/rust-lang/crates.io-index"
807 | checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584"
808 | dependencies = [
809 | "base64 0.13.0",
810 | "bitflags 1.3.2",
811 | "bytes",
812 | "headers-core",
813 | "http",
814 | "httpdate",
815 | "mime",
816 | "sha1",
817 | ]
818 |
819 | [[package]]
820 | name = "headers-core"
821 | version = "0.2.0"
822 | source = "registry+https://github.com/rust-lang/crates.io-index"
823 | checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
824 | dependencies = [
825 | "http",
826 | ]
827 |
828 | [[package]]
829 | name = "heck"
830 | version = "0.4.0"
831 | source = "registry+https://github.com/rust-lang/crates.io-index"
832 | checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
833 | dependencies = [
834 | "unicode-segmentation",
835 | ]
836 |
837 | [[package]]
838 | name = "hermit-abi"
839 | version = "0.1.19"
840 | source = "registry+https://github.com/rust-lang/crates.io-index"
841 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
842 | dependencies = [
843 | "libc",
844 | ]
845 |
846 | [[package]]
847 | name = "hex"
848 | version = "0.4.3"
849 | source = "registry+https://github.com/rust-lang/crates.io-index"
850 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
851 |
852 | [[package]]
853 | name = "hkdf"
854 | version = "0.12.3"
855 | source = "registry+https://github.com/rust-lang/crates.io-index"
856 | checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
857 | dependencies = [
858 | "hmac",
859 | ]
860 |
861 | [[package]]
862 | name = "hmac"
863 | version = "0.12.1"
864 | source = "registry+https://github.com/rust-lang/crates.io-index"
865 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
866 | dependencies = [
867 | "digest",
868 | ]
869 |
870 | [[package]]
871 | name = "home"
872 | version = "0.5.5"
873 | source = "registry+https://github.com/rust-lang/crates.io-index"
874 | checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
875 | dependencies = [
876 | "windows-sys",
877 | ]
878 |
879 | [[package]]
880 | name = "http"
881 | version = "0.2.9"
882 | source = "registry+https://github.com/rust-lang/crates.io-index"
883 | checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
884 | dependencies = [
885 | "bytes",
886 | "fnv",
887 | "itoa",
888 | ]
889 |
890 | [[package]]
891 | name = "http-body"
892 | version = "0.4.5"
893 | source = "registry+https://github.com/rust-lang/crates.io-index"
894 | checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
895 | dependencies = [
896 | "bytes",
897 | "http",
898 | "pin-project-lite",
899 | ]
900 |
901 | [[package]]
902 | name = "http-range-header"
903 | version = "0.3.0"
904 | source = "registry+https://github.com/rust-lang/crates.io-index"
905 | checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
906 |
907 | [[package]]
908 | name = "http-serde"
909 | version = "1.1.3"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee"
912 | dependencies = [
913 | "http",
914 | "serde",
915 | ]
916 |
917 | [[package]]
918 | name = "httparse"
919 | version = "1.8.0"
920 | source = "registry+https://github.com/rust-lang/crates.io-index"
921 | checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
922 |
923 | [[package]]
924 | name = "httpdate"
925 | version = "1.0.2"
926 | source = "registry+https://github.com/rust-lang/crates.io-index"
927 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
928 |
929 | [[package]]
930 | name = "humansize"
931 | version = "2.1.3"
932 | source = "registry+https://github.com/rust-lang/crates.io-index"
933 | checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7"
934 | dependencies = [
935 | "libm",
936 | ]
937 |
938 | [[package]]
939 | name = "hyper"
940 | version = "0.14.27"
941 | source = "registry+https://github.com/rust-lang/crates.io-index"
942 | checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
943 | dependencies = [
944 | "bytes",
945 | "futures-channel",
946 | "futures-core",
947 | "futures-util",
948 | "h2",
949 | "http",
950 | "http-body",
951 | "httparse",
952 | "httpdate",
953 | "itoa",
954 | "pin-project-lite",
955 | "socket2 0.4.7",
956 | "tokio",
957 | "tower-service",
958 | "tracing",
959 | "want",
960 | ]
961 |
962 | [[package]]
963 | name = "hyper-timeout"
964 | version = "0.4.1"
965 | source = "registry+https://github.com/rust-lang/crates.io-index"
966 | checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
967 | dependencies = [
968 | "hyper",
969 | "pin-project-lite",
970 | "tokio",
971 | "tokio-io-timeout",
972 | ]
973 |
974 | [[package]]
975 | name = "iana-time-zone"
976 | version = "0.1.51"
977 | source = "registry+https://github.com/rust-lang/crates.io-index"
978 | checksum = "f5a6ef98976b22b3b7f2f3a806f858cb862044cfa66805aa3ad84cb3d3b785ed"
979 | dependencies = [
980 | "android_system_properties",
981 | "core-foundation-sys",
982 | "iana-time-zone-haiku",
983 | "js-sys",
984 | "wasm-bindgen",
985 | "winapi",
986 | ]
987 |
988 | [[package]]
989 | name = "iana-time-zone-haiku"
990 | version = "0.1.1"
991 | source = "registry+https://github.com/rust-lang/crates.io-index"
992 | checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
993 | dependencies = [
994 | "cxx",
995 | "cxx-build",
996 | ]
997 |
998 | [[package]]
999 | name = "idna"
1000 | version = "0.3.0"
1001 | source = "registry+https://github.com/rust-lang/crates.io-index"
1002 | checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
1003 | dependencies = [
1004 | "unicode-bidi",
1005 | "unicode-normalization",
1006 | ]
1007 |
1008 | [[package]]
1009 | name = "ignore"
1010 | version = "0.4.20"
1011 | source = "registry+https://github.com/rust-lang/crates.io-index"
1012 | checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
1013 | dependencies = [
1014 | "globset",
1015 | "lazy_static",
1016 | "log",
1017 | "memchr",
1018 | "regex",
1019 | "same-file",
1020 | "thread_local",
1021 | "walkdir",
1022 | "winapi-util",
1023 | ]
1024 |
1025 | [[package]]
1026 | name = "indexmap"
1027 | version = "1.9.1"
1028 | source = "registry+https://github.com/rust-lang/crates.io-index"
1029 | checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
1030 | dependencies = [
1031 | "autocfg",
1032 | "hashbrown 0.12.3",
1033 | ]
1034 |
1035 | [[package]]
1036 | name = "indexmap"
1037 | version = "2.0.0"
1038 | source = "registry+https://github.com/rust-lang/crates.io-index"
1039 | checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
1040 | dependencies = [
1041 | "equivalent",
1042 | "hashbrown 0.14.0",
1043 | ]
1044 |
1045 | [[package]]
1046 | name = "instant"
1047 | version = "0.1.12"
1048 | source = "registry+https://github.com/rust-lang/crates.io-index"
1049 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
1050 | dependencies = [
1051 | "cfg-if",
1052 | ]
1053 |
1054 | [[package]]
1055 | name = "itertools"
1056 | version = "0.10.5"
1057 | source = "registry+https://github.com/rust-lang/crates.io-index"
1058 | checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
1059 | dependencies = [
1060 | "either",
1061 | ]
1062 |
1063 | [[package]]
1064 | name = "itoa"
1065 | version = "1.0.9"
1066 | source = "registry+https://github.com/rust-lang/crates.io-index"
1067 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
1068 |
1069 | [[package]]
1070 | name = "js-sys"
1071 | version = "0.3.60"
1072 | source = "registry+https://github.com/rust-lang/crates.io-index"
1073 | checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
1074 | dependencies = [
1075 | "wasm-bindgen",
1076 | ]
1077 |
1078 | [[package]]
1079 | name = "jsonwebtoken"
1080 | version = "8.3.0"
1081 | source = "registry+https://github.com/rust-lang/crates.io-index"
1082 | checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378"
1083 | dependencies = [
1084 | "base64 0.21.2",
1085 | "pem",
1086 | "ring",
1087 | "serde",
1088 | "serde_json",
1089 | "simple_asn1",
1090 | ]
1091 |
1092 | [[package]]
1093 | name = "lazy_static"
1094 | version = "1.4.0"
1095 | source = "registry+https://github.com/rust-lang/crates.io-index"
1096 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
1097 | dependencies = [
1098 | "spin 0.5.2",
1099 | ]
1100 |
1101 | [[package]]
1102 | name = "libc"
1103 | version = "0.2.147"
1104 | source = "registry+https://github.com/rust-lang/crates.io-index"
1105 | checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
1106 |
1107 | [[package]]
1108 | name = "libm"
1109 | version = "0.2.7"
1110 | source = "registry+https://github.com/rust-lang/crates.io-index"
1111 | checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
1112 |
1113 | [[package]]
1114 | name = "libsqlite3-sys"
1115 | version = "0.26.0"
1116 | source = "registry+https://github.com/rust-lang/crates.io-index"
1117 | checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
1118 | dependencies = [
1119 | "cc",
1120 | "pkg-config",
1121 | "vcpkg",
1122 | ]
1123 |
1124 | [[package]]
1125 | name = "link-cplusplus"
1126 | version = "1.0.7"
1127 | source = "registry+https://github.com/rust-lang/crates.io-index"
1128 | checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
1129 | dependencies = [
1130 | "cc",
1131 | ]
1132 |
1133 | [[package]]
1134 | name = "linked-hash-map"
1135 | version = "0.5.6"
1136 | source = "registry+https://github.com/rust-lang/crates.io-index"
1137 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
1138 |
1139 | [[package]]
1140 | name = "lock_api"
1141 | version = "0.4.9"
1142 | source = "registry+https://github.com/rust-lang/crates.io-index"
1143 | checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
1144 | dependencies = [
1145 | "autocfg",
1146 | "scopeguard",
1147 | ]
1148 |
1149 | [[package]]
1150 | name = "log"
1151 | version = "0.4.17"
1152 | source = "registry+https://github.com/rust-lang/crates.io-index"
1153 | checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
1154 | dependencies = [
1155 | "cfg-if",
1156 | ]
1157 |
1158 | [[package]]
1159 | name = "matchers"
1160 | version = "0.1.0"
1161 | source = "registry+https://github.com/rust-lang/crates.io-index"
1162 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
1163 | dependencies = [
1164 | "regex-automata 0.1.10",
1165 | ]
1166 |
1167 | [[package]]
1168 | name = "matchit"
1169 | version = "0.7.2"
1170 | source = "registry+https://github.com/rust-lang/crates.io-index"
1171 | checksum = "ed1202b2a6f884ae56f04cff409ab315c5ce26b5e58d7412e484f01fd52f52ef"
1172 |
1173 | [[package]]
1174 | name = "md-5"
1175 | version = "0.10.5"
1176 | source = "registry+https://github.com/rust-lang/crates.io-index"
1177 | checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca"
1178 | dependencies = [
1179 | "digest",
1180 | ]
1181 |
1182 | [[package]]
1183 | name = "memchr"
1184 | version = "2.5.0"
1185 | source = "registry+https://github.com/rust-lang/crates.io-index"
1186 | checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
1187 |
1188 | [[package]]
1189 | name = "mime"
1190 | version = "0.3.16"
1191 | source = "registry+https://github.com/rust-lang/crates.io-index"
1192 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
1193 |
1194 | [[package]]
1195 | name = "minimal-lexical"
1196 | version = "0.2.1"
1197 | source = "registry+https://github.com/rust-lang/crates.io-index"
1198 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
1199 |
1200 | [[package]]
1201 | name = "miniz_oxide"
1202 | version = "0.7.1"
1203 | source = "registry+https://github.com/rust-lang/crates.io-index"
1204 | checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
1205 | dependencies = [
1206 | "adler",
1207 | ]
1208 |
1209 | [[package]]
1210 | name = "mio"
1211 | version = "0.8.8"
1212 | source = "registry+https://github.com/rust-lang/crates.io-index"
1213 | checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
1214 | dependencies = [
1215 | "libc",
1216 | "wasi",
1217 | "windows-sys",
1218 | ]
1219 |
1220 | [[package]]
1221 | name = "multer"
1222 | version = "2.1.0"
1223 | source = "registry+https://github.com/rust-lang/crates.io-index"
1224 | checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
1225 | dependencies = [
1226 | "bytes",
1227 | "encoding_rs",
1228 | "futures-util",
1229 | "http",
1230 | "httparse",
1231 | "log",
1232 | "memchr",
1233 | "mime",
1234 | "spin 0.9.4",
1235 | "version_check",
1236 | ]
1237 |
1238 | [[package]]
1239 | name = "native-tls"
1240 | version = "0.2.11"
1241 | source = "registry+https://github.com/rust-lang/crates.io-index"
1242 | checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
1243 | dependencies = [
1244 | "lazy_static",
1245 | "libc",
1246 | "log",
1247 | "openssl",
1248 | "openssl-probe",
1249 | "openssl-sys",
1250 | "schannel",
1251 | "security-framework",
1252 | "security-framework-sys",
1253 | "tempfile",
1254 | ]
1255 |
1256 | [[package]]
1257 | name = "nom"
1258 | version = "7.1.1"
1259 | source = "registry+https://github.com/rust-lang/crates.io-index"
1260 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
1261 | dependencies = [
1262 | "memchr",
1263 | "minimal-lexical",
1264 | ]
1265 |
1266 | [[package]]
1267 | name = "nu-ansi-term"
1268 | version = "0.46.0"
1269 | source = "registry+https://github.com/rust-lang/crates.io-index"
1270 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
1271 | dependencies = [
1272 | "overload",
1273 | "winapi",
1274 | ]
1275 |
1276 | [[package]]
1277 | name = "num-bigint"
1278 | version = "0.4.3"
1279 | source = "registry+https://github.com/rust-lang/crates.io-index"
1280 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
1281 | dependencies = [
1282 | "autocfg",
1283 | "num-integer",
1284 | "num-traits",
1285 | ]
1286 |
1287 | [[package]]
1288 | name = "num-bigint-dig"
1289 | version = "0.8.4"
1290 | source = "registry+https://github.com/rust-lang/crates.io-index"
1291 | checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
1292 | dependencies = [
1293 | "byteorder",
1294 | "lazy_static",
1295 | "libm",
1296 | "num-integer",
1297 | "num-iter",
1298 | "num-traits",
1299 | "rand",
1300 | "smallvec",
1301 | "zeroize",
1302 | ]
1303 |
1304 | [[package]]
1305 | name = "num-integer"
1306 | version = "0.1.45"
1307 | source = "registry+https://github.com/rust-lang/crates.io-index"
1308 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
1309 | dependencies = [
1310 | "autocfg",
1311 | "num-traits",
1312 | ]
1313 |
1314 | [[package]]
1315 | name = "num-iter"
1316 | version = "0.1.43"
1317 | source = "registry+https://github.com/rust-lang/crates.io-index"
1318 | checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
1319 | dependencies = [
1320 | "autocfg",
1321 | "num-integer",
1322 | "num-traits",
1323 | ]
1324 |
1325 | [[package]]
1326 | name = "num-traits"
1327 | version = "0.2.15"
1328 | source = "registry+https://github.com/rust-lang/crates.io-index"
1329 | checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
1330 | dependencies = [
1331 | "autocfg",
1332 | "libm",
1333 | ]
1334 |
1335 | [[package]]
1336 | name = "num_cpus"
1337 | version = "1.13.1"
1338 | source = "registry+https://github.com/rust-lang/crates.io-index"
1339 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
1340 | dependencies = [
1341 | "hermit-abi",
1342 | "libc",
1343 | ]
1344 |
1345 | [[package]]
1346 | name = "num_threads"
1347 | version = "0.1.6"
1348 | source = "registry+https://github.com/rust-lang/crates.io-index"
1349 | checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
1350 | dependencies = [
1351 | "libc",
1352 | ]
1353 |
1354 | [[package]]
1355 | name = "object"
1356 | version = "0.32.0"
1357 | source = "registry+https://github.com/rust-lang/crates.io-index"
1358 | checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
1359 | dependencies = [
1360 | "memchr",
1361 | ]
1362 |
1363 | [[package]]
1364 | name = "once_cell"
1365 | version = "1.18.0"
1366 | source = "registry+https://github.com/rust-lang/crates.io-index"
1367 | checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
1368 |
1369 | [[package]]
1370 | name = "openssl"
1371 | version = "0.10.56"
1372 | source = "registry+https://github.com/rust-lang/crates.io-index"
1373 | checksum = "729b745ad4a5575dd06a3e1af1414bd330ee561c01b3899eb584baeaa8def17e"
1374 | dependencies = [
1375 | "bitflags 1.3.2",
1376 | "cfg-if",
1377 | "foreign-types",
1378 | "libc",
1379 | "once_cell",
1380 | "openssl-macros",
1381 | "openssl-sys",
1382 | ]
1383 |
1384 | [[package]]
1385 | name = "openssl-macros"
1386 | version = "0.1.1"
1387 | source = "registry+https://github.com/rust-lang/crates.io-index"
1388 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
1389 | dependencies = [
1390 | "proc-macro2",
1391 | "quote",
1392 | "syn 2.0.29",
1393 | ]
1394 |
1395 | [[package]]
1396 | name = "openssl-probe"
1397 | version = "0.1.5"
1398 | source = "registry+https://github.com/rust-lang/crates.io-index"
1399 | checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
1400 |
1401 | [[package]]
1402 | name = "openssl-sys"
1403 | version = "0.9.91"
1404 | source = "registry+https://github.com/rust-lang/crates.io-index"
1405 | checksum = "866b5f16f90776b9bb8dc1e1802ac6f0513de3a7a7465867bfbc563dc737faac"
1406 | dependencies = [
1407 | "cc",
1408 | "libc",
1409 | "pkg-config",
1410 | "vcpkg",
1411 | ]
1412 |
1413 | [[package]]
1414 | name = "opentelemetry"
1415 | version = "0.19.0"
1416 | source = "registry+https://github.com/rust-lang/crates.io-index"
1417 | checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f"
1418 | dependencies = [
1419 | "opentelemetry_api",
1420 | "opentelemetry_sdk",
1421 | ]
1422 |
1423 | [[package]]
1424 | name = "opentelemetry-http"
1425 | version = "0.8.0"
1426 | source = "registry+https://github.com/rust-lang/crates.io-index"
1427 | checksum = "a819b71d6530c4297b49b3cae2939ab3a8cc1b9f382826a1bc29dd0ca3864906"
1428 | dependencies = [
1429 | "async-trait",
1430 | "bytes",
1431 | "http",
1432 | "opentelemetry_api",
1433 | ]
1434 |
1435 | [[package]]
1436 | name = "opentelemetry-otlp"
1437 | version = "0.12.0"
1438 | source = "registry+https://github.com/rust-lang/crates.io-index"
1439 | checksum = "8af72d59a4484654ea8eb183fea5ae4eb6a41d7ac3e3bae5f4d2a282a3a7d3ca"
1440 | dependencies = [
1441 | "async-trait",
1442 | "futures",
1443 | "futures-util",
1444 | "http",
1445 | "opentelemetry",
1446 | "opentelemetry-proto",
1447 | "prost",
1448 | "thiserror",
1449 | "tokio",
1450 | "tonic",
1451 | ]
1452 |
1453 | [[package]]
1454 | name = "opentelemetry-proto"
1455 | version = "0.2.0"
1456 | source = "registry+https://github.com/rust-lang/crates.io-index"
1457 | checksum = "045f8eea8c0fa19f7d48e7bc3128a39c2e5c533d5c61298c548dfefc1064474c"
1458 | dependencies = [
1459 | "futures",
1460 | "futures-util",
1461 | "opentelemetry",
1462 | "prost",
1463 | "tonic",
1464 | ]
1465 |
1466 | [[package]]
1467 | name = "opentelemetry_api"
1468 | version = "0.19.0"
1469 | source = "registry+https://github.com/rust-lang/crates.io-index"
1470 | checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2"
1471 | dependencies = [
1472 | "fnv",
1473 | "futures-channel",
1474 | "futures-util",
1475 | "indexmap 1.9.1",
1476 | "once_cell",
1477 | "pin-project-lite",
1478 | "thiserror",
1479 | "urlencoding",
1480 | ]
1481 |
1482 | [[package]]
1483 | name = "opentelemetry_sdk"
1484 | version = "0.19.0"
1485 | source = "registry+https://github.com/rust-lang/crates.io-index"
1486 | checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1"
1487 | dependencies = [
1488 | "async-trait",
1489 | "crossbeam-channel",
1490 | "dashmap",
1491 | "fnv",
1492 | "futures-channel",
1493 | "futures-executor",
1494 | "futures-util",
1495 | "once_cell",
1496 | "opentelemetry_api",
1497 | "percent-encoding",
1498 | "rand",
1499 | "thiserror",
1500 | "tokio",
1501 | "tokio-stream",
1502 | ]
1503 |
1504 | [[package]]
1505 | name = "overload"
1506 | version = "0.1.1"
1507 | source = "registry+https://github.com/rust-lang/crates.io-index"
1508 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
1509 |
1510 | [[package]]
1511 | name = "parking_lot"
1512 | version = "0.12.1"
1513 | source = "registry+https://github.com/rust-lang/crates.io-index"
1514 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
1515 | dependencies = [
1516 | "lock_api",
1517 | "parking_lot_core",
1518 | ]
1519 |
1520 | [[package]]
1521 | name = "parking_lot_core"
1522 | version = "0.9.8"
1523 | source = "registry+https://github.com/rust-lang/crates.io-index"
1524 | checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
1525 | dependencies = [
1526 | "cfg-if",
1527 | "libc",
1528 | "redox_syscall 0.3.5",
1529 | "smallvec",
1530 | "windows-targets",
1531 | ]
1532 |
1533 | [[package]]
1534 | name = "parse-zoneinfo"
1535 | version = "0.3.0"
1536 | source = "registry+https://github.com/rust-lang/crates.io-index"
1537 | checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
1538 | dependencies = [
1539 | "regex",
1540 | ]
1541 |
1542 | [[package]]
1543 | name = "password-hash"
1544 | version = "0.5.0"
1545 | source = "registry+https://github.com/rust-lang/crates.io-index"
1546 | checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166"
1547 | dependencies = [
1548 | "base64ct",
1549 | "rand_core",
1550 | "subtle",
1551 | ]
1552 |
1553 | [[package]]
1554 | name = "paste"
1555 | version = "1.0.9"
1556 | source = "registry+https://github.com/rust-lang/crates.io-index"
1557 | checksum = "b1de2e551fb905ac83f73f7aedf2f0cb4a0da7e35efa24a202a936269f1f18e1"
1558 |
1559 | [[package]]
1560 | name = "pbkdf2"
1561 | version = "0.12.2"
1562 | source = "registry+https://github.com/rust-lang/crates.io-index"
1563 | checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
1564 | dependencies = [
1565 | "digest",
1566 | "hmac",
1567 | "password-hash",
1568 | "sha2",
1569 | ]
1570 |
1571 | [[package]]
1572 | name = "pem"
1573 | version = "1.1.1"
1574 | source = "registry+https://github.com/rust-lang/crates.io-index"
1575 | checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
1576 | dependencies = [
1577 | "base64 0.13.0",
1578 | ]
1579 |
1580 | [[package]]
1581 | name = "pem-rfc7468"
1582 | version = "0.7.0"
1583 | source = "registry+https://github.com/rust-lang/crates.io-index"
1584 | checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
1585 | dependencies = [
1586 | "base64ct",
1587 | ]
1588 |
1589 | [[package]]
1590 | name = "percent-encoding"
1591 | version = "2.2.0"
1592 | source = "registry+https://github.com/rust-lang/crates.io-index"
1593 | checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
1594 |
1595 | [[package]]
1596 | name = "pest"
1597 | version = "2.7.2"
1598 | source = "registry+https://github.com/rust-lang/crates.io-index"
1599 | checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a"
1600 | dependencies = [
1601 | "thiserror",
1602 | "ucd-trie",
1603 | ]
1604 |
1605 | [[package]]
1606 | name = "pest_derive"
1607 | version = "2.7.2"
1608 | source = "registry+https://github.com/rust-lang/crates.io-index"
1609 | checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853"
1610 | dependencies = [
1611 | "pest",
1612 | "pest_generator",
1613 | ]
1614 |
1615 | [[package]]
1616 | name = "pest_generator"
1617 | version = "2.7.2"
1618 | source = "registry+https://github.com/rust-lang/crates.io-index"
1619 | checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929"
1620 | dependencies = [
1621 | "pest",
1622 | "pest_meta",
1623 | "proc-macro2",
1624 | "quote",
1625 | "syn 2.0.29",
1626 | ]
1627 |
1628 | [[package]]
1629 | name = "pest_meta"
1630 | version = "2.7.2"
1631 | source = "registry+https://github.com/rust-lang/crates.io-index"
1632 | checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48"
1633 | dependencies = [
1634 | "once_cell",
1635 | "pest",
1636 | "sha2",
1637 | ]
1638 |
1639 | [[package]]
1640 | name = "phf"
1641 | version = "0.10.1"
1642 | source = "registry+https://github.com/rust-lang/crates.io-index"
1643 | checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
1644 | dependencies = [
1645 | "phf_shared",
1646 | ]
1647 |
1648 | [[package]]
1649 | name = "phf_codegen"
1650 | version = "0.10.0"
1651 | source = "registry+https://github.com/rust-lang/crates.io-index"
1652 | checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
1653 | dependencies = [
1654 | "phf_generator",
1655 | "phf_shared",
1656 | ]
1657 |
1658 | [[package]]
1659 | name = "phf_generator"
1660 | version = "0.10.0"
1661 | source = "registry+https://github.com/rust-lang/crates.io-index"
1662 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
1663 | dependencies = [
1664 | "phf_shared",
1665 | "rand",
1666 | ]
1667 |
1668 | [[package]]
1669 | name = "phf_shared"
1670 | version = "0.10.0"
1671 | source = "registry+https://github.com/rust-lang/crates.io-index"
1672 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
1673 | dependencies = [
1674 | "siphasher",
1675 | "uncased",
1676 | ]
1677 |
1678 | [[package]]
1679 | name = "pin-project"
1680 | version = "1.0.12"
1681 | source = "registry+https://github.com/rust-lang/crates.io-index"
1682 | checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
1683 | dependencies = [
1684 | "pin-project-internal",
1685 | ]
1686 |
1687 | [[package]]
1688 | name = "pin-project-internal"
1689 | version = "1.0.12"
1690 | source = "registry+https://github.com/rust-lang/crates.io-index"
1691 | checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
1692 | dependencies = [
1693 | "proc-macro2",
1694 | "quote",
1695 | "syn 1.0.102",
1696 | ]
1697 |
1698 | [[package]]
1699 | name = "pin-project-lite"
1700 | version = "0.2.13"
1701 | source = "registry+https://github.com/rust-lang/crates.io-index"
1702 | checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
1703 |
1704 | [[package]]
1705 | name = "pin-utils"
1706 | version = "0.1.0"
1707 | source = "registry+https://github.com/rust-lang/crates.io-index"
1708 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1709 |
1710 | [[package]]
1711 | name = "pkcs1"
1712 | version = "0.7.5"
1713 | source = "registry+https://github.com/rust-lang/crates.io-index"
1714 | checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
1715 | dependencies = [
1716 | "der",
1717 | "pkcs8",
1718 | "spki",
1719 | ]
1720 |
1721 | [[package]]
1722 | name = "pkcs8"
1723 | version = "0.10.2"
1724 | source = "registry+https://github.com/rust-lang/crates.io-index"
1725 | checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
1726 | dependencies = [
1727 | "der",
1728 | "spki",
1729 | ]
1730 |
1731 | [[package]]
1732 | name = "pkg-config"
1733 | version = "0.3.25"
1734 | source = "registry+https://github.com/rust-lang/crates.io-index"
1735 | checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
1736 |
1737 | [[package]]
1738 | name = "ppv-lite86"
1739 | version = "0.2.16"
1740 | source = "registry+https://github.com/rust-lang/crates.io-index"
1741 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
1742 |
1743 | [[package]]
1744 | name = "proc-macro-error"
1745 | version = "1.0.4"
1746 | source = "registry+https://github.com/rust-lang/crates.io-index"
1747 | checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
1748 | dependencies = [
1749 | "proc-macro-error-attr",
1750 | "proc-macro2",
1751 | "quote",
1752 | "syn 1.0.102",
1753 | "version_check",
1754 | ]
1755 |
1756 | [[package]]
1757 | name = "proc-macro-error-attr"
1758 | version = "1.0.4"
1759 | source = "registry+https://github.com/rust-lang/crates.io-index"
1760 | checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
1761 | dependencies = [
1762 | "proc-macro2",
1763 | "quote",
1764 | "version_check",
1765 | ]
1766 |
1767 | [[package]]
1768 | name = "proc-macro2"
1769 | version = "1.0.66"
1770 | source = "registry+https://github.com/rust-lang/crates.io-index"
1771 | checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
1772 | dependencies = [
1773 | "unicode-ident",
1774 | ]
1775 |
1776 | [[package]]
1777 | name = "prost"
1778 | version = "0.11.9"
1779 | source = "registry+https://github.com/rust-lang/crates.io-index"
1780 | checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
1781 | dependencies = [
1782 | "bytes",
1783 | "prost-derive",
1784 | ]
1785 |
1786 | [[package]]
1787 | name = "prost-derive"
1788 | version = "0.11.9"
1789 | source = "registry+https://github.com/rust-lang/crates.io-index"
1790 | checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
1791 | dependencies = [
1792 | "anyhow",
1793 | "itertools",
1794 | "proc-macro2",
1795 | "quote",
1796 | "syn 1.0.102",
1797 | ]
1798 |
1799 | [[package]]
1800 | name = "prost-types"
1801 | version = "0.11.9"
1802 | source = "registry+https://github.com/rust-lang/crates.io-index"
1803 | checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
1804 | dependencies = [
1805 | "prost",
1806 | ]
1807 |
1808 | [[package]]
1809 | name = "quote"
1810 | version = "1.0.33"
1811 | source = "registry+https://github.com/rust-lang/crates.io-index"
1812 | checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
1813 | dependencies = [
1814 | "proc-macro2",
1815 | ]
1816 |
1817 | [[package]]
1818 | name = "rand"
1819 | version = "0.8.5"
1820 | source = "registry+https://github.com/rust-lang/crates.io-index"
1821 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1822 | dependencies = [
1823 | "libc",
1824 | "rand_chacha",
1825 | "rand_core",
1826 | ]
1827 |
1828 | [[package]]
1829 | name = "rand_chacha"
1830 | version = "0.3.1"
1831 | source = "registry+https://github.com/rust-lang/crates.io-index"
1832 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1833 | dependencies = [
1834 | "ppv-lite86",
1835 | "rand_core",
1836 | ]
1837 |
1838 | [[package]]
1839 | name = "rand_core"
1840 | version = "0.6.4"
1841 | source = "registry+https://github.com/rust-lang/crates.io-index"
1842 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1843 | dependencies = [
1844 | "getrandom",
1845 | ]
1846 |
1847 | [[package]]
1848 | name = "redox_syscall"
1849 | version = "0.2.16"
1850 | source = "registry+https://github.com/rust-lang/crates.io-index"
1851 | checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
1852 | dependencies = [
1853 | "bitflags 1.3.2",
1854 | ]
1855 |
1856 | [[package]]
1857 | name = "redox_syscall"
1858 | version = "0.3.5"
1859 | source = "registry+https://github.com/rust-lang/crates.io-index"
1860 | checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
1861 | dependencies = [
1862 | "bitflags 1.3.2",
1863 | ]
1864 |
1865 | [[package]]
1866 | name = "regex"
1867 | version = "1.9.3"
1868 | source = "registry+https://github.com/rust-lang/crates.io-index"
1869 | checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
1870 | dependencies = [
1871 | "aho-corasick",
1872 | "memchr",
1873 | "regex-automata 0.3.6",
1874 | "regex-syntax 0.7.4",
1875 | ]
1876 |
1877 | [[package]]
1878 | name = "regex-automata"
1879 | version = "0.1.10"
1880 | source = "registry+https://github.com/rust-lang/crates.io-index"
1881 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
1882 | dependencies = [
1883 | "regex-syntax 0.6.27",
1884 | ]
1885 |
1886 | [[package]]
1887 | name = "regex-automata"
1888 | version = "0.3.6"
1889 | source = "registry+https://github.com/rust-lang/crates.io-index"
1890 | checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
1891 | dependencies = [
1892 | "aho-corasick",
1893 | "memchr",
1894 | "regex-syntax 0.7.4",
1895 | ]
1896 |
1897 | [[package]]
1898 | name = "regex-syntax"
1899 | version = "0.6.27"
1900 | source = "registry+https://github.com/rust-lang/crates.io-index"
1901 | checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
1902 |
1903 | [[package]]
1904 | name = "regex-syntax"
1905 | version = "0.7.4"
1906 | source = "registry+https://github.com/rust-lang/crates.io-index"
1907 | checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
1908 |
1909 | [[package]]
1910 | name = "remove_dir_all"
1911 | version = "0.5.3"
1912 | source = "registry+https://github.com/rust-lang/crates.io-index"
1913 | checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
1914 | dependencies = [
1915 | "winapi",
1916 | ]
1917 |
1918 | [[package]]
1919 | name = "ring"
1920 | version = "0.16.20"
1921 | source = "registry+https://github.com/rust-lang/crates.io-index"
1922 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
1923 | dependencies = [
1924 | "cc",
1925 | "libc",
1926 | "once_cell",
1927 | "spin 0.5.2",
1928 | "untrusted",
1929 | "web-sys",
1930 | "winapi",
1931 | ]
1932 |
1933 | [[package]]
1934 | name = "rmp"
1935 | version = "0.8.12"
1936 | source = "registry+https://github.com/rust-lang/crates.io-index"
1937 | checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"
1938 | dependencies = [
1939 | "byteorder",
1940 | "num-traits",
1941 | "paste",
1942 | ]
1943 |
1944 | [[package]]
1945 | name = "rmp-serde"
1946 | version = "1.1.2"
1947 | source = "registry+https://github.com/rust-lang/crates.io-index"
1948 | checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"
1949 | dependencies = [
1950 | "byteorder",
1951 | "rmp",
1952 | "serde",
1953 | ]
1954 |
1955 | [[package]]
1956 | name = "rsa"
1957 | version = "0.9.2"
1958 | source = "registry+https://github.com/rust-lang/crates.io-index"
1959 | checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8"
1960 | dependencies = [
1961 | "byteorder",
1962 | "const-oid",
1963 | "digest",
1964 | "num-bigint-dig",
1965 | "num-integer",
1966 | "num-iter",
1967 | "num-traits",
1968 | "pkcs1",
1969 | "pkcs8",
1970 | "rand_core",
1971 | "signature",
1972 | "spki",
1973 | "subtle",
1974 | "zeroize",
1975 | ]
1976 |
1977 | [[package]]
1978 | name = "rustc-demangle"
1979 | version = "0.1.23"
1980 | source = "registry+https://github.com/rust-lang/crates.io-index"
1981 | checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
1982 |
1983 | [[package]]
1984 | name = "rustc-hash"
1985 | version = "1.1.0"
1986 | source = "registry+https://github.com/rust-lang/crates.io-index"
1987 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
1988 |
1989 | [[package]]
1990 | name = "rustls"
1991 | version = "0.21.6"
1992 | source = "registry+https://github.com/rust-lang/crates.io-index"
1993 | checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
1994 | dependencies = [
1995 | "ring",
1996 | "rustls-webpki",
1997 | "sct",
1998 | ]
1999 |
2000 | [[package]]
2001 | name = "rustls-pemfile"
2002 | version = "1.0.3"
2003 | source = "registry+https://github.com/rust-lang/crates.io-index"
2004 | checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
2005 | dependencies = [
2006 | "base64 0.21.2",
2007 | ]
2008 |
2009 | [[package]]
2010 | name = "rustls-webpki"
2011 | version = "0.101.4"
2012 | source = "registry+https://github.com/rust-lang/crates.io-index"
2013 | checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d"
2014 | dependencies = [
2015 | "ring",
2016 | "untrusted",
2017 | ]
2018 |
2019 | [[package]]
2020 | name = "rustrict"
2021 | version = "0.7.8"
2022 | source = "registry+https://github.com/rust-lang/crates.io-index"
2023 | checksum = "3a6b50905364a8bafca05898f2816b2f75e00d4aaf4c0c33a17fc898b9bc7153"
2024 | dependencies = [
2025 | "arrayvec",
2026 | "bitflags 1.3.2",
2027 | "doc-comment",
2028 | "finl_unicode",
2029 | "itertools",
2030 | "lazy_static",
2031 | "rustc-hash",
2032 | "strsim",
2033 | "unicode-normalization",
2034 | ]
2035 |
2036 | [[package]]
2037 | name = "rustversion"
2038 | version = "1.0.9"
2039 | source = "registry+https://github.com/rust-lang/crates.io-index"
2040 | checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
2041 |
2042 | [[package]]
2043 | name = "ryu"
2044 | version = "1.0.11"
2045 | source = "registry+https://github.com/rust-lang/crates.io-index"
2046 | checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
2047 |
2048 | [[package]]
2049 | name = "same-file"
2050 | version = "1.0.6"
2051 | source = "registry+https://github.com/rust-lang/crates.io-index"
2052 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2053 | dependencies = [
2054 | "winapi-util",
2055 | ]
2056 |
2057 | [[package]]
2058 | name = "schannel"
2059 | version = "0.1.22"
2060 | source = "registry+https://github.com/rust-lang/crates.io-index"
2061 | checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
2062 | dependencies = [
2063 | "windows-sys",
2064 | ]
2065 |
2066 | [[package]]
2067 | name = "scopeguard"
2068 | version = "1.1.0"
2069 | source = "registry+https://github.com/rust-lang/crates.io-index"
2070 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
2071 |
2072 | [[package]]
2073 | name = "scratch"
2074 | version = "1.0.2"
2075 | source = "registry+https://github.com/rust-lang/crates.io-index"
2076 | checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
2077 |
2078 | [[package]]
2079 | name = "sct"
2080 | version = "0.7.0"
2081 | source = "registry+https://github.com/rust-lang/crates.io-index"
2082 | checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
2083 | dependencies = [
2084 | "ring",
2085 | "untrusted",
2086 | ]
2087 |
2088 | [[package]]
2089 | name = "security-framework"
2090 | version = "2.9.2"
2091 | source = "registry+https://github.com/rust-lang/crates.io-index"
2092 | checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
2093 | dependencies = [
2094 | "bitflags 1.3.2",
2095 | "core-foundation",
2096 | "core-foundation-sys",
2097 | "libc",
2098 | "security-framework-sys",
2099 | ]
2100 |
2101 | [[package]]
2102 | name = "security-framework-sys"
2103 | version = "2.9.1"
2104 | source = "registry+https://github.com/rust-lang/crates.io-index"
2105 | checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
2106 | dependencies = [
2107 | "core-foundation-sys",
2108 | "libc",
2109 | ]
2110 |
2111 | [[package]]
2112 | name = "serde"
2113 | version = "1.0.186"
2114 | source = "registry+https://github.com/rust-lang/crates.io-index"
2115 | checksum = "9f5db24220c009de9bd45e69fb2938f4b6d2df856aa9304ce377b3180f83b7c1"
2116 | dependencies = [
2117 | "serde_derive",
2118 | ]
2119 |
2120 | [[package]]
2121 | name = "serde_derive"
2122 | version = "1.0.186"
2123 | source = "registry+https://github.com/rust-lang/crates.io-index"
2124 | checksum = "5ad697f7e0b65af4983a4ce8f56ed5b357e8d3c36651bf6a7e13639c17b8e670"
2125 | dependencies = [
2126 | "proc-macro2",
2127 | "quote",
2128 | "syn 2.0.29",
2129 | ]
2130 |
2131 | [[package]]
2132 | name = "serde_json"
2133 | version = "1.0.105"
2134 | source = "registry+https://github.com/rust-lang/crates.io-index"
2135 | checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
2136 | dependencies = [
2137 | "itoa",
2138 | "ryu",
2139 | "serde",
2140 | ]
2141 |
2142 | [[package]]
2143 | name = "serde_path_to_error"
2144 | version = "0.1.14"
2145 | source = "registry+https://github.com/rust-lang/crates.io-index"
2146 | checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
2147 | dependencies = [
2148 | "itoa",
2149 | "serde",
2150 | ]
2151 |
2152 | [[package]]
2153 | name = "serde_urlencoded"
2154 | version = "0.7.1"
2155 | source = "registry+https://github.com/rust-lang/crates.io-index"
2156 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
2157 | dependencies = [
2158 | "form_urlencoded",
2159 | "itoa",
2160 | "ryu",
2161 | "serde",
2162 | ]
2163 |
2164 | [[package]]
2165 | name = "sha1"
2166 | version = "0.10.5"
2167 | source = "registry+https://github.com/rust-lang/crates.io-index"
2168 | checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
2169 | dependencies = [
2170 | "cfg-if",
2171 | "cpufeatures",
2172 | "digest",
2173 | ]
2174 |
2175 | [[package]]
2176 | name = "sha2"
2177 | version = "0.10.6"
2178 | source = "registry+https://github.com/rust-lang/crates.io-index"
2179 | checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
2180 | dependencies = [
2181 | "cfg-if",
2182 | "cpufeatures",
2183 | "digest",
2184 | ]
2185 |
2186 | [[package]]
2187 | name = "sharded-slab"
2188 | version = "0.1.4"
2189 | source = "registry+https://github.com/rust-lang/crates.io-index"
2190 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
2191 | dependencies = [
2192 | "lazy_static",
2193 | ]
2194 |
2195 | [[package]]
2196 | name = "shuttle-axum"
2197 | version = "0.24.0"
2198 | source = "registry+https://github.com/rust-lang/crates.io-index"
2199 | checksum = "0f23bb81553e64db9af6d1c3002a2e1c80b9b448b8377ccdcaaba5b9cc413007"
2200 | dependencies = [
2201 | "axum",
2202 | "shuttle-runtime",
2203 | ]
2204 |
2205 | [[package]]
2206 | name = "shuttle-codegen"
2207 | version = "0.24.0"
2208 | source = "registry+https://github.com/rust-lang/crates.io-index"
2209 | checksum = "c98aa9ad7b2058e8c9f5a2756503966aec238cf7ec31093a437f468e6242f176"
2210 | dependencies = [
2211 | "proc-macro-error",
2212 | "proc-macro2",
2213 | "quote",
2214 | "syn 2.0.29",
2215 | ]
2216 |
2217 | [[package]]
2218 | name = "shuttle-common"
2219 | version = "0.24.0"
2220 | source = "registry+https://github.com/rust-lang/crates.io-index"
2221 | checksum = "c23f31b5227a86de62657dde1130af96b9536bdd9708a19b66d45698a81364fd"
2222 | dependencies = [
2223 | "anyhow",
2224 | "async-trait",
2225 | "axum",
2226 | "bytes",
2227 | "chrono",
2228 | "headers",
2229 | "http",
2230 | "http-body",
2231 | "http-serde",
2232 | "hyper",
2233 | "jsonwebtoken",
2234 | "once_cell",
2235 | "opentelemetry",
2236 | "opentelemetry-http",
2237 | "opentelemetry-otlp",
2238 | "pin-project",
2239 | "prost-types",
2240 | "rmp-serde",
2241 | "rustrict",
2242 | "serde",
2243 | "serde_json",
2244 | "strum",
2245 | "thiserror",
2246 | "tower",
2247 | "tower-http",
2248 | "tracing",
2249 | "tracing-opentelemetry",
2250 | "tracing-subscriber",
2251 | "ttl_cache",
2252 | "uuid",
2253 | ]
2254 |
2255 | [[package]]
2256 | name = "shuttle-proto"
2257 | version = "0.24.0"
2258 | source = "registry+https://github.com/rust-lang/crates.io-index"
2259 | checksum = "2ded5e27c6281d14d66f3970302c878472e82bce6c28e04e9e664c8eaa086054"
2260 | dependencies = [
2261 | "anyhow",
2262 | "chrono",
2263 | "home",
2264 | "prost",
2265 | "prost-types",
2266 | "serde_json",
2267 | "shuttle-common",
2268 | "tokio",
2269 | "tonic",
2270 | "tower",
2271 | "tracing",
2272 | ]
2273 |
2274 | [[package]]
2275 | name = "shuttle-runtime"
2276 | version = "0.24.0"
2277 | source = "registry+https://github.com/rust-lang/crates.io-index"
2278 | checksum = "4f734c5310cfed64c86bddc32ae6c7e0cd6f773ecaf2a93370690cc13f0e7d8a"
2279 | dependencies = [
2280 | "anyhow",
2281 | "async-trait",
2282 | "chrono",
2283 | "prost-types",
2284 | "serde",
2285 | "serde_json",
2286 | "shuttle-codegen",
2287 | "shuttle-common",
2288 | "shuttle-proto",
2289 | "shuttle-service",
2290 | "strfmt",
2291 | "thiserror",
2292 | "tokio",
2293 | "tokio-stream",
2294 | "tonic",
2295 | "tower",
2296 | "tracing",
2297 | "tracing-subscriber",
2298 | ]
2299 |
2300 | [[package]]
2301 | name = "shuttle-service"
2302 | version = "0.24.0"
2303 | source = "registry+https://github.com/rust-lang/crates.io-index"
2304 | checksum = "9853b0443da1b2040d6f46368872584c86aaad73219c60b3506251c4e77bbc9e"
2305 | dependencies = [
2306 | "anyhow",
2307 | "async-trait",
2308 | "serde",
2309 | "shuttle-common",
2310 | "strfmt",
2311 | "thiserror",
2312 | ]
2313 |
2314 | [[package]]
2315 | name = "shuttle-shared-db"
2316 | version = "0.24.0"
2317 | source = "registry+https://github.com/rust-lang/crates.io-index"
2318 | checksum = "420bbe668adc7f1709083a5a15fc8350fee4da9217446509837365eb0f307920"
2319 | dependencies = [
2320 | "async-trait",
2321 | "serde",
2322 | "shuttle-service",
2323 | "sqlx",
2324 | ]
2325 |
2326 | [[package]]
2327 | name = "signal-hook-registry"
2328 | version = "1.4.1"
2329 | source = "registry+https://github.com/rust-lang/crates.io-index"
2330 | checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
2331 | dependencies = [
2332 | "libc",
2333 | ]
2334 |
2335 | [[package]]
2336 | name = "signature"
2337 | version = "2.1.0"
2338 | source = "registry+https://github.com/rust-lang/crates.io-index"
2339 | checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
2340 | dependencies = [
2341 | "digest",
2342 | "rand_core",
2343 | ]
2344 |
2345 | [[package]]
2346 | name = "simple_asn1"
2347 | version = "0.6.2"
2348 | source = "registry+https://github.com/rust-lang/crates.io-index"
2349 | checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
2350 | dependencies = [
2351 | "num-bigint",
2352 | "num-traits",
2353 | "thiserror",
2354 | "time",
2355 | ]
2356 |
2357 | [[package]]
2358 | name = "siphasher"
2359 | version = "0.3.11"
2360 | source = "registry+https://github.com/rust-lang/crates.io-index"
2361 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
2362 |
2363 | [[package]]
2364 | name = "slab"
2365 | version = "0.4.7"
2366 | source = "registry+https://github.com/rust-lang/crates.io-index"
2367 | checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
2368 | dependencies = [
2369 | "autocfg",
2370 | ]
2371 |
2372 | [[package]]
2373 | name = "slug"
2374 | version = "0.1.4"
2375 | source = "registry+https://github.com/rust-lang/crates.io-index"
2376 | checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373"
2377 | dependencies = [
2378 | "deunicode",
2379 | ]
2380 |
2381 | [[package]]
2382 | name = "smallvec"
2383 | version = "1.10.0"
2384 | source = "registry+https://github.com/rust-lang/crates.io-index"
2385 | checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
2386 |
2387 | [[package]]
2388 | name = "socket2"
2389 | version = "0.4.7"
2390 | source = "registry+https://github.com/rust-lang/crates.io-index"
2391 | checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
2392 | dependencies = [
2393 | "libc",
2394 | "winapi",
2395 | ]
2396 |
2397 | [[package]]
2398 | name = "socket2"
2399 | version = "0.5.3"
2400 | source = "registry+https://github.com/rust-lang/crates.io-index"
2401 | checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
2402 | dependencies = [
2403 | "libc",
2404 | "windows-sys",
2405 | ]
2406 |
2407 | [[package]]
2408 | name = "spin"
2409 | version = "0.5.2"
2410 | source = "registry+https://github.com/rust-lang/crates.io-index"
2411 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
2412 |
2413 | [[package]]
2414 | name = "spin"
2415 | version = "0.9.4"
2416 | source = "registry+https://github.com/rust-lang/crates.io-index"
2417 | checksum = "7f6002a767bff9e83f8eeecf883ecb8011875a21ae8da43bffb817a57e78cc09"
2418 | dependencies = [
2419 | "lock_api",
2420 | ]
2421 |
2422 | [[package]]
2423 | name = "spki"
2424 | version = "0.7.2"
2425 | source = "registry+https://github.com/rust-lang/crates.io-index"
2426 | checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
2427 | dependencies = [
2428 | "base64ct",
2429 | "der",
2430 | ]
2431 |
2432 | [[package]]
2433 | name = "sqlformat"
2434 | version = "0.2.0"
2435 | source = "registry+https://github.com/rust-lang/crates.io-index"
2436 | checksum = "f87e292b4291f154971a43c3774364e2cbcaec599d3f5bf6fa9d122885dbc38a"
2437 | dependencies = [
2438 | "itertools",
2439 | "nom",
2440 | "unicode_categories",
2441 | ]
2442 |
2443 | [[package]]
2444 | name = "sqlx"
2445 | version = "0.7.1"
2446 | source = "registry+https://github.com/rust-lang/crates.io-index"
2447 | checksum = "8e58421b6bc416714d5115a2ca953718f6c621a51b68e4f4922aea5a4391a721"
2448 | dependencies = [
2449 | "sqlx-core",
2450 | "sqlx-macros",
2451 | "sqlx-mysql",
2452 | "sqlx-postgres",
2453 | "sqlx-sqlite",
2454 | ]
2455 |
2456 | [[package]]
2457 | name = "sqlx-core"
2458 | version = "0.7.1"
2459 | source = "registry+https://github.com/rust-lang/crates.io-index"
2460 | checksum = "dd4cef4251aabbae751a3710927945901ee1d97ee96d757f6880ebb9a79bfd53"
2461 | dependencies = [
2462 | "ahash 0.8.3",
2463 | "atoi",
2464 | "byteorder",
2465 | "bytes",
2466 | "crc",
2467 | "crossbeam-queue",
2468 | "dotenvy",
2469 | "either",
2470 | "event-listener",
2471 | "futures-channel",
2472 | "futures-core",
2473 | "futures-intrusive",
2474 | "futures-io",
2475 | "futures-util",
2476 | "hashlink",
2477 | "hex",
2478 | "indexmap 2.0.0",
2479 | "log",
2480 | "memchr",
2481 | "native-tls",
2482 | "once_cell",
2483 | "paste",
2484 | "percent-encoding",
2485 | "rustls",
2486 | "rustls-pemfile",
2487 | "serde",
2488 | "serde_json",
2489 | "sha2",
2490 | "smallvec",
2491 | "sqlformat",
2492 | "thiserror",
2493 | "tokio",
2494 | "tokio-stream",
2495 | "tracing",
2496 | "url",
2497 | "webpki-roots",
2498 | ]
2499 |
2500 | [[package]]
2501 | name = "sqlx-macros"
2502 | version = "0.7.1"
2503 | source = "registry+https://github.com/rust-lang/crates.io-index"
2504 | checksum = "208e3165167afd7f3881b16c1ef3f2af69fa75980897aac8874a0696516d12c2"
2505 | dependencies = [
2506 | "proc-macro2",
2507 | "quote",
2508 | "sqlx-core",
2509 | "sqlx-macros-core",
2510 | "syn 1.0.102",
2511 | ]
2512 |
2513 | [[package]]
2514 | name = "sqlx-macros-core"
2515 | version = "0.7.1"
2516 | source = "registry+https://github.com/rust-lang/crates.io-index"
2517 | checksum = "8a4a8336d278c62231d87f24e8a7a74898156e34c1c18942857be2acb29c7dfc"
2518 | dependencies = [
2519 | "dotenvy",
2520 | "either",
2521 | "heck",
2522 | "hex",
2523 | "once_cell",
2524 | "proc-macro2",
2525 | "quote",
2526 | "serde",
2527 | "serde_json",
2528 | "sha2",
2529 | "sqlx-core",
2530 | "sqlx-mysql",
2531 | "sqlx-postgres",
2532 | "sqlx-sqlite",
2533 | "syn 1.0.102",
2534 | "tempfile",
2535 | "tokio",
2536 | "url",
2537 | ]
2538 |
2539 | [[package]]
2540 | name = "sqlx-mysql"
2541 | version = "0.7.1"
2542 | source = "registry+https://github.com/rust-lang/crates.io-index"
2543 | checksum = "8ca69bf415b93b60b80dc8fda3cb4ef52b2336614d8da2de5456cc942a110482"
2544 | dependencies = [
2545 | "atoi",
2546 | "base64 0.21.2",
2547 | "bitflags 2.4.0",
2548 | "byteorder",
2549 | "bytes",
2550 | "crc",
2551 | "digest",
2552 | "dotenvy",
2553 | "either",
2554 | "futures-channel",
2555 | "futures-core",
2556 | "futures-io",
2557 | "futures-util",
2558 | "generic-array",
2559 | "hex",
2560 | "hkdf",
2561 | "hmac",
2562 | "itoa",
2563 | "log",
2564 | "md-5",
2565 | "memchr",
2566 | "once_cell",
2567 | "percent-encoding",
2568 | "rand",
2569 | "rsa",
2570 | "serde",
2571 | "sha1",
2572 | "sha2",
2573 | "smallvec",
2574 | "sqlx-core",
2575 | "stringprep",
2576 | "thiserror",
2577 | "tracing",
2578 | "whoami",
2579 | ]
2580 |
2581 | [[package]]
2582 | name = "sqlx-postgres"
2583 | version = "0.7.1"
2584 | source = "registry+https://github.com/rust-lang/crates.io-index"
2585 | checksum = "a0db2df1b8731c3651e204629dd55e52adbae0462fa1bdcbed56a2302c18181e"
2586 | dependencies = [
2587 | "atoi",
2588 | "base64 0.21.2",
2589 | "bitflags 2.4.0",
2590 | "byteorder",
2591 | "crc",
2592 | "dotenvy",
2593 | "etcetera",
2594 | "futures-channel",
2595 | "futures-core",
2596 | "futures-io",
2597 | "futures-util",
2598 | "hex",
2599 | "hkdf",
2600 | "hmac",
2601 | "home",
2602 | "itoa",
2603 | "log",
2604 | "md-5",
2605 | "memchr",
2606 | "once_cell",
2607 | "rand",
2608 | "serde",
2609 | "serde_json",
2610 | "sha1",
2611 | "sha2",
2612 | "smallvec",
2613 | "sqlx-core",
2614 | "stringprep",
2615 | "thiserror",
2616 | "tracing",
2617 | "whoami",
2618 | ]
2619 |
2620 | [[package]]
2621 | name = "sqlx-sqlite"
2622 | version = "0.7.1"
2623 | source = "registry+https://github.com/rust-lang/crates.io-index"
2624 | checksum = "be4c21bf34c7cae5b283efb3ac1bcc7670df7561124dc2f8bdc0b59be40f79a2"
2625 | dependencies = [
2626 | "atoi",
2627 | "flume",
2628 | "futures-channel",
2629 | "futures-core",
2630 | "futures-executor",
2631 | "futures-intrusive",
2632 | "futures-util",
2633 | "libsqlite3-sys",
2634 | "log",
2635 | "percent-encoding",
2636 | "serde",
2637 | "sqlx-core",
2638 | "tracing",
2639 | "url",
2640 | ]
2641 |
2642 | [[package]]
2643 | name = "strfmt"
2644 | version = "0.2.4"
2645 | source = "registry+https://github.com/rust-lang/crates.io-index"
2646 | checksum = "7a8348af2d9fc3258c8733b8d9d8db2e56f54b2363a4b5b81585c7875ed65e65"
2647 |
2648 | [[package]]
2649 | name = "stringprep"
2650 | version = "0.1.2"
2651 | source = "registry+https://github.com/rust-lang/crates.io-index"
2652 | checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
2653 | dependencies = [
2654 | "unicode-bidi",
2655 | "unicode-normalization",
2656 | ]
2657 |
2658 | [[package]]
2659 | name = "strsim"
2660 | version = "0.10.0"
2661 | source = "registry+https://github.com/rust-lang/crates.io-index"
2662 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
2663 |
2664 | [[package]]
2665 | name = "strum"
2666 | version = "0.24.1"
2667 | source = "registry+https://github.com/rust-lang/crates.io-index"
2668 | checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
2669 | dependencies = [
2670 | "strum_macros",
2671 | ]
2672 |
2673 | [[package]]
2674 | name = "strum_macros"
2675 | version = "0.24.3"
2676 | source = "registry+https://github.com/rust-lang/crates.io-index"
2677 | checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
2678 | dependencies = [
2679 | "heck",
2680 | "proc-macro2",
2681 | "quote",
2682 | "rustversion",
2683 | "syn 1.0.102",
2684 | ]
2685 |
2686 | [[package]]
2687 | name = "subtle"
2688 | version = "2.4.1"
2689 | source = "registry+https://github.com/rust-lang/crates.io-index"
2690 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
2691 |
2692 | [[package]]
2693 | name = "syn"
2694 | version = "1.0.102"
2695 | source = "registry+https://github.com/rust-lang/crates.io-index"
2696 | checksum = "3fcd952facd492f9be3ef0d0b7032a6e442ee9b361d4acc2b1d0c4aaa5f613a1"
2697 | dependencies = [
2698 | "proc-macro2",
2699 | "quote",
2700 | "unicode-ident",
2701 | ]
2702 |
2703 | [[package]]
2704 | name = "syn"
2705 | version = "2.0.29"
2706 | source = "registry+https://github.com/rust-lang/crates.io-index"
2707 | checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
2708 | dependencies = [
2709 | "proc-macro2",
2710 | "quote",
2711 | "unicode-ident",
2712 | ]
2713 |
2714 | [[package]]
2715 | name = "sync_wrapper"
2716 | version = "0.1.1"
2717 | source = "registry+https://github.com/rust-lang/crates.io-index"
2718 | checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
2719 |
2720 | [[package]]
2721 | name = "tecdev"
2722 | version = "0.1.0"
2723 | dependencies = [
2724 | "axum",
2725 | "cookie",
2726 | "http",
2727 | "http-body",
2728 | "pbkdf2",
2729 | "rand_chacha",
2730 | "rand_core",
2731 | "shuttle-axum",
2732 | "shuttle-runtime",
2733 | "shuttle-service",
2734 | "shuttle-shared-db",
2735 | "sqlx",
2736 | "tera",
2737 | "tokio",
2738 | ]
2739 |
2740 | [[package]]
2741 | name = "tempfile"
2742 | version = "3.3.0"
2743 | source = "registry+https://github.com/rust-lang/crates.io-index"
2744 | checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
2745 | dependencies = [
2746 | "cfg-if",
2747 | "fastrand",
2748 | "libc",
2749 | "redox_syscall 0.2.16",
2750 | "remove_dir_all",
2751 | "winapi",
2752 | ]
2753 |
2754 | [[package]]
2755 | name = "tera"
2756 | version = "1.19.0"
2757 | source = "registry+https://github.com/rust-lang/crates.io-index"
2758 | checksum = "a5ab29bb4f3e256ae6ad5c3e2775aa1f8829f2c0c101fc407bfd3a6df15c60c5"
2759 | dependencies = [
2760 | "chrono",
2761 | "chrono-tz",
2762 | "globwalk",
2763 | "humansize",
2764 | "lazy_static",
2765 | "percent-encoding",
2766 | "pest",
2767 | "pest_derive",
2768 | "rand",
2769 | "regex",
2770 | "serde",
2771 | "serde_json",
2772 | "slug",
2773 | "thread_local",
2774 | "unic-segment",
2775 | ]
2776 |
2777 | [[package]]
2778 | name = "termcolor"
2779 | version = "1.1.3"
2780 | source = "registry+https://github.com/rust-lang/crates.io-index"
2781 | checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
2782 | dependencies = [
2783 | "winapi-util",
2784 | ]
2785 |
2786 | [[package]]
2787 | name = "thiserror"
2788 | version = "1.0.37"
2789 | source = "registry+https://github.com/rust-lang/crates.io-index"
2790 | checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
2791 | dependencies = [
2792 | "thiserror-impl",
2793 | ]
2794 |
2795 | [[package]]
2796 | name = "thiserror-impl"
2797 | version = "1.0.37"
2798 | source = "registry+https://github.com/rust-lang/crates.io-index"
2799 | checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
2800 | dependencies = [
2801 | "proc-macro2",
2802 | "quote",
2803 | "syn 1.0.102",
2804 | ]
2805 |
2806 | [[package]]
2807 | name = "thread_local"
2808 | version = "1.1.4"
2809 | source = "registry+https://github.com/rust-lang/crates.io-index"
2810 | checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
2811 | dependencies = [
2812 | "once_cell",
2813 | ]
2814 |
2815 | [[package]]
2816 | name = "time"
2817 | version = "0.3.15"
2818 | source = "registry+https://github.com/rust-lang/crates.io-index"
2819 | checksum = "d634a985c4d4238ec39cacaed2e7ae552fbd3c476b552c1deac3021b7d7eaf0c"
2820 | dependencies = [
2821 | "itoa",
2822 | "libc",
2823 | "num_threads",
2824 | "time-macros",
2825 | ]
2826 |
2827 | [[package]]
2828 | name = "time-macros"
2829 | version = "0.2.4"
2830 | source = "registry+https://github.com/rust-lang/crates.io-index"
2831 | checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
2832 |
2833 | [[package]]
2834 | name = "tinyvec"
2835 | version = "1.6.0"
2836 | source = "registry+https://github.com/rust-lang/crates.io-index"
2837 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
2838 | dependencies = [
2839 | "tinyvec_macros",
2840 | ]
2841 |
2842 | [[package]]
2843 | name = "tinyvec_macros"
2844 | version = "0.1.0"
2845 | source = "registry+https://github.com/rust-lang/crates.io-index"
2846 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
2847 |
2848 | [[package]]
2849 | name = "tokio"
2850 | version = "1.32.0"
2851 | source = "registry+https://github.com/rust-lang/crates.io-index"
2852 | checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
2853 | dependencies = [
2854 | "backtrace",
2855 | "bytes",
2856 | "libc",
2857 | "mio",
2858 | "num_cpus",
2859 | "parking_lot",
2860 | "pin-project-lite",
2861 | "signal-hook-registry",
2862 | "socket2 0.5.3",
2863 | "tokio-macros",
2864 | "windows-sys",
2865 | ]
2866 |
2867 | [[package]]
2868 | name = "tokio-io-timeout"
2869 | version = "1.2.0"
2870 | source = "registry+https://github.com/rust-lang/crates.io-index"
2871 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
2872 | dependencies = [
2873 | "pin-project-lite",
2874 | "tokio",
2875 | ]
2876 |
2877 | [[package]]
2878 | name = "tokio-macros"
2879 | version = "2.1.0"
2880 | source = "registry+https://github.com/rust-lang/crates.io-index"
2881 | checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
2882 | dependencies = [
2883 | "proc-macro2",
2884 | "quote",
2885 | "syn 2.0.29",
2886 | ]
2887 |
2888 | [[package]]
2889 | name = "tokio-stream"
2890 | version = "0.1.11"
2891 | source = "registry+https://github.com/rust-lang/crates.io-index"
2892 | checksum = "d660770404473ccd7bc9f8b28494a811bc18542b915c0855c51e8f419d5223ce"
2893 | dependencies = [
2894 | "futures-core",
2895 | "pin-project-lite",
2896 | "tokio",
2897 | ]
2898 |
2899 | [[package]]
2900 | name = "tokio-util"
2901 | version = "0.7.8"
2902 | source = "registry+https://github.com/rust-lang/crates.io-index"
2903 | checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
2904 | dependencies = [
2905 | "bytes",
2906 | "futures-core",
2907 | "futures-sink",
2908 | "pin-project-lite",
2909 | "tokio",
2910 | "tracing",
2911 | ]
2912 |
2913 | [[package]]
2914 | name = "tonic"
2915 | version = "0.8.3"
2916 | source = "registry+https://github.com/rust-lang/crates.io-index"
2917 | checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb"
2918 | dependencies = [
2919 | "async-stream",
2920 | "async-trait",
2921 | "axum",
2922 | "base64 0.13.0",
2923 | "bytes",
2924 | "futures-core",
2925 | "futures-util",
2926 | "h2",
2927 | "http",
2928 | "http-body",
2929 | "hyper",
2930 | "hyper-timeout",
2931 | "percent-encoding",
2932 | "pin-project",
2933 | "prost",
2934 | "prost-derive",
2935 | "tokio",
2936 | "tokio-stream",
2937 | "tokio-util",
2938 | "tower",
2939 | "tower-layer",
2940 | "tower-service",
2941 | "tracing",
2942 | "tracing-futures",
2943 | ]
2944 |
2945 | [[package]]
2946 | name = "tower"
2947 | version = "0.4.13"
2948 | source = "registry+https://github.com/rust-lang/crates.io-index"
2949 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
2950 | dependencies = [
2951 | "futures-core",
2952 | "futures-util",
2953 | "indexmap 1.9.1",
2954 | "pin-project",
2955 | "pin-project-lite",
2956 | "rand",
2957 | "slab",
2958 | "tokio",
2959 | "tokio-util",
2960 | "tower-layer",
2961 | "tower-service",
2962 | "tracing",
2963 | ]
2964 |
2965 | [[package]]
2966 | name = "tower-http"
2967 | version = "0.4.3"
2968 | source = "registry+https://github.com/rust-lang/crates.io-index"
2969 | checksum = "55ae70283aba8d2a8b411c695c437fe25b8b5e44e23e780662002fc72fb47a82"
2970 | dependencies = [
2971 | "bitflags 2.4.0",
2972 | "bytes",
2973 | "futures-core",
2974 | "futures-util",
2975 | "http",
2976 | "http-body",
2977 | "http-range-header",
2978 | "pin-project-lite",
2979 | "tower-layer",
2980 | "tower-service",
2981 | "tracing",
2982 | ]
2983 |
2984 | [[package]]
2985 | name = "tower-layer"
2986 | version = "0.3.2"
2987 | source = "registry+https://github.com/rust-lang/crates.io-index"
2988 | checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
2989 |
2990 | [[package]]
2991 | name = "tower-service"
2992 | version = "0.3.2"
2993 | source = "registry+https://github.com/rust-lang/crates.io-index"
2994 | checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
2995 |
2996 | [[package]]
2997 | name = "tracing"
2998 | version = "0.1.37"
2999 | source = "registry+https://github.com/rust-lang/crates.io-index"
3000 | checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
3001 | dependencies = [
3002 | "cfg-if",
3003 | "log",
3004 | "pin-project-lite",
3005 | "tracing-attributes",
3006 | "tracing-core",
3007 | ]
3008 |
3009 | [[package]]
3010 | name = "tracing-attributes"
3011 | version = "0.1.23"
3012 | source = "registry+https://github.com/rust-lang/crates.io-index"
3013 | checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
3014 | dependencies = [
3015 | "proc-macro2",
3016 | "quote",
3017 | "syn 1.0.102",
3018 | ]
3019 |
3020 | [[package]]
3021 | name = "tracing-core"
3022 | version = "0.1.30"
3023 | source = "registry+https://github.com/rust-lang/crates.io-index"
3024 | checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
3025 | dependencies = [
3026 | "once_cell",
3027 | "valuable",
3028 | ]
3029 |
3030 | [[package]]
3031 | name = "tracing-futures"
3032 | version = "0.2.5"
3033 | source = "registry+https://github.com/rust-lang/crates.io-index"
3034 | checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
3035 | dependencies = [
3036 | "pin-project",
3037 | "tracing",
3038 | ]
3039 |
3040 | [[package]]
3041 | name = "tracing-log"
3042 | version = "0.1.3"
3043 | source = "registry+https://github.com/rust-lang/crates.io-index"
3044 | checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
3045 | dependencies = [
3046 | "lazy_static",
3047 | "log",
3048 | "tracing-core",
3049 | ]
3050 |
3051 | [[package]]
3052 | name = "tracing-opentelemetry"
3053 | version = "0.19.0"
3054 | source = "registry+https://github.com/rust-lang/crates.io-index"
3055 | checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600"
3056 | dependencies = [
3057 | "once_cell",
3058 | "opentelemetry",
3059 | "tracing",
3060 | "tracing-core",
3061 | "tracing-log",
3062 | "tracing-subscriber",
3063 | ]
3064 |
3065 | [[package]]
3066 | name = "tracing-subscriber"
3067 | version = "0.3.16"
3068 | source = "registry+https://github.com/rust-lang/crates.io-index"
3069 | checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
3070 | dependencies = [
3071 | "matchers",
3072 | "nu-ansi-term",
3073 | "once_cell",
3074 | "regex",
3075 | "sharded-slab",
3076 | "smallvec",
3077 | "thread_local",
3078 | "tracing",
3079 | "tracing-core",
3080 | "tracing-log",
3081 | ]
3082 |
3083 | [[package]]
3084 | name = "try-lock"
3085 | version = "0.2.3"
3086 | source = "registry+https://github.com/rust-lang/crates.io-index"
3087 | checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
3088 |
3089 | [[package]]
3090 | name = "ttl_cache"
3091 | version = "0.5.1"
3092 | source = "registry+https://github.com/rust-lang/crates.io-index"
3093 | checksum = "4189890526f0168710b6ee65ceaedf1460c48a14318ceec933cb26baa492096a"
3094 | dependencies = [
3095 | "linked-hash-map",
3096 | ]
3097 |
3098 | [[package]]
3099 | name = "typenum"
3100 | version = "1.15.0"
3101 | source = "registry+https://github.com/rust-lang/crates.io-index"
3102 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
3103 |
3104 | [[package]]
3105 | name = "ucd-trie"
3106 | version = "0.1.6"
3107 | source = "registry+https://github.com/rust-lang/crates.io-index"
3108 | checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
3109 |
3110 | [[package]]
3111 | name = "uncased"
3112 | version = "0.9.9"
3113 | source = "registry+https://github.com/rust-lang/crates.io-index"
3114 | checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68"
3115 | dependencies = [
3116 | "version_check",
3117 | ]
3118 |
3119 | [[package]]
3120 | name = "unic-char-property"
3121 | version = "0.9.0"
3122 | source = "registry+https://github.com/rust-lang/crates.io-index"
3123 | checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
3124 | dependencies = [
3125 | "unic-char-range",
3126 | ]
3127 |
3128 | [[package]]
3129 | name = "unic-char-range"
3130 | version = "0.9.0"
3131 | source = "registry+https://github.com/rust-lang/crates.io-index"
3132 | checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
3133 |
3134 | [[package]]
3135 | name = "unic-common"
3136 | version = "0.9.0"
3137 | source = "registry+https://github.com/rust-lang/crates.io-index"
3138 | checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
3139 |
3140 | [[package]]
3141 | name = "unic-segment"
3142 | version = "0.9.0"
3143 | source = "registry+https://github.com/rust-lang/crates.io-index"
3144 | checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
3145 | dependencies = [
3146 | "unic-ucd-segment",
3147 | ]
3148 |
3149 | [[package]]
3150 | name = "unic-ucd-segment"
3151 | version = "0.9.0"
3152 | source = "registry+https://github.com/rust-lang/crates.io-index"
3153 | checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
3154 | dependencies = [
3155 | "unic-char-property",
3156 | "unic-char-range",
3157 | "unic-ucd-version",
3158 | ]
3159 |
3160 | [[package]]
3161 | name = "unic-ucd-version"
3162 | version = "0.9.0"
3163 | source = "registry+https://github.com/rust-lang/crates.io-index"
3164 | checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
3165 | dependencies = [
3166 | "unic-common",
3167 | ]
3168 |
3169 | [[package]]
3170 | name = "unicode-bidi"
3171 | version = "0.3.8"
3172 | source = "registry+https://github.com/rust-lang/crates.io-index"
3173 | checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
3174 |
3175 | [[package]]
3176 | name = "unicode-ident"
3177 | version = "1.0.5"
3178 | source = "registry+https://github.com/rust-lang/crates.io-index"
3179 | checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
3180 |
3181 | [[package]]
3182 | name = "unicode-normalization"
3183 | version = "0.1.22"
3184 | source = "registry+https://github.com/rust-lang/crates.io-index"
3185 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
3186 | dependencies = [
3187 | "tinyvec",
3188 | ]
3189 |
3190 | [[package]]
3191 | name = "unicode-segmentation"
3192 | version = "1.10.0"
3193 | source = "registry+https://github.com/rust-lang/crates.io-index"
3194 | checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
3195 |
3196 | [[package]]
3197 | name = "unicode-width"
3198 | version = "0.1.10"
3199 | source = "registry+https://github.com/rust-lang/crates.io-index"
3200 | checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
3201 |
3202 | [[package]]
3203 | name = "unicode_categories"
3204 | version = "0.1.1"
3205 | source = "registry+https://github.com/rust-lang/crates.io-index"
3206 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
3207 |
3208 | [[package]]
3209 | name = "untrusted"
3210 | version = "0.7.1"
3211 | source = "registry+https://github.com/rust-lang/crates.io-index"
3212 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
3213 |
3214 | [[package]]
3215 | name = "url"
3216 | version = "2.3.1"
3217 | source = "registry+https://github.com/rust-lang/crates.io-index"
3218 | checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
3219 | dependencies = [
3220 | "form_urlencoded",
3221 | "idna",
3222 | "percent-encoding",
3223 | ]
3224 |
3225 | [[package]]
3226 | name = "urlencoding"
3227 | version = "2.1.3"
3228 | source = "registry+https://github.com/rust-lang/crates.io-index"
3229 | checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
3230 |
3231 | [[package]]
3232 | name = "uuid"
3233 | version = "1.4.1"
3234 | source = "registry+https://github.com/rust-lang/crates.io-index"
3235 | checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
3236 | dependencies = [
3237 | "getrandom",
3238 | "serde",
3239 | ]
3240 |
3241 | [[package]]
3242 | name = "valuable"
3243 | version = "0.1.0"
3244 | source = "registry+https://github.com/rust-lang/crates.io-index"
3245 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
3246 |
3247 | [[package]]
3248 | name = "vcpkg"
3249 | version = "0.2.15"
3250 | source = "registry+https://github.com/rust-lang/crates.io-index"
3251 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
3252 |
3253 | [[package]]
3254 | name = "version_check"
3255 | version = "0.9.4"
3256 | source = "registry+https://github.com/rust-lang/crates.io-index"
3257 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
3258 |
3259 | [[package]]
3260 | name = "walkdir"
3261 | version = "2.3.3"
3262 | source = "registry+https://github.com/rust-lang/crates.io-index"
3263 | checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
3264 | dependencies = [
3265 | "same-file",
3266 | "winapi-util",
3267 | ]
3268 |
3269 | [[package]]
3270 | name = "want"
3271 | version = "0.3.0"
3272 | source = "registry+https://github.com/rust-lang/crates.io-index"
3273 | checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
3274 | dependencies = [
3275 | "log",
3276 | "try-lock",
3277 | ]
3278 |
3279 | [[package]]
3280 | name = "wasi"
3281 | version = "0.11.0+wasi-snapshot-preview1"
3282 | source = "registry+https://github.com/rust-lang/crates.io-index"
3283 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
3284 |
3285 | [[package]]
3286 | name = "wasm-bindgen"
3287 | version = "0.2.83"
3288 | source = "registry+https://github.com/rust-lang/crates.io-index"
3289 | checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
3290 | dependencies = [
3291 | "cfg-if",
3292 | "wasm-bindgen-macro",
3293 | ]
3294 |
3295 | [[package]]
3296 | name = "wasm-bindgen-backend"
3297 | version = "0.2.83"
3298 | source = "registry+https://github.com/rust-lang/crates.io-index"
3299 | checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
3300 | dependencies = [
3301 | "bumpalo",
3302 | "log",
3303 | "once_cell",
3304 | "proc-macro2",
3305 | "quote",
3306 | "syn 1.0.102",
3307 | "wasm-bindgen-shared",
3308 | ]
3309 |
3310 | [[package]]
3311 | name = "wasm-bindgen-macro"
3312 | version = "0.2.83"
3313 | source = "registry+https://github.com/rust-lang/crates.io-index"
3314 | checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
3315 | dependencies = [
3316 | "quote",
3317 | "wasm-bindgen-macro-support",
3318 | ]
3319 |
3320 | [[package]]
3321 | name = "wasm-bindgen-macro-support"
3322 | version = "0.2.83"
3323 | source = "registry+https://github.com/rust-lang/crates.io-index"
3324 | checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
3325 | dependencies = [
3326 | "proc-macro2",
3327 | "quote",
3328 | "syn 1.0.102",
3329 | "wasm-bindgen-backend",
3330 | "wasm-bindgen-shared",
3331 | ]
3332 |
3333 | [[package]]
3334 | name = "wasm-bindgen-shared"
3335 | version = "0.2.83"
3336 | source = "registry+https://github.com/rust-lang/crates.io-index"
3337 | checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
3338 |
3339 | [[package]]
3340 | name = "web-sys"
3341 | version = "0.3.60"
3342 | source = "registry+https://github.com/rust-lang/crates.io-index"
3343 | checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
3344 | dependencies = [
3345 | "js-sys",
3346 | "wasm-bindgen",
3347 | ]
3348 |
3349 | [[package]]
3350 | name = "webpki-roots"
3351 | version = "0.24.0"
3352 | source = "registry+https://github.com/rust-lang/crates.io-index"
3353 | checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888"
3354 | dependencies = [
3355 | "rustls-webpki",
3356 | ]
3357 |
3358 | [[package]]
3359 | name = "whoami"
3360 | version = "1.2.3"
3361 | source = "registry+https://github.com/rust-lang/crates.io-index"
3362 | checksum = "d6631b6a2fd59b1841b622e8f1a7ad241ef0a46f2d580464ce8140ac94cbd571"
3363 | dependencies = [
3364 | "bumpalo",
3365 | "wasm-bindgen",
3366 | "web-sys",
3367 | ]
3368 |
3369 | [[package]]
3370 | name = "winapi"
3371 | version = "0.3.9"
3372 | source = "registry+https://github.com/rust-lang/crates.io-index"
3373 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
3374 | dependencies = [
3375 | "winapi-i686-pc-windows-gnu",
3376 | "winapi-x86_64-pc-windows-gnu",
3377 | ]
3378 |
3379 | [[package]]
3380 | name = "winapi-i686-pc-windows-gnu"
3381 | version = "0.4.0"
3382 | source = "registry+https://github.com/rust-lang/crates.io-index"
3383 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
3384 |
3385 | [[package]]
3386 | name = "winapi-util"
3387 | version = "0.1.5"
3388 | source = "registry+https://github.com/rust-lang/crates.io-index"
3389 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
3390 | dependencies = [
3391 | "winapi",
3392 | ]
3393 |
3394 | [[package]]
3395 | name = "winapi-x86_64-pc-windows-gnu"
3396 | version = "0.4.0"
3397 | source = "registry+https://github.com/rust-lang/crates.io-index"
3398 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3399 |
3400 | [[package]]
3401 | name = "windows-sys"
3402 | version = "0.48.0"
3403 | source = "registry+https://github.com/rust-lang/crates.io-index"
3404 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
3405 | dependencies = [
3406 | "windows-targets",
3407 | ]
3408 |
3409 | [[package]]
3410 | name = "windows-targets"
3411 | version = "0.48.5"
3412 | source = "registry+https://github.com/rust-lang/crates.io-index"
3413 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
3414 | dependencies = [
3415 | "windows_aarch64_gnullvm",
3416 | "windows_aarch64_msvc",
3417 | "windows_i686_gnu",
3418 | "windows_i686_msvc",
3419 | "windows_x86_64_gnu",
3420 | "windows_x86_64_gnullvm",
3421 | "windows_x86_64_msvc",
3422 | ]
3423 |
3424 | [[package]]
3425 | name = "windows_aarch64_gnullvm"
3426 | version = "0.48.5"
3427 | source = "registry+https://github.com/rust-lang/crates.io-index"
3428 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
3429 |
3430 | [[package]]
3431 | name = "windows_aarch64_msvc"
3432 | version = "0.48.5"
3433 | source = "registry+https://github.com/rust-lang/crates.io-index"
3434 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
3435 |
3436 | [[package]]
3437 | name = "windows_i686_gnu"
3438 | version = "0.48.5"
3439 | source = "registry+https://github.com/rust-lang/crates.io-index"
3440 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
3441 |
3442 | [[package]]
3443 | name = "windows_i686_msvc"
3444 | version = "0.48.5"
3445 | source = "registry+https://github.com/rust-lang/crates.io-index"
3446 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
3447 |
3448 | [[package]]
3449 | name = "windows_x86_64_gnu"
3450 | version = "0.48.5"
3451 | source = "registry+https://github.com/rust-lang/crates.io-index"
3452 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
3453 |
3454 | [[package]]
3455 | name = "windows_x86_64_gnullvm"
3456 | version = "0.48.5"
3457 | source = "registry+https://github.com/rust-lang/crates.io-index"
3458 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
3459 |
3460 | [[package]]
3461 | name = "windows_x86_64_msvc"
3462 | version = "0.48.5"
3463 | source = "registry+https://github.com/rust-lang/crates.io-index"
3464 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
3465 |
3466 | [[package]]
3467 | name = "zeroize"
3468 | version = "1.6.0"
3469 | source = "registry+https://github.com/rust-lang/crates.io-index"
3470 | checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
3471 |
--------------------------------------------------------------------------------