├── migrations ├── .gitkeep ├── 2020-04-10-153346_users │ ├── down.sql │ └── up.sql ├── 2020-04-10-153354_confirmations │ ├── down.sql │ └── up.sql └── 00000000000000_diesel_initial_setup │ ├── down.sql │ └── up.sql ├── .gitignore ├── yarte.toml ├── diesel.toml ├── templates ├── includes │ ├── head.hbs │ └── message.hbs ├── layouts │ └── base.hbs └── pages │ ├── me.hbs │ ├── register.hbs │ ├── sign_in.hbs │ └── password.hbs ├── README.md ├── src ├── schema.rs ├── templates.rs ├── vars.rs ├── models.rs ├── utils.rs ├── errors.rs ├── email_service.rs ├── register_handler.rs ├── main.rs ├── auth_handler.rs └── password_handler.rs ├── Cargo.toml └── Cargo.lock /migrations/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .env -------------------------------------------------------------------------------- /migrations/2020-04-10-153346_users/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE users; -------------------------------------------------------------------------------- /migrations/2020-04-10-153354_confirmations/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE confirmations; -------------------------------------------------------------------------------- /yarte.toml: -------------------------------------------------------------------------------- 1 | [main] 2 | dir = "templates" 3 | 4 | [partials] 5 | layouts = "./layouts" 6 | includes = "./includes" -------------------------------------------------------------------------------- /diesel.toml: -------------------------------------------------------------------------------- 1 | # For documentation on how to configure this file, 2 | # see diesel.rs/guides/configuring-diesel-cli 3 | 4 | [print_schema] 5 | file = "src/schema.rs" 6 | -------------------------------------------------------------------------------- /templates/includes/head.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ title }} 4 | 5 | -------------------------------------------------------------------------------- /migrations/2020-04-10-153354_confirmations/up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE confirmations ( 2 | id UUID NOT NULL PRIMARY KEY, 3 | email VARCHAR(50) NOT NULL UNIQUE, 4 | expires_at TIMESTAMP NOT NULL 5 | ); -------------------------------------------------------------------------------- /migrations/2020-04-10-153346_users/up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE users ( 2 | id UUID NOT NULL PRIMARY KEY, 3 | email VARCHAR(50) NOT NULL UNIQUE, 4 | hash VARCHAR(150) NOT NULL, 5 | created_at TIMESTAMP NOT NULL 6 | ); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Rust authentication service 2 | ---------------------------- 3 | Exploring how to create a service that supports web and API requests in Rust. 4 | 5 | Explored [here](https://bowlsofsalt.com/web-and-api-authentication-service-in-rust/) -------------------------------------------------------------------------------- /templates/layouts/base.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{> includes/head }} 4 | 5 |
6 |
7 | {{> @partial-block }} 8 |
9 |
10 | 11 | -------------------------------------------------------------------------------- /templates/pages/me.hbs: -------------------------------------------------------------------------------- 1 | 2 | {{#> layouts/base title = "Auth Service | User page" }} 3 |
4 |

5 | Your email: {{ user.email }} 6 |

7 |
8 |

9 | Sign out → 10 |

11 | 12 | {{~/layouts/base }} -------------------------------------------------------------------------------- /migrations/00000000000000_diesel_initial_setup/down.sql: -------------------------------------------------------------------------------- 1 | -- This file was automatically created by Diesel to setup helper functions 2 | -- and other internal bookkeeping. This file is safe to edit, any future 3 | -- changes will be added to existing projects as new migrations. 4 | 5 | DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass); 6 | DROP FUNCTION IF EXISTS diesel_set_updated_at(); 7 | -------------------------------------------------------------------------------- /src/schema.rs: -------------------------------------------------------------------------------- 1 | table! { 2 | confirmations (id) { 3 | id -> Uuid, 4 | email -> Varchar, 5 | expires_at -> Timestamp, 6 | } 7 | } 8 | 9 | table! { 10 | users (id) { 11 | id -> Uuid, 12 | email -> Varchar, 13 | hash -> Varchar, 14 | created_at -> Timestamp, 15 | } 16 | } 17 | 18 | allow_tables_to_appear_in_same_query!( 19 | confirmations, 20 | users, 21 | ); 22 | -------------------------------------------------------------------------------- /src/templates.rs: -------------------------------------------------------------------------------- 1 | use yarte::Template; 2 | 3 | use crate::models::SessionUser; 4 | 5 | #[derive(Template)] 6 | #[template(path = "pages/register.hbs")] 7 | pub struct Register { 8 | pub sent: bool, 9 | pub error: Option 10 | } 11 | 12 | #[derive(Template)] 13 | #[template(path = "pages/password.hbs")] 14 | pub struct Password { 15 | pub email: String, 16 | pub path_id: String, 17 | pub error: Option 18 | } 19 | 20 | #[derive(Template)] 21 | #[template(path = "pages/me.hbs")] 22 | pub struct Me { 23 | pub user: SessionUser, 24 | } 25 | 26 | #[derive(Template)] 27 | #[template(path = "pages/sign_in.hbs")] 28 | pub struct SignIn { 29 | pub error: Option, 30 | } -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "auth_service" 3 | version = "0.1.0" 4 | authors = ["Uk "] 5 | edition = "2018" 6 | 7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 8 | 9 | [dependencies] 10 | actix-cors = "0.2.0" 11 | actix-files = "0.2.1" 12 | actix-redis = { version = "0.8.0", features = ["web"] } 13 | actix-rt = "1.0" 14 | actix-session = "0.3" 15 | actix-web = "2.0" 16 | argonautica = "0.2.0" 17 | chrono = { version = "0.4.11", features = ["serde"] } 18 | derive_more = "0.99.5" 19 | diesel = { version = "1.4.4", features = ["postgres", "uuidv07", "r2d2", "chrono"] } 20 | dotenv = "0.15.0" 21 | env_logger = "0.7.1" 22 | lettre = { git = "https://github.com/lettre/lettre" } 23 | native-tls = "0.2.4" 24 | r2d2 = "0.8.8" 25 | serde = { version = "1.0", features = ["derive"] } 26 | serde_json = "1.0" 27 | uuid = { version = "0.8", features = ["serde", "v4"] } 28 | yarte = { version = "0.7", features = ["with-actix-web"] } 29 | 30 | [build-dependencies] 31 | yarte = { version = "0.7", features = ["with-actix-web"] } -------------------------------------------------------------------------------- /templates/includes/message.hbs: -------------------------------------------------------------------------------- 1 | {{#if success }} 2 | 10 | {{else}} 11 | 19 | {{/if}} 20 | -------------------------------------------------------------------------------- /migrations/00000000000000_diesel_initial_setup/up.sql: -------------------------------------------------------------------------------- 1 | -- This file was automatically created by Diesel to setup helper functions 2 | -- and other internal bookkeeping. This file is safe to edit, any future 3 | -- changes will be added to existing projects as new migrations. 4 | 5 | 6 | 7 | 8 | -- Sets up a trigger for the given table to automatically set a column called 9 | -- `updated_at` whenever the row is modified (unless `updated_at` was included 10 | -- in the modified columns) 11 | -- 12 | -- # Example 13 | -- 14 | -- ```sql 15 | -- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW()); 16 | -- 17 | -- SELECT diesel_manage_updated_at('users'); 18 | -- ``` 19 | CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$ 20 | BEGIN 21 | EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s 22 | FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl); 23 | END; 24 | $$ LANGUAGE plpgsql; 25 | 26 | CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$ 27 | BEGIN 28 | IF ( 29 | NEW IS DISTINCT FROM OLD AND 30 | NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at 31 | ) THEN 32 | NEW.updated_at := current_timestamp; 33 | END IF; 34 | RETURN NEW; 35 | END; 36 | $$ LANGUAGE plpgsql; 37 | -------------------------------------------------------------------------------- /src/vars.rs: -------------------------------------------------------------------------------- 1 | use dotenv::dotenv; 2 | 3 | use std::env::var; 4 | 5 | 6 | pub fn database_url() -> String { 7 | dotenv().ok(); 8 | 9 | var("DATABASE_URL").expect("DATABASE_URL is not set") 10 | } 11 | 12 | pub fn secret_key() -> String { 13 | dotenv().ok(); 14 | 15 | var("SECRET_KEY").unwrap_or_else(|_| "0123".repeat(8)) 16 | } 17 | 18 | pub fn domain() -> String { 19 | dotenv().ok(); 20 | 21 | var("DOMAIN").unwrap_or_else(|_| "localhost".to_string()) 22 | } 23 | 24 | pub fn port() -> u16 { 25 | dotenv().ok(); 26 | 27 | var("PORT").expect("PORT is not set").parse::().ok().expect("PORT should be an integer") 28 | } 29 | 30 | pub fn domain_url() -> String { 31 | dotenv().ok(); 32 | 33 | var("DOMAIN_URL").unwrap_or_else(|_| "http://localhost:3000".to_string()) 34 | } 35 | 36 | pub fn smtp_username() -> String { 37 | dotenv().ok(); 38 | 39 | var("SMTP_USERNAME").expect("SMTP_USERNAME is not set") 40 | } 41 | 42 | pub fn smtp_password() -> String { 43 | dotenv().ok(); 44 | 45 | var("SMTP_PASSWORD").expect("SMTP_PASSWORD is not set") 46 | } 47 | 48 | pub fn smtp_host() -> String { 49 | dotenv().ok(); 50 | 51 | var("SMTP_HOST").expect("SMTP_HOST is not set") 52 | } 53 | 54 | pub fn smtp_port() -> u16 { 55 | dotenv().ok(); 56 | 57 | var("SMTP_PORT").expect("SMTP_PORT is not set").parse::().ok().expect("SMTP_PORT should be an integer") 58 | } 59 | 60 | pub fn smtp_sender_name() -> String { 61 | dotenv().ok(); 62 | 63 | var("SMTP_SENDER_NAME").expect("SMTP_SENDER_NAME is not set") 64 | } -------------------------------------------------------------------------------- /src/models.rs: -------------------------------------------------------------------------------- 1 | use diesel::{r2d2::ConnectionManager, PgConnection}; 2 | use serde::{Deserialize, Serialize}; 3 | use uuid::Uuid; 4 | 5 | use super::schema::*; 6 | 7 | // type alias to reduce verbosity 8 | pub type Pool = r2d2::Pool>; 9 | 10 | #[derive(Debug, Serialize, Deserialize, Queryable, Insertable)] 11 | #[table_name = "confirmations"] 12 | pub struct Confirmation { 13 | pub id: Uuid, 14 | pub email: String, 15 | pub expires_at: chrono::NaiveDateTime, 16 | } 17 | 18 | #[derive(Debug, Serialize, Deserialize, Queryable, Insertable)] 19 | #[table_name = "users"] 20 | pub struct User { 21 | pub id: Uuid, 22 | pub email: String, 23 | pub hash: String, 24 | pub created_at: chrono::NaiveDateTime, 25 | } 26 | 27 | #[derive(Debug, Serialize, Deserialize)] 28 | pub struct SessionUser { 29 | pub id: Uuid, 30 | pub email: String, 31 | } 32 | 33 | // any type that implements Into can be used to create a Confirmation 34 | impl From for Confirmation where 35 | T: Into { 36 | fn from(email: T) -> Self { 37 | Confirmation { 38 | id: Uuid::new_v4(), 39 | email: email.into(), 40 | expires_at: chrono::Local::now().naive_local() + chrono::Duration::hours(24), 41 | } 42 | } 43 | } 44 | 45 | impl From for SessionUser { 46 | fn from(User { email, id, .. }: User) -> Self { 47 | SessionUser { email, id } 48 | } 49 | } 50 | 51 | impl User { 52 | pub fn from, T: Into>(email: S, pwd: T) -> Self { 53 | User { 54 | id: Uuid::new_v4(), 55 | email: email.into(), 56 | hash: pwd.into(), 57 | created_at: chrono::Local::now().naive_local(), 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /templates/pages/register.hbs: -------------------------------------------------------------------------------- 1 | 2 | {{#> layouts/base title = "Auth Service | Register" }} 3 | 4 | {{#if sent }} 5 | {{> includes/message success = sent, message = "A confirmation email has been sent to your mailbox" }} 6 | {{else if error.is_some() }} 7 | {{> includes/message success = sent, message = error.as_ref().unwrap() }} 8 | {{/if}} 9 | 10 |
11 |

12 | Create an account 13 |

14 |
15 | 16 |
17 |
18 |
19 | 26 |
27 |
28 | 29 |
30 | 38 |
39 |
40 | {{~/layouts/base }} -------------------------------------------------------------------------------- /templates/pages/sign_in.hbs: -------------------------------------------------------------------------------- 1 | 2 | {{#> layouts/base title = "Auth Service | Sign in" }} 3 | 4 | {{#if error.is_some() }} 5 | {{> includes/message success = false, message = error.as_ref().unwrap() }} 6 | {{/if}} 7 | 8 |
9 |

10 | Sign in 11 |

12 |
13 | 14 |
15 |
16 |
17 | 23 |
24 | 25 |
26 | 27 |
28 |
29 | 30 |
31 | 39 |
40 |
41 | 42 | {{~/layouts/base }} -------------------------------------------------------------------------------- /src/utils.rs: -------------------------------------------------------------------------------- 1 | use argonautica::{Hasher, Verifier}; 2 | use actix_session::Session; 3 | use actix_web::{ 4 | http::header::{CONTENT_TYPE, LOCATION}, 5 | HttpRequest, 6 | HttpResponse 7 | }; 8 | 9 | use crate::{errors::AuthError, vars, models::SessionUser}; 10 | 11 | 12 | pub fn hash_password(password: &str) -> Result { 13 | Hasher::default() 14 | .with_password(password) 15 | .with_secret_key(vars::secret_key().as_str()) 16 | .hash() 17 | .map_err(|_| AuthError::AuthenticationError(String::from("Could not hash password"))) 18 | } 19 | 20 | pub fn verify(hash: &str, password: &str) -> Result { 21 | Verifier::default() 22 | .with_hash(hash) 23 | .with_password(password) 24 | .with_secret_key(vars::secret_key().as_str()) 25 | .verify() 26 | .map_err(|_| AuthError::AuthenticationError(String::from("Could not verify password"))) 27 | } 28 | 29 | pub fn is_json_request(req: &HttpRequest) -> bool { 30 | req 31 | .headers() 32 | .get(CONTENT_TYPE) 33 | .map_or( 34 | false, 35 | |header| header.to_str().map_or(false, |content_type| "application/json" == content_type) 36 | ) 37 | } 38 | 39 | pub fn is_signed_in(session: &Session) -> bool { 40 | match get_current_user(session) { 41 | Ok(_) => true, 42 | _ => false, 43 | } 44 | } 45 | 46 | pub fn set_current_user(session: &Session, user: &SessionUser) -> () { 47 | // serializing to string is alright for this case, 48 | // but binary would be preferred in production use-cases. 49 | session.set("user", serde_json::to_string(user).unwrap()).unwrap(); 50 | } 51 | 52 | pub fn get_current_user(session: &Session) -> Result { 53 | let msg = "Could not retrieve user from session"; 54 | 55 | session.get::("user") 56 | .map_err(|_| AuthError::AuthenticationError(String::from(msg))) 57 | .unwrap() 58 | .map_or( 59 | Err(AuthError::AuthenticationError(String::from(msg))), 60 | |user| serde_json::from_str(&user).or_else(|_| Err(AuthError::AuthenticationError(String::from(msg)))) 61 | ) 62 | } 63 | 64 | pub fn to_home() -> HttpResponse { 65 | HttpResponse::Found().header(LOCATION, "/me").finish() 66 | } -------------------------------------------------------------------------------- /templates/pages/password.hbs: -------------------------------------------------------------------------------- 1 | 2 | {{#> layouts/base title = "Auth Service | Set password" }} 3 | 4 | {{#if error.is_some() }} 5 | {{> includes/message success = false, message = error.as_ref().unwrap() }} 6 | {{/if}} 7 | 8 |
9 |

10 | Complete account creation 11 |

12 |
13 | 14 |
15 |
16 |
17 | 25 |
26 | 27 |
28 | 29 |
30 |
31 | 32 |
33 | 41 |
42 |
43 | 44 | {{~/layouts/base }} -------------------------------------------------------------------------------- /src/errors.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{HttpResponse, ResponseError}; 2 | use derive_more::Display; 3 | use diesel::result::{DatabaseErrorKind, Error as DBError}; 4 | use std::convert::From; 5 | use uuid::Error as UuidError; 6 | 7 | #[derive(Clone, Debug, Display)] 8 | pub enum AuthError { 9 | #[display(fmt = "DuplicateValue: {}", _0)] 10 | DuplicateValue(String), 11 | 12 | #[display(fmt = "BadId")] 13 | BadId, 14 | 15 | #[display(fmt = "NotFound: {}", _0)] 16 | NotFound(String), 17 | 18 | #[display(fmt = "ProcessError: {}", _0)] 19 | ProcessError(String), 20 | 21 | #[display(fmt = "AuthenticationError: {}", _0)] 22 | AuthenticationError(String), 23 | 24 | #[display(fmt = "GenericError: {}", _0)] 25 | GenericError(String), 26 | } 27 | 28 | 29 | impl ResponseError for AuthError { 30 | fn error_response(&self) -> HttpResponse { 31 | match self { 32 | AuthError::BadId => HttpResponse::BadRequest().json("Invalid ID"), 33 | 34 | AuthError::NotFound(ref message) => HttpResponse::NotFound().json(message), 35 | 36 | AuthError::ProcessError(ref message) => HttpResponse::InternalServerError().json(message), 37 | 38 | AuthError::AuthenticationError(ref message) => HttpResponse::Unauthorized().json(message), 39 | 40 | AuthError::DuplicateValue(ref message) => HttpResponse::BadRequest().json(message), 41 | 42 | AuthError::GenericError(ref message) => HttpResponse::BadRequest().json(message), 43 | } 44 | } 45 | } 46 | 47 | 48 | impl From for AuthError { 49 | fn from(_: UuidError) -> AuthError { 50 | AuthError::BadId 51 | } 52 | } 53 | 54 | impl From for AuthError { 55 | fn from(error: DBError) -> AuthError { 56 | // We only care about UniqueViolations 57 | match error { 58 | DBError::DatabaseError(kind, info) => { 59 | let message = info.details().unwrap_or_else(|| info.message()).to_string(); 60 | 61 | match kind { 62 | DatabaseErrorKind::UniqueViolation => AuthError::DuplicateValue(message), 63 | _ => AuthError::GenericError(message) 64 | } 65 | } 66 | _ => AuthError::GenericError(String::from("Some database error occured")), 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/email_service.rs: -------------------------------------------------------------------------------- 1 | use lettre::{ 2 | Email, 3 | SmtpClient, 4 | ClientSecurity, 5 | ClientTlsParameters, 6 | Transport, 7 | smtp::{ 8 | ConnectionReuseParameters, 9 | authentication::{Credentials, Mechanism} 10 | } 11 | }; 12 | use native_tls::{Protocol, TlsConnector}; 13 | 14 | use crate::{models::Confirmation, errors::AuthError, vars}; 15 | 16 | 17 | pub fn send_confirmation_mail(confirmation: &Confirmation) -> Result<(), AuthError> { 18 | let domain_url = vars::domain_url(); 19 | let expires = confirmation.expires_at.format("%I:%M %p %A, %-d %B, %C%y").to_string(); 20 | let html_text = format!( 21 | "Please click on the link below to complete registration.
22 | Complete registration
23 | This link expires on {expires}", 24 | domain=domain_url, 25 | id=confirmation.id, 26 | expires=expires 27 | ); 28 | let plain_text = format!( 29 | "Please visit the link below to complete registration:\n 30 | {domain}/register/{id}\n 31 | This link expires on {expires}.", 32 | domain=domain_url, 33 | id=confirmation.id, 34 | expires=expires 35 | ); 36 | 37 | let email = Email::builder() 38 | .to(confirmation.email.clone()) 39 | .from(("noreply@auth-service.com", vars::smtp_sender_name())) 40 | .subject("Complete your registration on our one-of-a-kind Auth Service") 41 | .text(plain_text) 42 | .html(html_text) 43 | .build() 44 | .unwrap(); 45 | 46 | let smtp_host = vars::smtp_host(); 47 | let mut tls_builder = TlsConnector::builder(); 48 | tls_builder.min_protocol_version(Some(Protocol::Tlsv10)); 49 | let tls_parameters = ClientTlsParameters::new(smtp_host.clone(), tls_builder.build().unwrap()); 50 | 51 | let mut mailer = SmtpClient::new((smtp_host.as_str(), vars::smtp_port()), ClientSecurity::Required(tls_parameters)) 52 | .unwrap() 53 | .authentication_mechanism(Mechanism::Login) 54 | .credentials(Credentials::new(vars::smtp_username(), vars::smtp_password())) 55 | .connection_reuse(ConnectionReuseParameters::ReuseUnlimited) 56 | .transport(); 57 | 58 | let result = mailer.send(email); 59 | 60 | if result.is_ok() { 61 | println!("Email sent"); 62 | 63 | Ok(()) 64 | } else { 65 | println!("Could not send email: {:?}", result); 66 | 67 | Err(AuthError::ProcessError(String::from("Could not send confirmation email"))) 68 | } 69 | } -------------------------------------------------------------------------------- /src/register_handler.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{error::BlockingError, web, HttpResponse}; 2 | use actix_session::Session; 3 | use diesel::prelude::*; 4 | use serde::Deserialize; 5 | use yarte::Template; 6 | 7 | use crate::{ 8 | email_service::send_confirmation_mail, 9 | errors::AuthError, 10 | models::{Confirmation, Pool}, 11 | templates::Register, 12 | utils::{is_signed_in, to_home} 13 | }; 14 | 15 | 16 | #[derive(Deserialize)] 17 | pub struct RegisterData { 18 | pub email: String, 19 | } 20 | 21 | pub async fn send_confirmation(session: Session, 22 | data: web::Json, 23 | pool: web::Data) -> Result { 24 | if is_signed_in(&session) { 25 | return Ok(HttpResponse::BadRequest().finish()); 26 | } 27 | 28 | let result = web::block(move || create_confirmation(data.into_inner().email, &pool)).await; 29 | 30 | match result { 31 | Ok(_) => Ok(HttpResponse::Ok().finish()), 32 | Err(err) => match err { 33 | BlockingError::Error(auth_error) => Err(auth_error), 34 | BlockingError::Canceled => Err(AuthError::GenericError(String::from("Could not complete the process"))), 35 | }, 36 | } 37 | } 38 | 39 | pub async fn show_confirmation_form(session: Session) -> Result { 40 | if is_signed_in(&session) { 41 | Ok(to_home()) 42 | } else { 43 | let template = Register { sent: false, error: None }; 44 | 45 | Ok(HttpResponse::Ok().content_type("text/html; charset=utf-8").body(template.call().unwrap())) 46 | } 47 | } 48 | 49 | pub async fn send_confirmation_for_browser(data: web::Form, 50 | pool: web::Data) -> Result { 51 | let result = web::block(move || create_confirmation(data.into_inner().email, &pool)).await; 52 | let template = match result { 53 | Ok(_) => Register { sent: true, error: None }, 54 | Err(err) => match err { 55 | BlockingError::Error(auth_error) => Register { sent: false, error: Some(auth_error.to_string()) }, 56 | BlockingError::Canceled => { 57 | Register { sent: false, error: Some(String::from("Could not complete the process")) } 58 | } 59 | }, 60 | }; 61 | 62 | Ok(HttpResponse::Ok().content_type("text/html; charset=utf-8").body(template.call().unwrap())) 63 | } 64 | 65 | 66 | fn create_confirmation(email: String, pool: &web::Data) -> Result<(), AuthError> { 67 | let confirmation = insert_record(email, pool)?; 68 | 69 | send_confirmation_mail(&confirmation) 70 | } 71 | 72 | fn insert_record(email: String, pool: &web::Data) -> Result { 73 | use crate::schema::confirmations::dsl::confirmations; 74 | 75 | let new_record : Confirmation = email.into(); 76 | 77 | let inserted_record = diesel::insert_into(confirmations) 78 | .values(&new_record) 79 | .get_result(&pool.get().unwrap())?; 80 | 81 | Ok(inserted_record) 82 | } -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #[macro_use] 2 | extern crate diesel; 3 | extern crate serde_json; 4 | extern crate lettre; 5 | extern crate native_tls; 6 | 7 | mod auth_handler; 8 | mod email_service; 9 | mod errors; 10 | mod models; 11 | mod password_handler; 12 | mod register_handler; 13 | mod schema; 14 | mod templates; 15 | mod utils; 16 | mod vars; 17 | 18 | 19 | #[actix_rt::main] 20 | async fn main() -> std::io::Result<()> { 21 | use actix_cors::Cors; 22 | use actix_files::Files; 23 | use actix_redis::RedisSession; 24 | use actix_web::{middleware, web, App, HttpServer}; 25 | use diesel::{ 26 | prelude::*, 27 | r2d2::{self, ConnectionManager} 28 | }; 29 | 30 | std::env::set_var("RUST_LOG", "actix_web=info,actix_server=info"); 31 | env_logger::init(); 32 | 33 | // create a database connection pool 34 | let manager = ConnectionManager::::new(vars::database_url()); 35 | let pool: models::Pool = r2d2::Pool::builder() 36 | .build(manager) 37 | .expect("Failed to create a database connection pool."); 38 | 39 | // Start http server 40 | HttpServer::new(move || { 41 | App::new() 42 | .data(pool.clone()) 43 | // enable logger 44 | .wrap(middleware::Logger::default()) 45 | // Enable sessions 46 | .wrap(RedisSession::new("127.0.0.1:6379", &[0; 32])) 47 | .wrap( 48 | Cors::new() 49 | .allowed_methods(vec!["GET", "POST", "DELETE", "OPTIONS"]) 50 | .max_age(3600) 51 | .finish()) 52 | .service(Files::new("/assets", "./templates/assets")) 53 | // Routes 54 | .service( 55 | web::scope("/") 56 | .service( 57 | web::resource("/register") 58 | .route(web::get().to(register_handler::show_confirmation_form)) 59 | .route(web::post().to(register_handler::send_confirmation)), 60 | ) 61 | .service( 62 | web::resource("/register/{path_id}") 63 | .route(web::get().to(password_handler::show_password_form)) 64 | .route(web::post().to(password_handler::create_account)), 65 | ) 66 | .route("/register2/{path_id}", web::post().to(password_handler::create_account_for_browser)) 67 | .route("/register2", web::post().to(register_handler::send_confirmation_for_browser)) 68 | .route("/me", web::get().to(auth_handler::me)) 69 | .service( 70 | web::resource("/signout") 71 | .route(web::get().to(auth_handler::sign_out)) 72 | .route(web::delete().to(auth_handler::sign_out)), 73 | ) 74 | .service( 75 | web::resource("/signin") 76 | .route(web::get().to(auth_handler::show_sign_in_form)) 77 | .route(web::post().to(auth_handler::sign_in)), 78 | ) 79 | .route("/signin2", web::post().to(auth_handler::sign_in_for_browser)), 80 | ) 81 | }) 82 | .bind(format!("{}:{}", vars::domain(), vars::port()))? 83 | .run() 84 | .await 85 | } 86 | -------------------------------------------------------------------------------- /src/auth_handler.rs: -------------------------------------------------------------------------------- 1 | 2 | use actix_session::Session; 3 | use actix_web::{ 4 | http::header::LOCATION, 5 | HttpRequest, 6 | HttpResponse, 7 | web 8 | }; 9 | use diesel::prelude::*; 10 | use serde::Deserialize; 11 | use yarte::Template; 12 | 13 | use crate::{ 14 | models::{Pool, SessionUser, User}, 15 | errors::AuthError, 16 | utils::{is_json_request, get_current_user, is_signed_in, set_current_user, to_home, verify}, 17 | templates::{SignIn, Me} 18 | }; 19 | 20 | 21 | pub async fn me(session: Session, req: HttpRequest) -> HttpResponse { 22 | let user_result = dbg!(get_current_user(&session)); 23 | 24 | match is_json_request(&req) { 25 | true => { 26 | user_result.map_or(HttpResponse::Unauthorized().json("Unauthorized"), |user| HttpResponse::Ok().json(user)) 27 | }, 28 | false => { 29 | user_result.map_or( 30 | HttpResponse::MovedPermanently().header(LOCATION, "/signin").finish(), 31 | |user| { 32 | let t = Me { user }; 33 | 34 | HttpResponse::Ok().content_type("text/html; charset=utf-8").body(t.call().unwrap()) 35 | } 36 | ) 37 | } 38 | } 39 | } 40 | 41 | pub async fn sign_out(session: Session, req: HttpRequest) -> HttpResponse { 42 | session.clear(); 43 | 44 | match is_json_request(&req) { 45 | true => HttpResponse::NoContent().finish(), 46 | false => HttpResponse::MovedPermanently().header(LOCATION, "/signin").finish(), 47 | } 48 | } 49 | 50 | #[derive(Debug, Deserialize)] 51 | pub struct AuthData { 52 | pub email: String, 53 | pub password: String, 54 | } 55 | 56 | pub async fn sign_in(data: web::Json, 57 | session: Session, 58 | req: HttpRequest, 59 | pool: web::Data) -> Result { 60 | match is_signed_in(&session) { 61 | true => { 62 | let response = get_current_user(&session).map(|user| HttpResponse::Ok().json(user)).unwrap(); 63 | 64 | Ok(response) 65 | }, 66 | false => handle_sign_in(data.into_inner(), &session, &req, &pool) 67 | } 68 | } 69 | 70 | pub async fn show_sign_in_form(session: Session) -> Result { 71 | match is_signed_in(&session) { 72 | true => Ok(to_home()), 73 | false => { 74 | let t = SignIn { error: None }; 75 | 76 | Ok(HttpResponse::Ok().content_type("text/html; charset=utf-8").body(t.call().unwrap())) 77 | } 78 | } 79 | } 80 | 81 | pub async fn sign_in_for_browser(data: web::Form, 82 | session: Session, 83 | req: HttpRequest, 84 | pool: web::Data) -> Result { 85 | handle_sign_in(data.into_inner(), &session, &req, &pool) 86 | } 87 | 88 | fn handle_sign_in(data: AuthData, 89 | session: &Session, 90 | req: &HttpRequest, 91 | pool: &web::Data) -> Result { 92 | let result = find_user(data, pool); 93 | let is_json = is_json_request(req); 94 | 95 | match result { 96 | Ok(user) => { 97 | set_current_user(&session, &user); 98 | 99 | if is_json { 100 | Ok(HttpResponse::Ok().json(user)) 101 | } else { 102 | Ok(to_home()) 103 | } 104 | }, 105 | Err(err) => { 106 | if is_json { 107 | Ok(HttpResponse::Unauthorized().json(err.to_string())) 108 | } else { 109 | let t = SignIn { error: Some(err.to_string()) }; 110 | 111 | Ok(HttpResponse::Ok().content_type("text/html; charset=utf-8").body(t.call().unwrap())) 112 | } 113 | }, 114 | } 115 | } 116 | 117 | fn find_user(data: AuthData, pool: &web::Data) -> Result { 118 | use crate::schema::users::dsl::{email, users}; 119 | 120 | let mut items = users 121 | .filter(email.eq(&data.email)) 122 | .load::(&pool.get().unwrap())?; 123 | 124 | if let Some(user) = items.pop() { 125 | if let Ok(matching) = verify(&user.hash, &data.password) { 126 | if matching { 127 | return Ok(user.into()); 128 | } 129 | } 130 | } 131 | 132 | Err(AuthError::NotFound(String::from("User not found"))) 133 | } 134 | -------------------------------------------------------------------------------- /src/password_handler.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{error::BlockingError, http::header::LOCATION, web, HttpResponse}; 2 | use actix_session::Session; 3 | use diesel::prelude::*; 4 | use uuid::Uuid; 5 | use serde::Deserialize; 6 | use yarte::Template; 7 | 8 | use crate::{ 9 | models::{Confirmation, Pool, SessionUser, User}, 10 | errors::AuthError, 11 | schema::{ 12 | confirmations::dsl::{id, confirmations}, 13 | users::dsl::users 14 | }, 15 | templates::Password, 16 | utils::{hash_password, is_signed_in, set_current_user, to_home} 17 | }; 18 | 19 | 20 | #[derive(Debug, Deserialize)] 21 | pub struct PasswordData { 22 | pub password: String, 23 | } 24 | 25 | pub async fn create_account(session: Session, 26 | path_id: web::Path, 27 | data: web::Json, 28 | pool: web::Data) -> Result { 29 | if is_signed_in(&session) { 30 | return Ok(HttpResponse::BadRequest().finish()); 31 | } 32 | 33 | let result = web::block(move || create_user(&path_id.into_inner(), &data.into_inner().password, &pool)).await; 34 | 35 | match result { 36 | Ok(user) => { 37 | set_current_user(&session, &user); 38 | 39 | Ok(HttpResponse::Created().json(&user)) 40 | }, 41 | Err(err) => match err { 42 | BlockingError::Error(auth_error) => Err(auth_error), 43 | BlockingError::Canceled => Err(AuthError::GenericError(String::from("Could not complete the process"))), 44 | }, 45 | } 46 | } 47 | 48 | pub async fn show_password_form(session: Session, 49 | path_id: web::Path, 50 | pool: web::Data) -> Result { 51 | if is_signed_in(&session) { 52 | Ok(to_home()) 53 | } else { 54 | let id_str = path_id.into_inner(); 55 | 56 | match get_invitation(&id_str, &pool) { 57 | Ok(Confirmation { email, .. }) => { 58 | let t = Password { path_id: id_str, email, error: None }; 59 | 60 | Ok(HttpResponse::Ok().content_type("text/html; charset=utf-8").body(t.call().unwrap())) 61 | }, 62 | Err(_) => Ok(HttpResponse::MovedPermanently().header(LOCATION, "/register").finish()), 63 | } 64 | } 65 | } 66 | 67 | pub async fn create_account_for_browser(path_id: web::Path, 68 | data: web::Form, 69 | session: Session, 70 | pool: web::Data) -> Result { 71 | let id_str = path_id.into_inner(); 72 | let id_str2 = String::from(id_str.as_str()); 73 | let result = web::block(move || create_user(&id_str, &data.into_inner().password, &pool)).await; 74 | 75 | match result { 76 | Ok(user) => { 77 | set_current_user(&session, &user); 78 | 79 | Ok(to_home()) 80 | }, 81 | Err(_) => { 82 | let t = Password { 83 | path_id: id_str2, 84 | email: String::from("unknown@email.com"), 85 | error: Some(String::from("Invalid/expired confirmation id")) 86 | }; 87 | 88 | Ok(HttpResponse::Ok().content_type("text/html; charset=utf-8").body(t.call().unwrap())) 89 | }, 90 | } 91 | } 92 | 93 | 94 | fn get_invitation(path_id: &str, pool: &web::Data) -> Result { 95 | let path_uuid = Uuid::parse_str(path_id)?; 96 | 97 | if let Ok(record) = confirmations.find(path_uuid).get_result::(&pool.get().unwrap()) { 98 | Ok(record) 99 | } else { 100 | Err(AuthError::AuthenticationError(String::from("Invalid confirmation"))) 101 | } 102 | } 103 | 104 | 105 | fn create_user(path_id: &str, password: &str, pool: &web::Data) -> Result { 106 | let path_uuid = Uuid::parse_str(path_id)?; 107 | let conn = &pool.get().unwrap(); 108 | 109 | confirmations 110 | .filter(id.eq(path_uuid)) 111 | .load::(conn) 112 | .map_err(|_db_error| AuthError::NotFound(String::from("Confirmation not found"))) 113 | .and_then(|mut result| { 114 | if let Some(confirmation) = result.pop() { 115 | if confirmation.expires_at > chrono::Local::now().naive_local() { // confirmation has not expired 116 | let password: String = hash_password(password)?; 117 | let user: User = diesel::insert_into(users) 118 | .values(&User::from(confirmation.email, password)) 119 | .get_result(conn)?; 120 | 121 | return Ok(user.into()); 122 | } 123 | } 124 | 125 | Err(AuthError::AuthenticationError(String::from("Invalid confirmation"))) 126 | }) 127 | } -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | [[package]] 4 | name = "actix" 5 | version = "0.9.0" 6 | source = "registry+https://github.com/rust-lang/crates.io-index" 7 | checksum = "a4af87564ff659dee8f9981540cac9418c45e910c8072fdedd643a262a38fcaf" 8 | dependencies = [ 9 | "actix-http", 10 | "actix-rt", 11 | "actix_derive", 12 | "bitflags", 13 | "bytes", 14 | "crossbeam-channel", 15 | "derive_more", 16 | "futures 0.3.4", 17 | "lazy_static", 18 | "log", 19 | "parking_lot", 20 | "pin-project", 21 | "smallvec", 22 | "tokio", 23 | "tokio-util 0.2.0", 24 | "trust-dns-proto", 25 | "trust-dns-resolver", 26 | ] 27 | 28 | [[package]] 29 | name = "actix-codec" 30 | version = "0.2.0" 31 | source = "registry+https://github.com/rust-lang/crates.io-index" 32 | checksum = "09e55f0a5c2ca15795035d90c46bd0e73a5123b72f68f12596d6ba5282051380" 33 | dependencies = [ 34 | "bitflags", 35 | "bytes", 36 | "futures-core", 37 | "futures-sink", 38 | "log", 39 | "tokio", 40 | "tokio-util 0.2.0", 41 | ] 42 | 43 | [[package]] 44 | name = "actix-connect" 45 | version = "1.0.2" 46 | source = "registry+https://github.com/rust-lang/crates.io-index" 47 | checksum = "c95cc9569221e9802bf4c377f6c18b90ef10227d787611decf79fd47d2a8e76c" 48 | dependencies = [ 49 | "actix-codec", 50 | "actix-rt", 51 | "actix-service", 52 | "actix-utils", 53 | "derive_more", 54 | "either", 55 | "futures 0.3.4", 56 | "http", 57 | "log", 58 | "trust-dns-proto", 59 | "trust-dns-resolver", 60 | ] 61 | 62 | [[package]] 63 | name = "actix-cors" 64 | version = "0.2.0" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "0a6206917d5c0fdd79d81cec9ef02d3e802df4abf276d96241e1f595d971e002" 67 | dependencies = [ 68 | "actix-service", 69 | "actix-web", 70 | "derive_more", 71 | "futures 0.3.4", 72 | ] 73 | 74 | [[package]] 75 | name = "actix-files" 76 | version = "0.2.1" 77 | source = "registry+https://github.com/rust-lang/crates.io-index" 78 | checksum = "301482841d3d74483a446ead63cb7d362e187d2c8b603f13d91995621ea53c46" 79 | dependencies = [ 80 | "actix-http", 81 | "actix-service", 82 | "actix-web", 83 | "bitflags", 84 | "bytes", 85 | "derive_more", 86 | "futures 0.3.4", 87 | "log", 88 | "mime", 89 | "mime_guess", 90 | "percent-encoding", 91 | "v_htmlescape", 92 | ] 93 | 94 | [[package]] 95 | name = "actix-http" 96 | version = "1.0.1" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "c16664cc4fdea8030837ad5a845eb231fb93fc3c5c171edfefb52fad92ce9019" 99 | dependencies = [ 100 | "actix-codec", 101 | "actix-connect", 102 | "actix-rt", 103 | "actix-service", 104 | "actix-threadpool", 105 | "actix-utils", 106 | "base64 0.11.0", 107 | "bitflags", 108 | "brotli2", 109 | "bytes", 110 | "chrono", 111 | "copyless", 112 | "derive_more", 113 | "either", 114 | "encoding_rs", 115 | "failure", 116 | "flate2", 117 | "futures-channel", 118 | "futures-core", 119 | "futures-util", 120 | "fxhash", 121 | "h2", 122 | "http", 123 | "httparse", 124 | "indexmap", 125 | "language-tags", 126 | "lazy_static", 127 | "log", 128 | "mime", 129 | "percent-encoding", 130 | "pin-project", 131 | "rand 0.7.3", 132 | "regex", 133 | "ring", 134 | "serde", 135 | "serde_json", 136 | "serde_urlencoded", 137 | "sha1", 138 | "slab", 139 | "time 0.1.42", 140 | ] 141 | 142 | [[package]] 143 | name = "actix-macros" 144 | version = "0.1.1" 145 | source = "registry+https://github.com/rust-lang/crates.io-index" 146 | checksum = "21705adc76bbe4bc98434890e73a89cd00c6015e5704a60bb6eea6c3b72316b6" 147 | dependencies = [ 148 | "quote 1.0.3", 149 | "syn 1.0.17", 150 | ] 151 | 152 | [[package]] 153 | name = "actix-redis" 154 | version = "0.8.1" 155 | source = "registry+https://github.com/rust-lang/crates.io-index" 156 | checksum = "165a6559d485ceb9c3d1975b466e271e0564d0353a13cfacc9751980a844d0b8" 157 | dependencies = [ 158 | "actix", 159 | "actix-rt", 160 | "actix-service", 161 | "actix-session", 162 | "actix-utils", 163 | "actix-web", 164 | "backoff", 165 | "derive_more", 166 | "futures 0.3.4", 167 | "log", 168 | "rand 0.7.3", 169 | "redis-async", 170 | "serde", 171 | "serde_json", 172 | "time 0.1.42", 173 | "tokio", 174 | "tokio-util 0.2.0", 175 | ] 176 | 177 | [[package]] 178 | name = "actix-router" 179 | version = "0.2.4" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "9d7a10ca4d94e8c8e7a87c5173aba1b97ba9a6563ca02b0e1cd23531093d3ec8" 182 | dependencies = [ 183 | "bytestring", 184 | "http", 185 | "log", 186 | "regex", 187 | "serde", 188 | ] 189 | 190 | [[package]] 191 | name = "actix-rt" 192 | version = "1.1.0" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "20066d9200ef8d441ac156c76dd36c3f1e9a15976c34e69ae97f7f570b331882" 195 | dependencies = [ 196 | "actix-macros", 197 | "actix-threadpool", 198 | "copyless", 199 | "futures-channel", 200 | "futures-util", 201 | "tokio", 202 | ] 203 | 204 | [[package]] 205 | name = "actix-server" 206 | version = "1.0.2" 207 | source = "registry+https://github.com/rust-lang/crates.io-index" 208 | checksum = "582a7173c281a4f46b5aa168a11e7f37183dcb71177a39312cc2264da7a632c9" 209 | dependencies = [ 210 | "actix-codec", 211 | "actix-rt", 212 | "actix-service", 213 | "actix-utils", 214 | "futures 0.3.4", 215 | "log", 216 | "mio", 217 | "mio-uds", 218 | "net2", 219 | "num_cpus", 220 | "slab", 221 | ] 222 | 223 | [[package]] 224 | name = "actix-service" 225 | version = "1.0.5" 226 | source = "registry+https://github.com/rust-lang/crates.io-index" 227 | checksum = "d3e4fc95dfa7e24171b2d0bb46b85f8ab0e8499e4e3caec691fc4ea65c287564" 228 | dependencies = [ 229 | "futures-util", 230 | "pin-project", 231 | ] 232 | 233 | [[package]] 234 | name = "actix-session" 235 | version = "0.3.0" 236 | source = "registry+https://github.com/rust-lang/crates.io-index" 237 | checksum = "ca833a08799c95281204f9cc76223da4d12d2caa03de24362b3e268c60da328c" 238 | dependencies = [ 239 | "actix-service", 240 | "actix-web", 241 | "bytes", 242 | "derive_more", 243 | "futures 0.3.4", 244 | "serde", 245 | "serde_json", 246 | "time 0.1.42", 247 | ] 248 | 249 | [[package]] 250 | name = "actix-testing" 251 | version = "1.0.0" 252 | source = "registry+https://github.com/rust-lang/crates.io-index" 253 | checksum = "48494745b72d0ea8ff0cf874aaf9b622a3ee03d7081ee0c04edea4f26d32c911" 254 | dependencies = [ 255 | "actix-macros", 256 | "actix-rt", 257 | "actix-server", 258 | "actix-service", 259 | "futures 0.3.4", 260 | "log", 261 | "net2", 262 | ] 263 | 264 | [[package]] 265 | name = "actix-threadpool" 266 | version = "0.3.1" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | checksum = "cf4082192601de5f303013709ff84d81ca6a1bc4af7fb24f367a500a23c6e84e" 269 | dependencies = [ 270 | "derive_more", 271 | "futures-channel", 272 | "lazy_static", 273 | "log", 274 | "num_cpus", 275 | "parking_lot", 276 | "threadpool", 277 | ] 278 | 279 | [[package]] 280 | name = "actix-tls" 281 | version = "1.0.0" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "a4e5b4faaf105e9a6d389c606c298dcdb033061b00d532af9df56ff3a54995a8" 284 | dependencies = [ 285 | "actix-codec", 286 | "actix-rt", 287 | "actix-service", 288 | "actix-utils", 289 | "derive_more", 290 | "either", 291 | "futures 0.3.4", 292 | "log", 293 | ] 294 | 295 | [[package]] 296 | name = "actix-utils" 297 | version = "1.0.6" 298 | source = "registry+https://github.com/rust-lang/crates.io-index" 299 | checksum = "fcf8f5631bf01adec2267808f00e228b761c60c0584cc9fa0b5364f41d147f4e" 300 | dependencies = [ 301 | "actix-codec", 302 | "actix-rt", 303 | "actix-service", 304 | "bitflags", 305 | "bytes", 306 | "either", 307 | "futures 0.3.4", 308 | "log", 309 | "pin-project", 310 | "slab", 311 | ] 312 | 313 | [[package]] 314 | name = "actix-web" 315 | version = "2.0.0" 316 | source = "registry+https://github.com/rust-lang/crates.io-index" 317 | checksum = "3158e822461040822f0dbf1735b9c2ce1f95f93b651d7a7aded00b1efbb1f635" 318 | dependencies = [ 319 | "actix-codec", 320 | "actix-http", 321 | "actix-macros", 322 | "actix-router", 323 | "actix-rt", 324 | "actix-server", 325 | "actix-service", 326 | "actix-testing", 327 | "actix-threadpool", 328 | "actix-tls", 329 | "actix-utils", 330 | "actix-web-codegen", 331 | "awc", 332 | "bytes", 333 | "derive_more", 334 | "encoding_rs", 335 | "futures 0.3.4", 336 | "fxhash", 337 | "log", 338 | "mime", 339 | "net2", 340 | "pin-project", 341 | "regex", 342 | "serde", 343 | "serde_json", 344 | "serde_urlencoded", 345 | "time 0.1.42", 346 | "url", 347 | ] 348 | 349 | [[package]] 350 | name = "actix-web-codegen" 351 | version = "0.2.1" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "4f00371942083469785f7e28c540164af1913ee7c96a4534acb9cea92c39f057" 354 | dependencies = [ 355 | "proc-macro2 1.0.10", 356 | "quote 1.0.3", 357 | "syn 1.0.17", 358 | ] 359 | 360 | [[package]] 361 | name = "actix_derive" 362 | version = "0.5.0" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "b95aceadaf327f18f0df5962fedc1bde2f870566a0b9f65c89508a3b1f79334c" 365 | dependencies = [ 366 | "proc-macro2 1.0.10", 367 | "quote 1.0.3", 368 | "syn 1.0.17", 369 | ] 370 | 371 | [[package]] 372 | name = "adler32" 373 | version = "1.0.4" 374 | source = "registry+https://github.com/rust-lang/crates.io-index" 375 | checksum = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2" 376 | 377 | [[package]] 378 | name = "aho-corasick" 379 | version = "0.7.10" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada" 382 | dependencies = [ 383 | "memchr", 384 | ] 385 | 386 | [[package]] 387 | name = "annotate-snippets" 388 | version = "0.6.1" 389 | source = "registry+https://github.com/rust-lang/crates.io-index" 390 | checksum = "c7021ce4924a3f25f802b2cccd1af585e39ea1a363a1aa2e72afe54b67a3a7a7" 391 | dependencies = [ 392 | "ansi_term", 393 | ] 394 | 395 | [[package]] 396 | name = "ansi_colours" 397 | version = "1.0.1" 398 | source = "registry+https://github.com/rust-lang/crates.io-index" 399 | checksum = "1d0f302a81afc6a7f4350c04f0ba7cfab529cc009bca3324b3fb5764e6add8b6" 400 | dependencies = [ 401 | "cc", 402 | ] 403 | 404 | [[package]] 405 | name = "ansi_term" 406 | version = "0.11.0" 407 | source = "registry+https://github.com/rust-lang/crates.io-index" 408 | checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" 409 | dependencies = [ 410 | "winapi 0.3.8", 411 | ] 412 | 413 | [[package]] 414 | name = "arc-swap" 415 | version = "0.4.5" 416 | source = "registry+https://github.com/rust-lang/crates.io-index" 417 | checksum = "d663a8e9a99154b5fb793032533f6328da35e23aac63d5c152279aa8ba356825" 418 | 419 | [[package]] 420 | name = "argonautica" 421 | version = "0.2.0" 422 | source = "registry+https://github.com/rust-lang/crates.io-index" 423 | checksum = "b765e206f4ab068271148430e0799aa84d81b8a13680c680f29f6c1d67da5f37" 424 | dependencies = [ 425 | "base64 0.10.1", 426 | "bindgen", 427 | "bitflags", 428 | "cc", 429 | "cfg-if", 430 | "failure", 431 | "futures 0.1.29", 432 | "futures-cpupool", 433 | "libc", 434 | "log", 435 | "nom 4.2.3", 436 | "num_cpus", 437 | "rand 0.6.5", 438 | "scopeguard 1.1.0", 439 | "tempdir", 440 | ] 441 | 442 | [[package]] 443 | name = "arrayref" 444 | version = "0.3.6" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" 447 | 448 | [[package]] 449 | name = "arrayvec" 450 | version = "0.4.12" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" 453 | dependencies = [ 454 | "nodrop", 455 | ] 456 | 457 | [[package]] 458 | name = "arrayvec" 459 | version = "0.5.1" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8" 462 | 463 | [[package]] 464 | name = "ascii_utils" 465 | version = "0.9.3" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" 468 | 469 | [[package]] 470 | name = "async-trait" 471 | version = "0.1.30" 472 | source = "registry+https://github.com/rust-lang/crates.io-index" 473 | checksum = "da71fef07bc806586090247e971229289f64c210a278ee5ae419314eb386b31d" 474 | dependencies = [ 475 | "proc-macro2 1.0.10", 476 | "quote 1.0.3", 477 | "syn 1.0.17", 478 | ] 479 | 480 | [[package]] 481 | name = "atty" 482 | version = "0.2.14" 483 | source = "registry+https://github.com/rust-lang/crates.io-index" 484 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" 485 | dependencies = [ 486 | "hermit-abi", 487 | "libc", 488 | "winapi 0.3.8", 489 | ] 490 | 491 | [[package]] 492 | name = "auth_service" 493 | version = "0.1.0" 494 | dependencies = [ 495 | "actix-cors", 496 | "actix-files", 497 | "actix-redis", 498 | "actix-rt", 499 | "actix-session", 500 | "actix-web", 501 | "argonautica", 502 | "chrono", 503 | "derive_more", 504 | "diesel", 505 | "dotenv", 506 | "env_logger 0.7.1", 507 | "lettre", 508 | "native-tls", 509 | "r2d2", 510 | "serde", 511 | "serde_json", 512 | "uuid", 513 | "yarte", 514 | ] 515 | 516 | [[package]] 517 | name = "autocfg" 518 | version = "0.1.7" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" 521 | 522 | [[package]] 523 | name = "autocfg" 524 | version = "1.0.0" 525 | source = "registry+https://github.com/rust-lang/crates.io-index" 526 | checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" 527 | 528 | [[package]] 529 | name = "awc" 530 | version = "1.0.1" 531 | source = "registry+https://github.com/rust-lang/crates.io-index" 532 | checksum = "d7601d4d1d7ef2335d6597a41b5fe069f6ab799b85f53565ab390e7b7065aac5" 533 | dependencies = [ 534 | "actix-codec", 535 | "actix-http", 536 | "actix-rt", 537 | "actix-service", 538 | "base64 0.11.0", 539 | "bytes", 540 | "derive_more", 541 | "futures-core", 542 | "log", 543 | "mime", 544 | "percent-encoding", 545 | "rand 0.7.3", 546 | "serde", 547 | "serde_json", 548 | "serde_urlencoded", 549 | ] 550 | 551 | [[package]] 552 | name = "backoff" 553 | version = "0.1.6" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | checksum = "66483433ebf577e03c6546df761778e4cc40b00e5a1ea7ed850733ffb555d71f" 556 | dependencies = [ 557 | "instant", 558 | "rand 0.6.5", 559 | ] 560 | 561 | [[package]] 562 | name = "backtrace" 563 | version = "0.3.46" 564 | source = "registry+https://github.com/rust-lang/crates.io-index" 565 | checksum = "b1e692897359247cc6bb902933361652380af0f1b7651ae5c5013407f30e109e" 566 | dependencies = [ 567 | "backtrace-sys", 568 | "cfg-if", 569 | "libc", 570 | "rustc-demangle", 571 | ] 572 | 573 | [[package]] 574 | name = "backtrace-sys" 575 | version = "0.1.35" 576 | source = "registry+https://github.com/rust-lang/crates.io-index" 577 | checksum = "7de8aba10a69c8e8d7622c5710229485ec32e9d55fdad160ea559c086fdcd118" 578 | dependencies = [ 579 | "cc", 580 | "libc", 581 | ] 582 | 583 | [[package]] 584 | name = "base-x" 585 | version = "0.2.6" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "1b20b618342cf9891c292c4f5ac2cde7287cc5c87e87e9c769d617793607dec1" 588 | 589 | [[package]] 590 | name = "base64" 591 | version = "0.9.3" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643" 594 | dependencies = [ 595 | "byteorder", 596 | "safemem", 597 | ] 598 | 599 | [[package]] 600 | name = "base64" 601 | version = "0.10.1" 602 | source = "registry+https://github.com/rust-lang/crates.io-index" 603 | checksum = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e" 604 | dependencies = [ 605 | "byteorder", 606 | ] 607 | 608 | [[package]] 609 | name = "base64" 610 | version = "0.11.0" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" 613 | 614 | [[package]] 615 | name = "bincode" 616 | version = "1.2.1" 617 | source = "registry+https://github.com/rust-lang/crates.io-index" 618 | checksum = "5753e2a71534719bf3f4e57006c3a4f0d2c672a4b676eec84161f763eca87dbf" 619 | dependencies = [ 620 | "byteorder", 621 | "serde", 622 | ] 623 | 624 | [[package]] 625 | name = "bindgen" 626 | version = "0.48.1" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "9d3d411fd93fd296e613bdac1d16755a6a922a4738e1c8f6a5e13542c905f3ca" 629 | dependencies = [ 630 | "bitflags", 631 | "cexpr", 632 | "cfg-if", 633 | "clang-sys", 634 | "clap", 635 | "env_logger 0.6.2", 636 | "hashbrown", 637 | "lazy_static", 638 | "log", 639 | "peeking_take_while", 640 | "proc-macro2 0.4.30", 641 | "quote 0.6.13", 642 | "regex", 643 | "which", 644 | ] 645 | 646 | [[package]] 647 | name = "bitflags" 648 | version = "1.2.1" 649 | source = "registry+https://github.com/rust-lang/crates.io-index" 650 | checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" 651 | 652 | [[package]] 653 | name = "blake2b_simd" 654 | version = "0.5.10" 655 | source = "registry+https://github.com/rust-lang/crates.io-index" 656 | checksum = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a" 657 | dependencies = [ 658 | "arrayref", 659 | "arrayvec 0.5.1", 660 | "constant_time_eq", 661 | ] 662 | 663 | [[package]] 664 | name = "brotli-sys" 665 | version = "0.3.2" 666 | source = "registry+https://github.com/rust-lang/crates.io-index" 667 | checksum = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" 668 | dependencies = [ 669 | "cc", 670 | "libc", 671 | ] 672 | 673 | [[package]] 674 | name = "brotli2" 675 | version = "0.3.2" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" 678 | dependencies = [ 679 | "brotli-sys", 680 | "libc", 681 | ] 682 | 683 | [[package]] 684 | name = "bufstream" 685 | version = "0.1.4" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | checksum = "40e38929add23cdf8a366df9b0e088953150724bcbe5fc330b0d8eb3b328eec8" 688 | 689 | [[package]] 690 | name = "bumpalo" 691 | version = "3.2.1" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | checksum = "12ae9db68ad7fac5fe51304d20f016c911539251075a214f8e663babefa35187" 694 | 695 | [[package]] 696 | name = "byteorder" 697 | version = "1.3.4" 698 | source = "registry+https://github.com/rust-lang/crates.io-index" 699 | checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" 700 | 701 | [[package]] 702 | name = "bytes" 703 | version = "0.5.4" 704 | source = "registry+https://github.com/rust-lang/crates.io-index" 705 | checksum = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1" 706 | 707 | [[package]] 708 | name = "bytestring" 709 | version = "0.1.5" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "fc7c05fa5172da78a62d9949d662d2ac89d4cc7355d7b49adee5163f1fb3f363" 712 | dependencies = [ 713 | "bytes", 714 | ] 715 | 716 | [[package]] 717 | name = "cc" 718 | version = "1.0.50" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "95e28fa049fda1c330bcf9d723be7663a899c4679724b34c81e9f5a326aab8cd" 721 | dependencies = [ 722 | "jobserver", 723 | ] 724 | 725 | [[package]] 726 | name = "cexpr" 727 | version = "0.3.6" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | checksum = "fce5b5fb86b0c57c20c834c1b412fd09c77c8a59b9473f86272709e78874cd1d" 730 | dependencies = [ 731 | "nom 4.2.3", 732 | ] 733 | 734 | [[package]] 735 | name = "cfg-if" 736 | version = "0.1.10" 737 | source = "registry+https://github.com/rust-lang/crates.io-index" 738 | checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" 739 | 740 | [[package]] 741 | name = "chrono" 742 | version = "0.4.11" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "80094f509cf8b5ae86a4966a39b3ff66cd7e2a3e594accec3743ff3fabeab5b2" 745 | dependencies = [ 746 | "num-integer", 747 | "num-traits", 748 | "serde", 749 | "time 0.1.42", 750 | ] 751 | 752 | [[package]] 753 | name = "clang-sys" 754 | version = "0.26.4" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "6ef0c1bcf2e99c649104bd7a7012d8f8802684400e03db0ec0af48583c6fa0e4" 757 | dependencies = [ 758 | "glob", 759 | "libc", 760 | "libloading", 761 | ] 762 | 763 | [[package]] 764 | name = "clap" 765 | version = "2.33.0" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9" 768 | dependencies = [ 769 | "ansi_term", 770 | "atty", 771 | "bitflags", 772 | "strsim 0.8.0", 773 | "textwrap", 774 | "unicode-width", 775 | "vec_map", 776 | ] 777 | 778 | [[package]] 779 | name = "clicolors-control" 780 | version = "1.0.1" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "90082ee5dcdd64dc4e9e0d37fbf3ee325419e39c0092191e0393df65518f741e" 783 | dependencies = [ 784 | "atty", 785 | "lazy_static", 786 | "libc", 787 | "winapi 0.3.8", 788 | ] 789 | 790 | [[package]] 791 | name = "cloudabi" 792 | version = "0.0.3" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 795 | dependencies = [ 796 | "bitflags", 797 | ] 798 | 799 | [[package]] 800 | name = "console" 801 | version = "0.7.7" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | checksum = "8ca57c2c14b8a2bf3105bc9d15574aad80babf6a9c44b1058034cdf8bd169628" 804 | dependencies = [ 805 | "atty", 806 | "clicolors-control", 807 | "encode_unicode", 808 | "lazy_static", 809 | "libc", 810 | "parking_lot", 811 | "regex", 812 | "termios", 813 | "unicode-width", 814 | "winapi 0.3.8", 815 | ] 816 | 817 | [[package]] 818 | name = "constant_time_eq" 819 | version = "0.1.5" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" 822 | 823 | [[package]] 824 | name = "content_inspector" 825 | version = "0.2.4" 826 | source = "registry+https://github.com/rust-lang/crates.io-index" 827 | checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38" 828 | dependencies = [ 829 | "memchr", 830 | ] 831 | 832 | [[package]] 833 | name = "copyless" 834 | version = "0.1.4" 835 | source = "registry+https://github.com/rust-lang/crates.io-index" 836 | checksum = "6ff9c56c9fb2a49c05ef0e431485a22400af20d33226dc0764d891d09e724127" 837 | 838 | [[package]] 839 | name = "core-foundation" 840 | version = "0.7.0" 841 | source = "registry+https://github.com/rust-lang/crates.io-index" 842 | checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" 843 | dependencies = [ 844 | "core-foundation-sys", 845 | "libc", 846 | ] 847 | 848 | [[package]] 849 | name = "core-foundation-sys" 850 | version = "0.7.0" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" 853 | 854 | [[package]] 855 | name = "crc32fast" 856 | version = "1.2.0" 857 | source = "registry+https://github.com/rust-lang/crates.io-index" 858 | checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" 859 | dependencies = [ 860 | "cfg-if", 861 | ] 862 | 863 | [[package]] 864 | name = "crossbeam-channel" 865 | version = "0.4.2" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061" 868 | dependencies = [ 869 | "crossbeam-utils", 870 | "maybe-uninit", 871 | ] 872 | 873 | [[package]] 874 | name = "crossbeam-utils" 875 | version = "0.7.2" 876 | source = "registry+https://github.com/rust-lang/crates.io-index" 877 | checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8" 878 | dependencies = [ 879 | "autocfg 1.0.0", 880 | "cfg-if", 881 | "lazy_static", 882 | ] 883 | 884 | [[package]] 885 | name = "darling" 886 | version = "0.9.0" 887 | source = "registry+https://github.com/rust-lang/crates.io-index" 888 | checksum = "fcfbcb0c5961907597a7d1148e3af036268f2b773886b8bb3eeb1e1281d3d3d6" 889 | dependencies = [ 890 | "darling_core", 891 | "darling_macro", 892 | ] 893 | 894 | [[package]] 895 | name = "darling_core" 896 | version = "0.9.0" 897 | source = "registry+https://github.com/rust-lang/crates.io-index" 898 | checksum = "6afc018370c3bff3eb51f89256a6bdb18b4fdcda72d577982a14954a7a0b402c" 899 | dependencies = [ 900 | "fnv", 901 | "ident_case", 902 | "proc-macro2 0.4.30", 903 | "quote 0.6.13", 904 | "strsim 0.7.0", 905 | "syn 0.15.44", 906 | ] 907 | 908 | [[package]] 909 | name = "darling_macro" 910 | version = "0.9.0" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "c6d8dac1c6f1d29a41c4712b4400f878cb4fcc4c7628f298dd75038e024998d1" 913 | dependencies = [ 914 | "darling_core", 915 | "quote 0.6.13", 916 | "syn 0.15.44", 917 | ] 918 | 919 | [[package]] 920 | name = "derive_builder" 921 | version = "0.7.2" 922 | source = "registry+https://github.com/rust-lang/crates.io-index" 923 | checksum = "3ac53fa6a3cda160df823a9346442525dcaf1e171999a1cf23e67067e4fd64d4" 924 | dependencies = [ 925 | "darling", 926 | "derive_builder_core", 927 | "proc-macro2 0.4.30", 928 | "quote 0.6.13", 929 | "syn 0.15.44", 930 | ] 931 | 932 | [[package]] 933 | name = "derive_builder_core" 934 | version = "0.5.0" 935 | source = "registry+https://github.com/rust-lang/crates.io-index" 936 | checksum = "0288a23da9333c246bb18c143426074a6ae96747995c5819d2947b64cd942b37" 937 | dependencies = [ 938 | "darling", 939 | "proc-macro2 0.4.30", 940 | "quote 0.6.13", 941 | "syn 0.15.44", 942 | ] 943 | 944 | [[package]] 945 | name = "derive_more" 946 | version = "0.99.5" 947 | source = "registry+https://github.com/rust-lang/crates.io-index" 948 | checksum = "e2323f3f47db9a0e77ce7a300605d8d2098597fc451ed1a97bb1f6411bb550a7" 949 | dependencies = [ 950 | "proc-macro2 1.0.10", 951 | "quote 1.0.3", 952 | "syn 1.0.17", 953 | ] 954 | 955 | [[package]] 956 | name = "diesel" 957 | version = "1.4.4" 958 | source = "registry+https://github.com/rust-lang/crates.io-index" 959 | checksum = "33d7ca63eb2efea87a7f56a283acc49e2ce4b2bd54adf7465dc1d81fef13d8fc" 960 | dependencies = [ 961 | "bitflags", 962 | "byteorder", 963 | "chrono", 964 | "diesel_derives", 965 | "pq-sys", 966 | "r2d2", 967 | "uuid", 968 | ] 969 | 970 | [[package]] 971 | name = "diesel_derives" 972 | version = "1.4.1" 973 | source = "registry+https://github.com/rust-lang/crates.io-index" 974 | checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3" 975 | dependencies = [ 976 | "proc-macro2 1.0.10", 977 | "quote 1.0.3", 978 | "syn 1.0.17", 979 | ] 980 | 981 | [[package]] 982 | name = "directories" 983 | version = "1.0.2" 984 | source = "registry+https://github.com/rust-lang/crates.io-index" 985 | checksum = "72d337a64190607d4fcca2cb78982c5dd57f4916e19696b48a575fa746b6cb0f" 986 | dependencies = [ 987 | "libc", 988 | "winapi 0.3.8", 989 | ] 990 | 991 | [[package]] 992 | name = "dirs" 993 | version = "1.0.5" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" 996 | dependencies = [ 997 | "libc", 998 | "redox_users", 999 | "winapi 0.3.8", 1000 | ] 1001 | 1002 | [[package]] 1003 | name = "discard" 1004 | version = "1.0.4" 1005 | source = "registry+https://github.com/rust-lang/crates.io-index" 1006 | checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" 1007 | 1008 | [[package]] 1009 | name = "dotenv" 1010 | version = "0.15.0" 1011 | source = "registry+https://github.com/rust-lang/crates.io-index" 1012 | checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" 1013 | 1014 | [[package]] 1015 | name = "dtoa" 1016 | version = "0.4.5" 1017 | source = "registry+https://github.com/rust-lang/crates.io-index" 1018 | checksum = "4358a9e11b9a09cf52383b451b49a169e8d797b68aa02301ff586d70d9661ea3" 1019 | 1020 | [[package]] 1021 | name = "either" 1022 | version = "1.5.3" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | checksum = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" 1025 | 1026 | [[package]] 1027 | name = "email" 1028 | version = "0.0.20" 1029 | source = "registry+https://github.com/rust-lang/crates.io-index" 1030 | checksum = "91549a51bb0241165f13d57fc4c72cef063b4088fb078b019ecbf464a45f22e4" 1031 | dependencies = [ 1032 | "base64 0.9.3", 1033 | "chrono", 1034 | "encoding", 1035 | "lazy_static", 1036 | "rand 0.4.6", 1037 | "time 0.1.42", 1038 | "version_check 0.1.5", 1039 | ] 1040 | 1041 | [[package]] 1042 | name = "encode_unicode" 1043 | version = "0.3.6" 1044 | source = "registry+https://github.com/rust-lang/crates.io-index" 1045 | checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" 1046 | 1047 | [[package]] 1048 | name = "encoding" 1049 | version = "0.2.33" 1050 | source = "registry+https://github.com/rust-lang/crates.io-index" 1051 | checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" 1052 | dependencies = [ 1053 | "encoding-index-japanese", 1054 | "encoding-index-korean", 1055 | "encoding-index-simpchinese", 1056 | "encoding-index-singlebyte", 1057 | "encoding-index-tradchinese", 1058 | ] 1059 | 1060 | [[package]] 1061 | name = "encoding-index-japanese" 1062 | version = "1.20141219.5" 1063 | source = "registry+https://github.com/rust-lang/crates.io-index" 1064 | checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" 1065 | dependencies = [ 1066 | "encoding_index_tests", 1067 | ] 1068 | 1069 | [[package]] 1070 | name = "encoding-index-korean" 1071 | version = "1.20141219.5" 1072 | source = "registry+https://github.com/rust-lang/crates.io-index" 1073 | checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" 1074 | dependencies = [ 1075 | "encoding_index_tests", 1076 | ] 1077 | 1078 | [[package]] 1079 | name = "encoding-index-simpchinese" 1080 | version = "1.20141219.5" 1081 | source = "registry+https://github.com/rust-lang/crates.io-index" 1082 | checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" 1083 | dependencies = [ 1084 | "encoding_index_tests", 1085 | ] 1086 | 1087 | [[package]] 1088 | name = "encoding-index-singlebyte" 1089 | version = "1.20141219.5" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" 1092 | dependencies = [ 1093 | "encoding_index_tests", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "encoding-index-tradchinese" 1098 | version = "1.20141219.5" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" 1101 | dependencies = [ 1102 | "encoding_index_tests", 1103 | ] 1104 | 1105 | [[package]] 1106 | name = "encoding_index_tests" 1107 | version = "0.1.4" 1108 | source = "registry+https://github.com/rust-lang/crates.io-index" 1109 | checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" 1110 | 1111 | [[package]] 1112 | name = "encoding_rs" 1113 | version = "0.8.22" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "cd8d03faa7fe0c1431609dfad7bbe827af30f82e1e2ae6f7ee4fca6bd764bc28" 1116 | dependencies = [ 1117 | "cfg-if", 1118 | ] 1119 | 1120 | [[package]] 1121 | name = "enum-as-inner" 1122 | version = "0.3.2" 1123 | source = "registry+https://github.com/rust-lang/crates.io-index" 1124 | checksum = "bc4bfcfacb61d231109d1d55202c1f33263319668b168843e02ad4652725ec9c" 1125 | dependencies = [ 1126 | "heck", 1127 | "proc-macro2 1.0.10", 1128 | "quote 1.0.3", 1129 | "syn 1.0.17", 1130 | ] 1131 | 1132 | [[package]] 1133 | name = "env_logger" 1134 | version = "0.6.2" 1135 | source = "registry+https://github.com/rust-lang/crates.io-index" 1136 | checksum = "aafcde04e90a5226a6443b7aabdb016ba2f8307c847d524724bd9b346dd1a2d3" 1137 | dependencies = [ 1138 | "atty", 1139 | "humantime", 1140 | "log", 1141 | "regex", 1142 | "termcolor", 1143 | ] 1144 | 1145 | [[package]] 1146 | name = "env_logger" 1147 | version = "0.7.1" 1148 | source = "registry+https://github.com/rust-lang/crates.io-index" 1149 | checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" 1150 | dependencies = [ 1151 | "atty", 1152 | "humantime", 1153 | "log", 1154 | "regex", 1155 | "termcolor", 1156 | ] 1157 | 1158 | [[package]] 1159 | name = "error-chain" 1160 | version = "0.12.2" 1161 | source = "registry+https://github.com/rust-lang/crates.io-index" 1162 | checksum = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd" 1163 | dependencies = [ 1164 | "backtrace", 1165 | "version_check 0.9.1", 1166 | ] 1167 | 1168 | [[package]] 1169 | name = "failure" 1170 | version = "0.1.7" 1171 | source = "registry+https://github.com/rust-lang/crates.io-index" 1172 | checksum = "b8529c2421efa3066a5cbd8063d2244603824daccb6936b079010bb2aa89464b" 1173 | dependencies = [ 1174 | "backtrace", 1175 | "failure_derive", 1176 | ] 1177 | 1178 | [[package]] 1179 | name = "failure_derive" 1180 | version = "0.1.7" 1181 | source = "registry+https://github.com/rust-lang/crates.io-index" 1182 | checksum = "030a733c8287d6213886dd487564ff5c8f6aae10278b3588ed177f9d18f8d231" 1183 | dependencies = [ 1184 | "proc-macro2 1.0.10", 1185 | "quote 1.0.3", 1186 | "syn 1.0.17", 1187 | "synstructure", 1188 | ] 1189 | 1190 | [[package]] 1191 | name = "fast_chemail" 1192 | version = "0.9.6" 1193 | source = "registry+https://github.com/rust-lang/crates.io-index" 1194 | checksum = "495a39d30d624c2caabe6312bfead73e7717692b44e0b32df168c275a2e8e9e4" 1195 | dependencies = [ 1196 | "ascii_utils", 1197 | ] 1198 | 1199 | [[package]] 1200 | name = "flate2" 1201 | version = "1.0.14" 1202 | source = "registry+https://github.com/rust-lang/crates.io-index" 1203 | checksum = "2cfff41391129e0a856d6d822600b8d71179d46879e310417eb9c762eb178b42" 1204 | dependencies = [ 1205 | "cfg-if", 1206 | "crc32fast", 1207 | "libc", 1208 | "miniz_oxide", 1209 | ] 1210 | 1211 | [[package]] 1212 | name = "fnv" 1213 | version = "1.0.6" 1214 | source = "registry+https://github.com/rust-lang/crates.io-index" 1215 | checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1216 | 1217 | [[package]] 1218 | name = "foreign-types" 1219 | version = "0.3.2" 1220 | source = "registry+https://github.com/rust-lang/crates.io-index" 1221 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1222 | dependencies = [ 1223 | "foreign-types-shared", 1224 | ] 1225 | 1226 | [[package]] 1227 | name = "foreign-types-shared" 1228 | version = "0.1.1" 1229 | source = "registry+https://github.com/rust-lang/crates.io-index" 1230 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1231 | 1232 | [[package]] 1233 | name = "fuchsia-cprng" 1234 | version = "0.1.1" 1235 | source = "registry+https://github.com/rust-lang/crates.io-index" 1236 | checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" 1237 | 1238 | [[package]] 1239 | name = "fuchsia-zircon" 1240 | version = "0.3.3" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1243 | dependencies = [ 1244 | "bitflags", 1245 | "fuchsia-zircon-sys", 1246 | ] 1247 | 1248 | [[package]] 1249 | name = "fuchsia-zircon-sys" 1250 | version = "0.3.3" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1253 | 1254 | [[package]] 1255 | name = "futf" 1256 | version = "0.1.4" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | checksum = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b" 1259 | dependencies = [ 1260 | "mac", 1261 | "new_debug_unreachable", 1262 | ] 1263 | 1264 | [[package]] 1265 | name = "futures" 1266 | version = "0.1.29" 1267 | source = "registry+https://github.com/rust-lang/crates.io-index" 1268 | checksum = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" 1269 | 1270 | [[package]] 1271 | name = "futures" 1272 | version = "0.3.4" 1273 | source = "registry+https://github.com/rust-lang/crates.io-index" 1274 | checksum = "5c329ae8753502fb44ae4fc2b622fa2a94652c41e795143765ba0927f92ab780" 1275 | dependencies = [ 1276 | "futures-channel", 1277 | "futures-core", 1278 | "futures-executor", 1279 | "futures-io", 1280 | "futures-sink", 1281 | "futures-task", 1282 | "futures-util", 1283 | ] 1284 | 1285 | [[package]] 1286 | name = "futures-channel" 1287 | version = "0.3.4" 1288 | source = "registry+https://github.com/rust-lang/crates.io-index" 1289 | checksum = "f0c77d04ce8edd9cb903932b608268b3fffec4163dc053b3b402bf47eac1f1a8" 1290 | dependencies = [ 1291 | "futures-core", 1292 | "futures-sink", 1293 | ] 1294 | 1295 | [[package]] 1296 | name = "futures-core" 1297 | version = "0.3.4" 1298 | source = "registry+https://github.com/rust-lang/crates.io-index" 1299 | checksum = "f25592f769825e89b92358db00d26f965761e094951ac44d3663ef25b7ac464a" 1300 | 1301 | [[package]] 1302 | name = "futures-cpupool" 1303 | version = "0.1.8" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 1306 | dependencies = [ 1307 | "futures 0.1.29", 1308 | "num_cpus", 1309 | ] 1310 | 1311 | [[package]] 1312 | name = "futures-executor" 1313 | version = "0.3.4" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "f674f3e1bcb15b37284a90cedf55afdba482ab061c407a9c0ebbd0f3109741ba" 1316 | dependencies = [ 1317 | "futures-core", 1318 | "futures-task", 1319 | "futures-util", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "futures-io" 1324 | version = "0.3.4" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "a638959aa96152c7a4cddf50fcb1e3fede0583b27157c26e67d6f99904090dc6" 1327 | 1328 | [[package]] 1329 | name = "futures-macro" 1330 | version = "0.3.4" 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" 1332 | checksum = "9a5081aa3de1f7542a794a397cde100ed903b0630152d0973479018fd85423a7" 1333 | dependencies = [ 1334 | "proc-macro-hack", 1335 | "proc-macro2 1.0.10", 1336 | "quote 1.0.3", 1337 | "syn 1.0.17", 1338 | ] 1339 | 1340 | [[package]] 1341 | name = "futures-sink" 1342 | version = "0.3.4" 1343 | source = "registry+https://github.com/rust-lang/crates.io-index" 1344 | checksum = "3466821b4bc114d95b087b850a724c6f83115e929bc88f1fa98a3304a944c8a6" 1345 | 1346 | [[package]] 1347 | name = "futures-task" 1348 | version = "0.3.4" 1349 | source = "registry+https://github.com/rust-lang/crates.io-index" 1350 | checksum = "7b0a34e53cf6cdcd0178aa573aed466b646eb3db769570841fda0c7ede375a27" 1351 | 1352 | [[package]] 1353 | name = "futures-util" 1354 | version = "0.3.4" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "22766cf25d64306bedf0384da004d05c9974ab104fcc4528f1236181c18004c5" 1357 | dependencies = [ 1358 | "futures-channel", 1359 | "futures-core", 1360 | "futures-io", 1361 | "futures-macro", 1362 | "futures-sink", 1363 | "futures-task", 1364 | "memchr", 1365 | "pin-utils", 1366 | "proc-macro-hack", 1367 | "proc-macro-nested", 1368 | "slab", 1369 | ] 1370 | 1371 | [[package]] 1372 | name = "fxhash" 1373 | version = "0.2.1" 1374 | source = "registry+https://github.com/rust-lang/crates.io-index" 1375 | checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" 1376 | dependencies = [ 1377 | "byteorder", 1378 | ] 1379 | 1380 | [[package]] 1381 | name = "getrandom" 1382 | version = "0.1.14" 1383 | source = "registry+https://github.com/rust-lang/crates.io-index" 1384 | checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" 1385 | dependencies = [ 1386 | "cfg-if", 1387 | "libc", 1388 | "wasi", 1389 | ] 1390 | 1391 | [[package]] 1392 | name = "glob" 1393 | version = "0.2.11" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" 1396 | 1397 | [[package]] 1398 | name = "h2" 1399 | version = "0.2.4" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "377038bf3c89d18d6ca1431e7a5027194fbd724ca10592b9487ede5e8e144f42" 1402 | dependencies = [ 1403 | "bytes", 1404 | "fnv", 1405 | "futures-core", 1406 | "futures-sink", 1407 | "futures-util", 1408 | "http", 1409 | "indexmap", 1410 | "log", 1411 | "slab", 1412 | "tokio", 1413 | "tokio-util 0.3.1", 1414 | ] 1415 | 1416 | [[package]] 1417 | name = "hashbrown" 1418 | version = "0.1.8" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da" 1421 | dependencies = [ 1422 | "byteorder", 1423 | "scopeguard 0.3.3", 1424 | ] 1425 | 1426 | [[package]] 1427 | name = "heck" 1428 | version = "0.3.1" 1429 | source = "registry+https://github.com/rust-lang/crates.io-index" 1430 | checksum = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205" 1431 | dependencies = [ 1432 | "unicode-segmentation", 1433 | ] 1434 | 1435 | [[package]] 1436 | name = "hermit-abi" 1437 | version = "0.1.10" 1438 | source = "registry+https://github.com/rust-lang/crates.io-index" 1439 | checksum = "725cf19794cf90aa94e65050cb4191ff5d8fa87a498383774c47b332e3af952e" 1440 | dependencies = [ 1441 | "libc", 1442 | ] 1443 | 1444 | [[package]] 1445 | name = "hostname" 1446 | version = "0.3.1" 1447 | source = "registry+https://github.com/rust-lang/crates.io-index" 1448 | checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" 1449 | dependencies = [ 1450 | "libc", 1451 | "match_cfg", 1452 | "winapi 0.3.8", 1453 | ] 1454 | 1455 | [[package]] 1456 | name = "http" 1457 | version = "0.2.1" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "28d569972648b2c512421b5f2a405ad6ac9666547189d0c5477a3f200f3e02f9" 1460 | dependencies = [ 1461 | "bytes", 1462 | "fnv", 1463 | "itoa", 1464 | ] 1465 | 1466 | [[package]] 1467 | name = "httparse" 1468 | version = "1.3.4" 1469 | source = "registry+https://github.com/rust-lang/crates.io-index" 1470 | checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" 1471 | 1472 | [[package]] 1473 | name = "humantime" 1474 | version = "1.3.0" 1475 | source = "registry+https://github.com/rust-lang/crates.io-index" 1476 | checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" 1477 | dependencies = [ 1478 | "quick-error", 1479 | ] 1480 | 1481 | [[package]] 1482 | name = "ident_case" 1483 | version = "1.0.1" 1484 | source = "registry+https://github.com/rust-lang/crates.io-index" 1485 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1486 | 1487 | [[package]] 1488 | name = "idna" 1489 | version = "0.2.0" 1490 | source = "registry+https://github.com/rust-lang/crates.io-index" 1491 | checksum = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9" 1492 | dependencies = [ 1493 | "matches", 1494 | "unicode-bidi", 1495 | "unicode-normalization", 1496 | ] 1497 | 1498 | [[package]] 1499 | name = "indexmap" 1500 | version = "1.3.2" 1501 | source = "registry+https://github.com/rust-lang/crates.io-index" 1502 | checksum = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292" 1503 | dependencies = [ 1504 | "autocfg 1.0.0", 1505 | ] 1506 | 1507 | [[package]] 1508 | name = "instant" 1509 | version = "0.1.2" 1510 | source = "registry+https://github.com/rust-lang/crates.io-index" 1511 | checksum = "6c346c299e3fe8ef94dc10c2c0253d858a69aac1245157a3bf4125915d528caf" 1512 | 1513 | [[package]] 1514 | name = "iovec" 1515 | version = "0.1.4" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" 1518 | dependencies = [ 1519 | "libc", 1520 | ] 1521 | 1522 | [[package]] 1523 | name = "ipconfig" 1524 | version = "0.2.1" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "aa79fa216fbe60834a9c0737d7fcd30425b32d1c58854663e24d4c4b328ed83f" 1527 | dependencies = [ 1528 | "socket2", 1529 | "widestring", 1530 | "winapi 0.3.8", 1531 | "winreg", 1532 | ] 1533 | 1534 | [[package]] 1535 | name = "itoa" 1536 | version = "0.4.5" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e" 1539 | 1540 | [[package]] 1541 | name = "jobserver" 1542 | version = "0.1.21" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | checksum = "5c71313ebb9439f74b00d9d2dcec36440beaf57a6aa0623068441dd7cd81a7f2" 1545 | dependencies = [ 1546 | "libc", 1547 | ] 1548 | 1549 | [[package]] 1550 | name = "js-sys" 1551 | version = "0.3.37" 1552 | source = "registry+https://github.com/rust-lang/crates.io-index" 1553 | checksum = "6a27d435371a2fa5b6d2b028a74bbdb1234f308da363226a2854ca3ff8ba7055" 1554 | dependencies = [ 1555 | "wasm-bindgen", 1556 | ] 1557 | 1558 | [[package]] 1559 | name = "kernel32-sys" 1560 | version = "0.2.2" 1561 | source = "registry+https://github.com/rust-lang/crates.io-index" 1562 | checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1563 | dependencies = [ 1564 | "winapi 0.2.8", 1565 | "winapi-build", 1566 | ] 1567 | 1568 | [[package]] 1569 | name = "language-tags" 1570 | version = "0.2.2" 1571 | source = "registry+https://github.com/rust-lang/crates.io-index" 1572 | checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" 1573 | 1574 | [[package]] 1575 | name = "lazy_static" 1576 | version = "1.4.0" 1577 | source = "registry+https://github.com/rust-lang/crates.io-index" 1578 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" 1579 | 1580 | [[package]] 1581 | name = "lazycell" 1582 | version = "1.2.1" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" 1585 | 1586 | [[package]] 1587 | name = "lettre" 1588 | version = "0.10.0-pre" 1589 | source = "git+https://github.com/lettre/lettre#a440ae5c79a18242a376deb0c28426ef092e32ab" 1590 | dependencies = [ 1591 | "base64 0.11.0", 1592 | "bufstream", 1593 | "email", 1594 | "fast_chemail", 1595 | "hostname", 1596 | "log", 1597 | "mime", 1598 | "native-tls", 1599 | "nom 5.1.1", 1600 | "serde", 1601 | "serde_json", 1602 | "time 0.2.9", 1603 | "uuid", 1604 | ] 1605 | 1606 | [[package]] 1607 | name = "lexical-core" 1608 | version = "0.6.2" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "d7043aa5c05dd34fb73b47acb8c3708eac428de4545ea3682ed2f11293ebd890" 1611 | dependencies = [ 1612 | "arrayvec 0.4.12", 1613 | "cfg-if", 1614 | "rustc_version", 1615 | "ryu", 1616 | "static_assertions", 1617 | ] 1618 | 1619 | [[package]] 1620 | name = "libc" 1621 | version = "0.2.68" 1622 | source = "registry+https://github.com/rust-lang/crates.io-index" 1623 | checksum = "dea0c0405123bba743ee3f91f49b1c7cfb684eef0da0a50110f758ccf24cdff0" 1624 | 1625 | [[package]] 1626 | name = "libloading" 1627 | version = "0.5.2" 1628 | source = "registry+https://github.com/rust-lang/crates.io-index" 1629 | checksum = "f2b111a074963af1d37a139918ac6d49ad1d0d5e47f72fd55388619691a7d753" 1630 | dependencies = [ 1631 | "cc", 1632 | "winapi 0.3.8", 1633 | ] 1634 | 1635 | [[package]] 1636 | name = "line-wrap" 1637 | version = "0.1.1" 1638 | source = "registry+https://github.com/rust-lang/crates.io-index" 1639 | checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" 1640 | dependencies = [ 1641 | "safemem", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "linked-hash-map" 1646 | version = "0.5.2" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | checksum = "ae91b68aebc4ddb91978b11a1b02ddd8602a05ec19002801c5666000e05e0f83" 1649 | 1650 | [[package]] 1651 | name = "lock_api" 1652 | version = "0.3.3" 1653 | source = "registry+https://github.com/rust-lang/crates.io-index" 1654 | checksum = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b" 1655 | dependencies = [ 1656 | "scopeguard 1.1.0", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "log" 1661 | version = "0.4.8" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" 1664 | dependencies = [ 1665 | "cfg-if", 1666 | ] 1667 | 1668 | [[package]] 1669 | name = "lru-cache" 1670 | version = "0.1.2" 1671 | source = "registry+https://github.com/rust-lang/crates.io-index" 1672 | checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" 1673 | dependencies = [ 1674 | "linked-hash-map", 1675 | ] 1676 | 1677 | [[package]] 1678 | name = "mac" 1679 | version = "0.1.1" 1680 | source = "registry+https://github.com/rust-lang/crates.io-index" 1681 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1682 | 1683 | [[package]] 1684 | name = "markup5ever" 1685 | version = "0.10.0" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | checksum = "aae38d669396ca9b707bfc3db254bc382ddb94f57cc5c235f34623a669a01dab" 1688 | dependencies = [ 1689 | "log", 1690 | "phf", 1691 | "phf_codegen", 1692 | "serde", 1693 | "serde_derive", 1694 | "serde_json", 1695 | "string_cache", 1696 | "string_cache_codegen", 1697 | "tendril", 1698 | ] 1699 | 1700 | [[package]] 1701 | name = "match_cfg" 1702 | version = "0.1.0" 1703 | source = "registry+https://github.com/rust-lang/crates.io-index" 1704 | checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" 1705 | 1706 | [[package]] 1707 | name = "matches" 1708 | version = "0.1.8" 1709 | source = "registry+https://github.com/rust-lang/crates.io-index" 1710 | checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" 1711 | 1712 | [[package]] 1713 | name = "maybe-uninit" 1714 | version = "2.0.0" 1715 | source = "registry+https://github.com/rust-lang/crates.io-index" 1716 | checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" 1717 | 1718 | [[package]] 1719 | name = "memchr" 1720 | version = "2.3.3" 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" 1722 | checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" 1723 | 1724 | [[package]] 1725 | name = "mime" 1726 | version = "0.3.16" 1727 | source = "registry+https://github.com/rust-lang/crates.io-index" 1728 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" 1729 | 1730 | [[package]] 1731 | name = "mime_guess" 1732 | version = "2.0.3" 1733 | source = "registry+https://github.com/rust-lang/crates.io-index" 1734 | checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" 1735 | dependencies = [ 1736 | "mime", 1737 | "unicase", 1738 | ] 1739 | 1740 | [[package]] 1741 | name = "miniz_oxide" 1742 | version = "0.3.6" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5" 1745 | dependencies = [ 1746 | "adler32", 1747 | ] 1748 | 1749 | [[package]] 1750 | name = "mio" 1751 | version = "0.6.21" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" 1754 | dependencies = [ 1755 | "cfg-if", 1756 | "fuchsia-zircon", 1757 | "fuchsia-zircon-sys", 1758 | "iovec", 1759 | "kernel32-sys", 1760 | "libc", 1761 | "log", 1762 | "miow", 1763 | "net2", 1764 | "slab", 1765 | "winapi 0.2.8", 1766 | ] 1767 | 1768 | [[package]] 1769 | name = "mio-uds" 1770 | version = "0.6.7" 1771 | source = "registry+https://github.com/rust-lang/crates.io-index" 1772 | checksum = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" 1773 | dependencies = [ 1774 | "iovec", 1775 | "libc", 1776 | "mio", 1777 | ] 1778 | 1779 | [[package]] 1780 | name = "miow" 1781 | version = "0.2.1" 1782 | source = "registry+https://github.com/rust-lang/crates.io-index" 1783 | checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1784 | dependencies = [ 1785 | "kernel32-sys", 1786 | "net2", 1787 | "winapi 0.2.8", 1788 | "ws2_32-sys", 1789 | ] 1790 | 1791 | [[package]] 1792 | name = "native-tls" 1793 | version = "0.2.4" 1794 | source = "registry+https://github.com/rust-lang/crates.io-index" 1795 | checksum = "2b0d88c06fe90d5ee94048ba40409ef1d9315d86f6f38c2efdaad4fb50c58b2d" 1796 | dependencies = [ 1797 | "lazy_static", 1798 | "libc", 1799 | "log", 1800 | "openssl", 1801 | "openssl-probe", 1802 | "openssl-sys", 1803 | "schannel", 1804 | "security-framework", 1805 | "security-framework-sys", 1806 | "tempfile", 1807 | ] 1808 | 1809 | [[package]] 1810 | name = "net2" 1811 | version = "0.2.33" 1812 | source = "registry+https://github.com/rust-lang/crates.io-index" 1813 | checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" 1814 | dependencies = [ 1815 | "cfg-if", 1816 | "libc", 1817 | "winapi 0.3.8", 1818 | ] 1819 | 1820 | [[package]] 1821 | name = "new_debug_unreachable" 1822 | version = "1.0.4" 1823 | source = "registry+https://github.com/rust-lang/crates.io-index" 1824 | checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" 1825 | 1826 | [[package]] 1827 | name = "nodrop" 1828 | version = "0.1.14" 1829 | source = "registry+https://github.com/rust-lang/crates.io-index" 1830 | checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" 1831 | 1832 | [[package]] 1833 | name = "nom" 1834 | version = "4.2.3" 1835 | source = "registry+https://github.com/rust-lang/crates.io-index" 1836 | checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" 1837 | dependencies = [ 1838 | "memchr", 1839 | "version_check 0.1.5", 1840 | ] 1841 | 1842 | [[package]] 1843 | name = "nom" 1844 | version = "5.1.1" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6" 1847 | dependencies = [ 1848 | "lexical-core", 1849 | "memchr", 1850 | "version_check 0.9.1", 1851 | ] 1852 | 1853 | [[package]] 1854 | name = "num-integer" 1855 | version = "0.1.42" 1856 | source = "registry+https://github.com/rust-lang/crates.io-index" 1857 | checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba" 1858 | dependencies = [ 1859 | "autocfg 1.0.0", 1860 | "num-traits", 1861 | ] 1862 | 1863 | [[package]] 1864 | name = "num-traits" 1865 | version = "0.2.11" 1866 | source = "registry+https://github.com/rust-lang/crates.io-index" 1867 | checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096" 1868 | dependencies = [ 1869 | "autocfg 1.0.0", 1870 | ] 1871 | 1872 | [[package]] 1873 | name = "num_cpus" 1874 | version = "1.12.0" 1875 | source = "registry+https://github.com/rust-lang/crates.io-index" 1876 | checksum = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6" 1877 | dependencies = [ 1878 | "hermit-abi", 1879 | "libc", 1880 | ] 1881 | 1882 | [[package]] 1883 | name = "onig" 1884 | version = "4.3.3" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "8518fcb2b1b8c2f45f0ad499df4fda6087fc3475ca69a185c173b8315d2fb383" 1887 | dependencies = [ 1888 | "bitflags", 1889 | "lazy_static", 1890 | "libc", 1891 | "onig_sys", 1892 | ] 1893 | 1894 | [[package]] 1895 | name = "onig_sys" 1896 | version = "69.1.0" 1897 | source = "registry+https://github.com/rust-lang/crates.io-index" 1898 | checksum = "388410bf5fa341f10e58e6db3975f4bea1ac30247dd79d37a9e5ced3cb4cc3b0" 1899 | dependencies = [ 1900 | "cc", 1901 | "pkg-config", 1902 | ] 1903 | 1904 | [[package]] 1905 | name = "openssl" 1906 | version = "0.10.29" 1907 | source = "registry+https://github.com/rust-lang/crates.io-index" 1908 | checksum = "cee6d85f4cb4c4f59a6a85d5b68a233d280c82e29e822913b9c8b129fbf20bdd" 1909 | dependencies = [ 1910 | "bitflags", 1911 | "cfg-if", 1912 | "foreign-types", 1913 | "lazy_static", 1914 | "libc", 1915 | "openssl-sys", 1916 | ] 1917 | 1918 | [[package]] 1919 | name = "openssl-probe" 1920 | version = "0.1.2" 1921 | source = "registry+https://github.com/rust-lang/crates.io-index" 1922 | checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de" 1923 | 1924 | [[package]] 1925 | name = "openssl-sys" 1926 | version = "0.9.55" 1927 | source = "registry+https://github.com/rust-lang/crates.io-index" 1928 | checksum = "7717097d810a0f2e2323f9e5d11e71608355e24828410b55b9d4f18aa5f9a5d8" 1929 | dependencies = [ 1930 | "autocfg 1.0.0", 1931 | "cc", 1932 | "libc", 1933 | "pkg-config", 1934 | "vcpkg", 1935 | ] 1936 | 1937 | [[package]] 1938 | name = "parking_lot" 1939 | version = "0.10.0" 1940 | source = "registry+https://github.com/rust-lang/crates.io-index" 1941 | checksum = "92e98c49ab0b7ce5b222f2cc9193fc4efe11c6d0bd4f648e374684a6857b1cfc" 1942 | dependencies = [ 1943 | "lock_api", 1944 | "parking_lot_core", 1945 | ] 1946 | 1947 | [[package]] 1948 | name = "parking_lot_core" 1949 | version = "0.7.0" 1950 | source = "registry+https://github.com/rust-lang/crates.io-index" 1951 | checksum = "7582838484df45743c8434fbff785e8edf260c28748353d44bc0da32e0ceabf1" 1952 | dependencies = [ 1953 | "cfg-if", 1954 | "cloudabi", 1955 | "libc", 1956 | "redox_syscall", 1957 | "smallvec", 1958 | "winapi 0.3.8", 1959 | ] 1960 | 1961 | [[package]] 1962 | name = "peeking_take_while" 1963 | version = "0.1.2" 1964 | source = "registry+https://github.com/rust-lang/crates.io-index" 1965 | checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" 1966 | 1967 | [[package]] 1968 | name = "percent-encoding" 1969 | version = "2.1.0" 1970 | source = "registry+https://github.com/rust-lang/crates.io-index" 1971 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" 1972 | 1973 | [[package]] 1974 | name = "phf" 1975 | version = "0.8.0" 1976 | source = "registry+https://github.com/rust-lang/crates.io-index" 1977 | checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" 1978 | dependencies = [ 1979 | "phf_shared", 1980 | ] 1981 | 1982 | [[package]] 1983 | name = "phf_codegen" 1984 | version = "0.8.0" 1985 | source = "registry+https://github.com/rust-lang/crates.io-index" 1986 | checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815" 1987 | dependencies = [ 1988 | "phf_generator", 1989 | "phf_shared", 1990 | ] 1991 | 1992 | [[package]] 1993 | name = "phf_generator" 1994 | version = "0.8.0" 1995 | source = "registry+https://github.com/rust-lang/crates.io-index" 1996 | checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" 1997 | dependencies = [ 1998 | "phf_shared", 1999 | "rand 0.7.3", 2000 | ] 2001 | 2002 | [[package]] 2003 | name = "phf_shared" 2004 | version = "0.8.0" 2005 | source = "registry+https://github.com/rust-lang/crates.io-index" 2006 | checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" 2007 | dependencies = [ 2008 | "siphasher", 2009 | ] 2010 | 2011 | [[package]] 2012 | name = "pin-project" 2013 | version = "0.4.8" 2014 | source = "registry+https://github.com/rust-lang/crates.io-index" 2015 | checksum = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c" 2016 | dependencies = [ 2017 | "pin-project-internal", 2018 | ] 2019 | 2020 | [[package]] 2021 | name = "pin-project-internal" 2022 | version = "0.4.8" 2023 | source = "registry+https://github.com/rust-lang/crates.io-index" 2024 | checksum = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f" 2025 | dependencies = [ 2026 | "proc-macro2 1.0.10", 2027 | "quote 1.0.3", 2028 | "syn 1.0.17", 2029 | ] 2030 | 2031 | [[package]] 2032 | name = "pin-project-lite" 2033 | version = "0.1.4" 2034 | source = "registry+https://github.com/rust-lang/crates.io-index" 2035 | checksum = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae" 2036 | 2037 | [[package]] 2038 | name = "pin-utils" 2039 | version = "0.1.0-alpha.4" 2040 | source = "registry+https://github.com/rust-lang/crates.io-index" 2041 | checksum = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587" 2042 | 2043 | [[package]] 2044 | name = "pkg-config" 2045 | version = "0.3.17" 2046 | source = "registry+https://github.com/rust-lang/crates.io-index" 2047 | checksum = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" 2048 | 2049 | [[package]] 2050 | name = "plist" 2051 | version = "0.4.2" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "5f2a9f075f6394100e7c105ed1af73fb1859d6fd14e49d4290d578120beb167f" 2054 | dependencies = [ 2055 | "base64 0.10.1", 2056 | "byteorder", 2057 | "humantime", 2058 | "line-wrap", 2059 | "serde", 2060 | "xml-rs", 2061 | ] 2062 | 2063 | [[package]] 2064 | name = "ppv-lite86" 2065 | version = "0.2.6" 2066 | source = "registry+https://github.com/rust-lang/crates.io-index" 2067 | checksum = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b" 2068 | 2069 | [[package]] 2070 | name = "pq-sys" 2071 | version = "0.4.6" 2072 | source = "registry+https://github.com/rust-lang/crates.io-index" 2073 | checksum = "6ac25eee5a0582f45a67e837e350d784e7003bd29a5f460796772061ca49ffda" 2074 | dependencies = [ 2075 | "vcpkg", 2076 | ] 2077 | 2078 | [[package]] 2079 | name = "precomputed-hash" 2080 | version = "0.1.1" 2081 | source = "registry+https://github.com/rust-lang/crates.io-index" 2082 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 2083 | 2084 | [[package]] 2085 | name = "prettyprint" 2086 | version = "0.7.0" 2087 | source = "registry+https://github.com/rust-lang/crates.io-index" 2088 | checksum = "f32f02328f651d5283173c7a9b2ef354b079fa535706547dde16d61ae23ecded" 2089 | dependencies = [ 2090 | "ansi_colours", 2091 | "ansi_term", 2092 | "atty", 2093 | "clap", 2094 | "console", 2095 | "content_inspector", 2096 | "derive_builder", 2097 | "directories", 2098 | "encoding", 2099 | "error-chain", 2100 | "lazy_static", 2101 | "shell-words", 2102 | "syntect", 2103 | ] 2104 | 2105 | [[package]] 2106 | name = "proc-macro-hack" 2107 | version = "0.5.15" 2108 | source = "registry+https://github.com/rust-lang/crates.io-index" 2109 | checksum = "0d659fe7c6d27f25e9d80a1a094c223f5246f6a6596453e09d7229bf42750b63" 2110 | 2111 | [[package]] 2112 | name = "proc-macro-nested" 2113 | version = "0.1.4" 2114 | source = "registry+https://github.com/rust-lang/crates.io-index" 2115 | checksum = "8e946095f9d3ed29ec38de908c22f95d9ac008e424c7bcae54c75a79c527c694" 2116 | 2117 | [[package]] 2118 | name = "proc-macro2" 2119 | version = "0.4.30" 2120 | source = "registry+https://github.com/rust-lang/crates.io-index" 2121 | checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" 2122 | dependencies = [ 2123 | "unicode-xid 0.1.0", 2124 | ] 2125 | 2126 | [[package]] 2127 | name = "proc-macro2" 2128 | version = "1.0.10" 2129 | source = "registry+https://github.com/rust-lang/crates.io-index" 2130 | checksum = "df246d292ff63439fea9bc8c0a270bed0e390d5ebd4db4ba15aba81111b5abe3" 2131 | dependencies = [ 2132 | "unicode-xid 0.2.0", 2133 | ] 2134 | 2135 | [[package]] 2136 | name = "quick-error" 2137 | version = "1.2.3" 2138 | source = "registry+https://github.com/rust-lang/crates.io-index" 2139 | checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2140 | 2141 | [[package]] 2142 | name = "quote" 2143 | version = "0.6.13" 2144 | source = "registry+https://github.com/rust-lang/crates.io-index" 2145 | checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" 2146 | dependencies = [ 2147 | "proc-macro2 0.4.30", 2148 | ] 2149 | 2150 | [[package]] 2151 | name = "quote" 2152 | version = "1.0.3" 2153 | source = "registry+https://github.com/rust-lang/crates.io-index" 2154 | checksum = "2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f" 2155 | dependencies = [ 2156 | "proc-macro2 1.0.10", 2157 | ] 2158 | 2159 | [[package]] 2160 | name = "r2d2" 2161 | version = "0.8.8" 2162 | source = "registry+https://github.com/rust-lang/crates.io-index" 2163 | checksum = "1497e40855348e4a8a40767d8e55174bce1e445a3ac9254ad44ad468ee0485af" 2164 | dependencies = [ 2165 | "log", 2166 | "parking_lot", 2167 | "scheduled-thread-pool", 2168 | ] 2169 | 2170 | [[package]] 2171 | name = "rand" 2172 | version = "0.4.6" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" 2175 | dependencies = [ 2176 | "fuchsia-cprng", 2177 | "libc", 2178 | "rand_core 0.3.1", 2179 | "rdrand", 2180 | "winapi 0.3.8", 2181 | ] 2182 | 2183 | [[package]] 2184 | name = "rand" 2185 | version = "0.6.5" 2186 | source = "registry+https://github.com/rust-lang/crates.io-index" 2187 | checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" 2188 | dependencies = [ 2189 | "autocfg 0.1.7", 2190 | "libc", 2191 | "rand_chacha 0.1.1", 2192 | "rand_core 0.4.2", 2193 | "rand_hc 0.1.0", 2194 | "rand_isaac", 2195 | "rand_jitter", 2196 | "rand_os", 2197 | "rand_pcg 0.1.2", 2198 | "rand_xorshift", 2199 | "winapi 0.3.8", 2200 | ] 2201 | 2202 | [[package]] 2203 | name = "rand" 2204 | version = "0.7.3" 2205 | source = "registry+https://github.com/rust-lang/crates.io-index" 2206 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" 2207 | dependencies = [ 2208 | "getrandom", 2209 | "libc", 2210 | "rand_chacha 0.2.2", 2211 | "rand_core 0.5.1", 2212 | "rand_hc 0.2.0", 2213 | "rand_pcg 0.2.1", 2214 | ] 2215 | 2216 | [[package]] 2217 | name = "rand_chacha" 2218 | version = "0.1.1" 2219 | source = "registry+https://github.com/rust-lang/crates.io-index" 2220 | checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" 2221 | dependencies = [ 2222 | "autocfg 0.1.7", 2223 | "rand_core 0.3.1", 2224 | ] 2225 | 2226 | [[package]] 2227 | name = "rand_chacha" 2228 | version = "0.2.2" 2229 | source = "registry+https://github.com/rust-lang/crates.io-index" 2230 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" 2231 | dependencies = [ 2232 | "ppv-lite86", 2233 | "rand_core 0.5.1", 2234 | ] 2235 | 2236 | [[package]] 2237 | name = "rand_core" 2238 | version = "0.3.1" 2239 | source = "registry+https://github.com/rust-lang/crates.io-index" 2240 | checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" 2241 | dependencies = [ 2242 | "rand_core 0.4.2", 2243 | ] 2244 | 2245 | [[package]] 2246 | name = "rand_core" 2247 | version = "0.4.2" 2248 | source = "registry+https://github.com/rust-lang/crates.io-index" 2249 | checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" 2250 | 2251 | [[package]] 2252 | name = "rand_core" 2253 | version = "0.5.1" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" 2256 | dependencies = [ 2257 | "getrandom", 2258 | ] 2259 | 2260 | [[package]] 2261 | name = "rand_hc" 2262 | version = "0.1.0" 2263 | source = "registry+https://github.com/rust-lang/crates.io-index" 2264 | checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" 2265 | dependencies = [ 2266 | "rand_core 0.3.1", 2267 | ] 2268 | 2269 | [[package]] 2270 | name = "rand_hc" 2271 | version = "0.2.0" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" 2274 | dependencies = [ 2275 | "rand_core 0.5.1", 2276 | ] 2277 | 2278 | [[package]] 2279 | name = "rand_isaac" 2280 | version = "0.1.1" 2281 | source = "registry+https://github.com/rust-lang/crates.io-index" 2282 | checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" 2283 | dependencies = [ 2284 | "rand_core 0.3.1", 2285 | ] 2286 | 2287 | [[package]] 2288 | name = "rand_jitter" 2289 | version = "0.1.4" 2290 | source = "registry+https://github.com/rust-lang/crates.io-index" 2291 | checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" 2292 | dependencies = [ 2293 | "libc", 2294 | "rand_core 0.4.2", 2295 | "winapi 0.3.8", 2296 | ] 2297 | 2298 | [[package]] 2299 | name = "rand_os" 2300 | version = "0.1.3" 2301 | source = "registry+https://github.com/rust-lang/crates.io-index" 2302 | checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" 2303 | dependencies = [ 2304 | "cloudabi", 2305 | "fuchsia-cprng", 2306 | "libc", 2307 | "rand_core 0.4.2", 2308 | "rdrand", 2309 | "winapi 0.3.8", 2310 | ] 2311 | 2312 | [[package]] 2313 | name = "rand_pcg" 2314 | version = "0.1.2" 2315 | source = "registry+https://github.com/rust-lang/crates.io-index" 2316 | checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" 2317 | dependencies = [ 2318 | "autocfg 0.1.7", 2319 | "rand_core 0.4.2", 2320 | ] 2321 | 2322 | [[package]] 2323 | name = "rand_pcg" 2324 | version = "0.2.1" 2325 | source = "registry+https://github.com/rust-lang/crates.io-index" 2326 | checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429" 2327 | dependencies = [ 2328 | "rand_core 0.5.1", 2329 | ] 2330 | 2331 | [[package]] 2332 | name = "rand_xorshift" 2333 | version = "0.1.1" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" 2336 | dependencies = [ 2337 | "rand_core 0.3.1", 2338 | ] 2339 | 2340 | [[package]] 2341 | name = "rdrand" 2342 | version = "0.4.0" 2343 | source = "registry+https://github.com/rust-lang/crates.io-index" 2344 | checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" 2345 | dependencies = [ 2346 | "rand_core 0.3.1", 2347 | ] 2348 | 2349 | [[package]] 2350 | name = "redis-async" 2351 | version = "0.6.2" 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" 2353 | checksum = "be32bbe0f3a4034e7c0804132b107bb4a85e1cdc4564eee7f1b39b8cf71b84f1" 2354 | dependencies = [ 2355 | "bytes", 2356 | "futures-channel", 2357 | "futures-sink", 2358 | "futures-util", 2359 | "log", 2360 | "tokio", 2361 | "tokio-util 0.2.0", 2362 | ] 2363 | 2364 | [[package]] 2365 | name = "redox_syscall" 2366 | version = "0.1.56" 2367 | source = "registry+https://github.com/rust-lang/crates.io-index" 2368 | checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" 2369 | 2370 | [[package]] 2371 | name = "redox_users" 2372 | version = "0.3.4" 2373 | source = "registry+https://github.com/rust-lang/crates.io-index" 2374 | checksum = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431" 2375 | dependencies = [ 2376 | "getrandom", 2377 | "redox_syscall", 2378 | "rust-argon2", 2379 | ] 2380 | 2381 | [[package]] 2382 | name = "regex" 2383 | version = "1.3.6" 2384 | source = "registry+https://github.com/rust-lang/crates.io-index" 2385 | checksum = "7f6946991529684867e47d86474e3a6d0c0ab9b82d5821e314b1ede31fa3a4b3" 2386 | dependencies = [ 2387 | "aho-corasick", 2388 | "memchr", 2389 | "regex-syntax", 2390 | "thread_local", 2391 | ] 2392 | 2393 | [[package]] 2394 | name = "regex-syntax" 2395 | version = "0.6.17" 2396 | source = "registry+https://github.com/rust-lang/crates.io-index" 2397 | checksum = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae" 2398 | 2399 | [[package]] 2400 | name = "remove_dir_all" 2401 | version = "0.5.2" 2402 | source = "registry+https://github.com/rust-lang/crates.io-index" 2403 | checksum = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e" 2404 | dependencies = [ 2405 | "winapi 0.3.8", 2406 | ] 2407 | 2408 | [[package]] 2409 | name = "resolv-conf" 2410 | version = "0.6.3" 2411 | source = "registry+https://github.com/rust-lang/crates.io-index" 2412 | checksum = "11834e137f3b14e309437a8276714eed3a80d1ef894869e510f2c0c0b98b9f4a" 2413 | dependencies = [ 2414 | "hostname", 2415 | "quick-error", 2416 | ] 2417 | 2418 | [[package]] 2419 | name = "ring" 2420 | version = "0.16.12" 2421 | source = "registry+https://github.com/rust-lang/crates.io-index" 2422 | checksum = "1ba5a8ec64ee89a76c98c549af81ff14813df09c3e6dc4766c3856da48597a0c" 2423 | dependencies = [ 2424 | "cc", 2425 | "lazy_static", 2426 | "libc", 2427 | "spin", 2428 | "untrusted", 2429 | "web-sys", 2430 | "winapi 0.3.8", 2431 | ] 2432 | 2433 | [[package]] 2434 | name = "rust-argon2" 2435 | version = "0.7.0" 2436 | source = "registry+https://github.com/rust-lang/crates.io-index" 2437 | checksum = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017" 2438 | dependencies = [ 2439 | "base64 0.11.0", 2440 | "blake2b_simd", 2441 | "constant_time_eq", 2442 | "crossbeam-utils", 2443 | ] 2444 | 2445 | [[package]] 2446 | name = "rustc-demangle" 2447 | version = "0.1.16" 2448 | source = "registry+https://github.com/rust-lang/crates.io-index" 2449 | checksum = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" 2450 | 2451 | [[package]] 2452 | name = "rustc_version" 2453 | version = "0.2.3" 2454 | source = "registry+https://github.com/rust-lang/crates.io-index" 2455 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" 2456 | dependencies = [ 2457 | "semver", 2458 | ] 2459 | 2460 | [[package]] 2461 | name = "rustversion" 2462 | version = "1.0.2" 2463 | source = "registry+https://github.com/rust-lang/crates.io-index" 2464 | checksum = "b3bba175698996010c4f6dce5e7f173b6eb781fce25d2cfc45e27091ce0b79f6" 2465 | dependencies = [ 2466 | "proc-macro2 1.0.10", 2467 | "quote 1.0.3", 2468 | "syn 1.0.17", 2469 | ] 2470 | 2471 | [[package]] 2472 | name = "ryu" 2473 | version = "1.0.3" 2474 | source = "registry+https://github.com/rust-lang/crates.io-index" 2475 | checksum = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76" 2476 | 2477 | [[package]] 2478 | name = "safemem" 2479 | version = "0.3.3" 2480 | source = "registry+https://github.com/rust-lang/crates.io-index" 2481 | checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 2482 | 2483 | [[package]] 2484 | name = "same-file" 2485 | version = "1.0.6" 2486 | source = "registry+https://github.com/rust-lang/crates.io-index" 2487 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2488 | dependencies = [ 2489 | "winapi-util", 2490 | ] 2491 | 2492 | [[package]] 2493 | name = "schannel" 2494 | version = "0.1.18" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "039c25b130bd8c1321ee2d7de7fde2659fa9c2744e4bb29711cfc852ea53cd19" 2497 | dependencies = [ 2498 | "lazy_static", 2499 | "winapi 0.3.8", 2500 | ] 2501 | 2502 | [[package]] 2503 | name = "scheduled-thread-pool" 2504 | version = "0.2.4" 2505 | source = "registry+https://github.com/rust-lang/crates.io-index" 2506 | checksum = "0988d7fdf88d5e5fcf5923a0f1e8ab345f3e98ab4bc6bc45a2d5ff7f7458fbf6" 2507 | dependencies = [ 2508 | "parking_lot", 2509 | ] 2510 | 2511 | [[package]] 2512 | name = "scopeguard" 2513 | version = "0.3.3" 2514 | source = "registry+https://github.com/rust-lang/crates.io-index" 2515 | checksum = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 2516 | 2517 | [[package]] 2518 | name = "scopeguard" 2519 | version = "1.1.0" 2520 | source = "registry+https://github.com/rust-lang/crates.io-index" 2521 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" 2522 | 2523 | [[package]] 2524 | name = "security-framework" 2525 | version = "0.4.2" 2526 | source = "registry+https://github.com/rust-lang/crates.io-index" 2527 | checksum = "572dfa3a0785509e7a44b5b4bebcf94d41ba34e9ed9eb9df722545c3b3c4144a" 2528 | dependencies = [ 2529 | "bitflags", 2530 | "core-foundation", 2531 | "core-foundation-sys", 2532 | "libc", 2533 | "security-framework-sys", 2534 | ] 2535 | 2536 | [[package]] 2537 | name = "security-framework-sys" 2538 | version = "0.4.2" 2539 | source = "registry+https://github.com/rust-lang/crates.io-index" 2540 | checksum = "8ddb15a5fec93b7021b8a9e96009c5d8d51c15673569f7c0f6b7204e5b7b404f" 2541 | dependencies = [ 2542 | "core-foundation-sys", 2543 | "libc", 2544 | ] 2545 | 2546 | [[package]] 2547 | name = "semver" 2548 | version = "0.9.0" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" 2551 | dependencies = [ 2552 | "semver-parser", 2553 | ] 2554 | 2555 | [[package]] 2556 | name = "semver-parser" 2557 | version = "0.7.0" 2558 | source = "registry+https://github.com/rust-lang/crates.io-index" 2559 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" 2560 | 2561 | [[package]] 2562 | name = "serde" 2563 | version = "1.0.106" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "36df6ac6412072f67cf767ebbde4133a5b2e88e76dc6187fa7104cd16f783399" 2566 | dependencies = [ 2567 | "serde_derive", 2568 | ] 2569 | 2570 | [[package]] 2571 | name = "serde_derive" 2572 | version = "1.0.106" 2573 | source = "registry+https://github.com/rust-lang/crates.io-index" 2574 | checksum = "9e549e3abf4fb8621bd1609f11dfc9f5e50320802273b12f3811a67e6716ea6c" 2575 | dependencies = [ 2576 | "proc-macro2 1.0.10", 2577 | "quote 1.0.3", 2578 | "syn 1.0.17", 2579 | ] 2580 | 2581 | [[package]] 2582 | name = "serde_json" 2583 | version = "1.0.51" 2584 | source = "registry+https://github.com/rust-lang/crates.io-index" 2585 | checksum = "da07b57ee2623368351e9a0488bb0b261322a15a6e0ae53e243cbdc0f4208da9" 2586 | dependencies = [ 2587 | "itoa", 2588 | "ryu", 2589 | "serde", 2590 | ] 2591 | 2592 | [[package]] 2593 | name = "serde_urlencoded" 2594 | version = "0.6.1" 2595 | source = "registry+https://github.com/rust-lang/crates.io-index" 2596 | checksum = "9ec5d77e2d4c73717816afac02670d5c4f534ea95ed430442cad02e7a6e32c97" 2597 | dependencies = [ 2598 | "dtoa", 2599 | "itoa", 2600 | "serde", 2601 | "url", 2602 | ] 2603 | 2604 | [[package]] 2605 | name = "sha1" 2606 | version = "0.6.0" 2607 | source = "registry+https://github.com/rust-lang/crates.io-index" 2608 | checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 2609 | 2610 | [[package]] 2611 | name = "shell-words" 2612 | version = "0.1.0" 2613 | source = "registry+https://github.com/rust-lang/crates.io-index" 2614 | checksum = "39acde55a154c4cd3ae048ac78cc21c25f3a0145e44111b523279113dce0d94a" 2615 | 2616 | [[package]] 2617 | name = "signal-hook-registry" 2618 | version = "1.2.0" 2619 | source = "registry+https://github.com/rust-lang/crates.io-index" 2620 | checksum = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41" 2621 | dependencies = [ 2622 | "arc-swap", 2623 | "libc", 2624 | ] 2625 | 2626 | [[package]] 2627 | name = "siphasher" 2628 | version = "0.3.2" 2629 | source = "registry+https://github.com/rust-lang/crates.io-index" 2630 | checksum = "8e88f89a550c01e4cd809f3df4f52dc9e939f3273a2017eabd5c6d12fd98bb23" 2631 | 2632 | [[package]] 2633 | name = "slab" 2634 | version = "0.4.2" 2635 | source = "registry+https://github.com/rust-lang/crates.io-index" 2636 | checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" 2637 | 2638 | [[package]] 2639 | name = "smallvec" 2640 | version = "1.3.0" 2641 | source = "registry+https://github.com/rust-lang/crates.io-index" 2642 | checksum = "05720e22615919e4734f6a99ceae50d00226c3c5aca406e102ebc33298214e0a" 2643 | 2644 | [[package]] 2645 | name = "socket2" 2646 | version = "0.3.12" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "03088793f677dce356f3ccc2edb1b314ad191ab702a5de3faf49304f7e104918" 2649 | dependencies = [ 2650 | "cfg-if", 2651 | "libc", 2652 | "redox_syscall", 2653 | "winapi 0.3.8", 2654 | ] 2655 | 2656 | [[package]] 2657 | name = "spin" 2658 | version = "0.5.2" 2659 | source = "registry+https://github.com/rust-lang/crates.io-index" 2660 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" 2661 | 2662 | [[package]] 2663 | name = "standback" 2664 | version = "0.2.2" 2665 | source = "registry+https://github.com/rust-lang/crates.io-index" 2666 | checksum = "ee531c64ad0f80d289504bd32fb047f42a9e957cda584276ab96eb587e9abac3" 2667 | 2668 | [[package]] 2669 | name = "static_assertions" 2670 | version = "0.3.4" 2671 | source = "registry+https://github.com/rust-lang/crates.io-index" 2672 | checksum = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3" 2673 | 2674 | [[package]] 2675 | name = "stdweb" 2676 | version = "0.4.20" 2677 | source = "registry+https://github.com/rust-lang/crates.io-index" 2678 | checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" 2679 | dependencies = [ 2680 | "discard", 2681 | "rustc_version", 2682 | "stdweb-derive", 2683 | "stdweb-internal-macros", 2684 | "stdweb-internal-runtime", 2685 | "wasm-bindgen", 2686 | ] 2687 | 2688 | [[package]] 2689 | name = "stdweb-derive" 2690 | version = "0.5.3" 2691 | source = "registry+https://github.com/rust-lang/crates.io-index" 2692 | checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" 2693 | dependencies = [ 2694 | "proc-macro2 1.0.10", 2695 | "quote 1.0.3", 2696 | "serde", 2697 | "serde_derive", 2698 | "syn 1.0.17", 2699 | ] 2700 | 2701 | [[package]] 2702 | name = "stdweb-internal-macros" 2703 | version = "0.2.9" 2704 | source = "registry+https://github.com/rust-lang/crates.io-index" 2705 | checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" 2706 | dependencies = [ 2707 | "base-x", 2708 | "proc-macro2 1.0.10", 2709 | "quote 1.0.3", 2710 | "serde", 2711 | "serde_derive", 2712 | "serde_json", 2713 | "sha1", 2714 | "syn 1.0.17", 2715 | ] 2716 | 2717 | [[package]] 2718 | name = "stdweb-internal-runtime" 2719 | version = "0.1.5" 2720 | source = "registry+https://github.com/rust-lang/crates.io-index" 2721 | checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" 2722 | 2723 | [[package]] 2724 | name = "string_cache" 2725 | version = "0.8.0" 2726 | source = "registry+https://github.com/rust-lang/crates.io-index" 2727 | checksum = "2940c75beb4e3bf3a494cef919a747a2cb81e52571e212bfbd185074add7208a" 2728 | dependencies = [ 2729 | "lazy_static", 2730 | "new_debug_unreachable", 2731 | "phf_shared", 2732 | "precomputed-hash", 2733 | "serde", 2734 | ] 2735 | 2736 | [[package]] 2737 | name = "string_cache_codegen" 2738 | version = "0.5.1" 2739 | source = "registry+https://github.com/rust-lang/crates.io-index" 2740 | checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97" 2741 | dependencies = [ 2742 | "phf_generator", 2743 | "phf_shared", 2744 | "proc-macro2 1.0.10", 2745 | "quote 1.0.3", 2746 | ] 2747 | 2748 | [[package]] 2749 | name = "strsim" 2750 | version = "0.7.0" 2751 | source = "registry+https://github.com/rust-lang/crates.io-index" 2752 | checksum = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550" 2753 | 2754 | [[package]] 2755 | name = "strsim" 2756 | version = "0.8.0" 2757 | source = "registry+https://github.com/rust-lang/crates.io-index" 2758 | checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" 2759 | 2760 | [[package]] 2761 | name = "syn" 2762 | version = "0.15.44" 2763 | source = "registry+https://github.com/rust-lang/crates.io-index" 2764 | checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" 2765 | dependencies = [ 2766 | "proc-macro2 0.4.30", 2767 | "quote 0.6.13", 2768 | "unicode-xid 0.1.0", 2769 | ] 2770 | 2771 | [[package]] 2772 | name = "syn" 2773 | version = "1.0.17" 2774 | source = "registry+https://github.com/rust-lang/crates.io-index" 2775 | checksum = "0df0eb663f387145cab623dea85b09c2c5b4b0aef44e945d928e682fce71bb03" 2776 | dependencies = [ 2777 | "proc-macro2 1.0.10", 2778 | "quote 1.0.3", 2779 | "unicode-xid 0.2.0", 2780 | ] 2781 | 2782 | [[package]] 2783 | name = "synstructure" 2784 | version = "0.12.3" 2785 | source = "registry+https://github.com/rust-lang/crates.io-index" 2786 | checksum = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" 2787 | dependencies = [ 2788 | "proc-macro2 1.0.10", 2789 | "quote 1.0.3", 2790 | "syn 1.0.17", 2791 | "unicode-xid 0.2.0", 2792 | ] 2793 | 2794 | [[package]] 2795 | name = "syntect" 2796 | version = "3.2.0" 2797 | source = "registry+https://github.com/rust-lang/crates.io-index" 2798 | checksum = "e80b8831c5a543192ffc3727f01cf0e57579c6ac15558e3048bfb5708892167b" 2799 | dependencies = [ 2800 | "bincode", 2801 | "bitflags", 2802 | "flate2", 2803 | "fnv", 2804 | "lazy_static", 2805 | "lazycell", 2806 | "onig", 2807 | "plist", 2808 | "regex-syntax", 2809 | "serde", 2810 | "serde_derive", 2811 | "serde_json", 2812 | "walkdir", 2813 | "yaml-rust", 2814 | ] 2815 | 2816 | [[package]] 2817 | name = "tempdir" 2818 | version = "0.3.7" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" 2821 | dependencies = [ 2822 | "rand 0.4.6", 2823 | "remove_dir_all", 2824 | ] 2825 | 2826 | [[package]] 2827 | name = "tempfile" 2828 | version = "3.1.0" 2829 | source = "registry+https://github.com/rust-lang/crates.io-index" 2830 | checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" 2831 | dependencies = [ 2832 | "cfg-if", 2833 | "libc", 2834 | "rand 0.7.3", 2835 | "redox_syscall", 2836 | "remove_dir_all", 2837 | "winapi 0.3.8", 2838 | ] 2839 | 2840 | [[package]] 2841 | name = "tendril" 2842 | version = "0.4.1" 2843 | source = "registry+https://github.com/rust-lang/crates.io-index" 2844 | checksum = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" 2845 | dependencies = [ 2846 | "futf", 2847 | "mac", 2848 | "utf-8", 2849 | ] 2850 | 2851 | [[package]] 2852 | name = "termcolor" 2853 | version = "1.1.0" 2854 | source = "registry+https://github.com/rust-lang/crates.io-index" 2855 | checksum = "bb6bfa289a4d7c5766392812c0a1f4c1ba45afa1ad47803c11e1f407d846d75f" 2856 | dependencies = [ 2857 | "winapi-util", 2858 | ] 2859 | 2860 | [[package]] 2861 | name = "termios" 2862 | version = "0.3.2" 2863 | source = "registry+https://github.com/rust-lang/crates.io-index" 2864 | checksum = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2" 2865 | dependencies = [ 2866 | "libc", 2867 | ] 2868 | 2869 | [[package]] 2870 | name = "textwrap" 2871 | version = "0.11.0" 2872 | source = "registry+https://github.com/rust-lang/crates.io-index" 2873 | checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" 2874 | dependencies = [ 2875 | "unicode-width", 2876 | ] 2877 | 2878 | [[package]] 2879 | name = "thread_local" 2880 | version = "1.0.1" 2881 | source = "registry+https://github.com/rust-lang/crates.io-index" 2882 | checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14" 2883 | dependencies = [ 2884 | "lazy_static", 2885 | ] 2886 | 2887 | [[package]] 2888 | name = "threadpool" 2889 | version = "1.7.1" 2890 | source = "registry+https://github.com/rust-lang/crates.io-index" 2891 | checksum = "e2f0c90a5f3459330ac8bc0d2f879c693bb7a2f59689c1083fc4ef83834da865" 2892 | dependencies = [ 2893 | "num_cpus", 2894 | ] 2895 | 2896 | [[package]] 2897 | name = "time" 2898 | version = "0.1.42" 2899 | source = "registry+https://github.com/rust-lang/crates.io-index" 2900 | checksum = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" 2901 | dependencies = [ 2902 | "libc", 2903 | "redox_syscall", 2904 | "winapi 0.3.8", 2905 | ] 2906 | 2907 | [[package]] 2908 | name = "time" 2909 | version = "0.2.9" 2910 | source = "registry+https://github.com/rust-lang/crates.io-index" 2911 | checksum = "6329a7835505d46f5f3a9a2c237f8d6bf5ca6f0015decb3698ba57fcdbb609ba" 2912 | dependencies = [ 2913 | "cfg-if", 2914 | "libc", 2915 | "rustversion", 2916 | "standback", 2917 | "stdweb", 2918 | "time-macros", 2919 | "winapi 0.3.8", 2920 | ] 2921 | 2922 | [[package]] 2923 | name = "time-macros" 2924 | version = "0.1.0" 2925 | source = "registry+https://github.com/rust-lang/crates.io-index" 2926 | checksum = "9ae9b6e9f095bc105e183e3cd493d72579be3181ad4004fceb01adbe9eecab2d" 2927 | dependencies = [ 2928 | "proc-macro-hack", 2929 | "time-macros-impl", 2930 | ] 2931 | 2932 | [[package]] 2933 | name = "time-macros-impl" 2934 | version = "0.1.0" 2935 | source = "registry+https://github.com/rust-lang/crates.io-index" 2936 | checksum = "e987cfe0537f575b5fc99909de6185f6c19c3ad8889e2275e686a873d0869ba1" 2937 | dependencies = [ 2938 | "proc-macro-hack", 2939 | "proc-macro2 1.0.10", 2940 | "quote 1.0.3", 2941 | "syn 1.0.17", 2942 | ] 2943 | 2944 | [[package]] 2945 | name = "tokio" 2946 | version = "0.2.17" 2947 | source = "registry+https://github.com/rust-lang/crates.io-index" 2948 | checksum = "39fb9142eb6e9cc37f4f29144e62618440b149a138eee01a7bbe9b9226aaf17c" 2949 | dependencies = [ 2950 | "bytes", 2951 | "fnv", 2952 | "futures-core", 2953 | "iovec", 2954 | "lazy_static", 2955 | "libc", 2956 | "memchr", 2957 | "mio", 2958 | "mio-uds", 2959 | "pin-project-lite", 2960 | "signal-hook-registry", 2961 | "slab", 2962 | "winapi 0.3.8", 2963 | ] 2964 | 2965 | [[package]] 2966 | name = "tokio-util" 2967 | version = "0.2.0" 2968 | source = "registry+https://github.com/rust-lang/crates.io-index" 2969 | checksum = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930" 2970 | dependencies = [ 2971 | "bytes", 2972 | "futures-core", 2973 | "futures-sink", 2974 | "log", 2975 | "pin-project-lite", 2976 | "tokio", 2977 | ] 2978 | 2979 | [[package]] 2980 | name = "tokio-util" 2981 | version = "0.3.1" 2982 | source = "registry+https://github.com/rust-lang/crates.io-index" 2983 | checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" 2984 | dependencies = [ 2985 | "bytes", 2986 | "futures-core", 2987 | "futures-sink", 2988 | "log", 2989 | "pin-project-lite", 2990 | "tokio", 2991 | ] 2992 | 2993 | [[package]] 2994 | name = "toml" 2995 | version = "0.5.6" 2996 | source = "registry+https://github.com/rust-lang/crates.io-index" 2997 | checksum = "ffc92d160b1eef40665be3a05630d003936a3bc7da7421277846c2613e92c71a" 2998 | dependencies = [ 2999 | "serde", 3000 | ] 3001 | 3002 | [[package]] 3003 | name = "toolchain_find" 3004 | version = "0.1.4" 3005 | source = "registry+https://github.com/rust-lang/crates.io-index" 3006 | checksum = "e458af37ead6107144c2e3bb892f605ddfad20251f12143cda8b9c9072b1ca45" 3007 | dependencies = [ 3008 | "dirs", 3009 | "lazy_static", 3010 | "regex", 3011 | "semver", 3012 | "walkdir", 3013 | ] 3014 | 3015 | [[package]] 3016 | name = "trust-dns-proto" 3017 | version = "0.18.0-alpha.2" 3018 | source = "registry+https://github.com/rust-lang/crates.io-index" 3019 | checksum = "2a7f3a2ab8a919f5eca52a468866a67ed7d3efa265d48a652a9a3452272b413f" 3020 | dependencies = [ 3021 | "async-trait", 3022 | "enum-as-inner", 3023 | "failure", 3024 | "futures 0.3.4", 3025 | "idna", 3026 | "lazy_static", 3027 | "log", 3028 | "rand 0.7.3", 3029 | "smallvec", 3030 | "socket2", 3031 | "tokio", 3032 | "url", 3033 | ] 3034 | 3035 | [[package]] 3036 | name = "trust-dns-resolver" 3037 | version = "0.18.0-alpha.2" 3038 | source = "registry+https://github.com/rust-lang/crates.io-index" 3039 | checksum = "6f90b1502b226f8b2514c6d5b37bafa8c200d7ca4102d57dc36ee0f3b7a04a2f" 3040 | dependencies = [ 3041 | "cfg-if", 3042 | "failure", 3043 | "futures 0.3.4", 3044 | "ipconfig", 3045 | "lazy_static", 3046 | "log", 3047 | "lru-cache", 3048 | "resolv-conf", 3049 | "smallvec", 3050 | "tokio", 3051 | "trust-dns-proto", 3052 | ] 3053 | 3054 | [[package]] 3055 | name = "unicase" 3056 | version = "2.6.0" 3057 | source = "registry+https://github.com/rust-lang/crates.io-index" 3058 | checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" 3059 | dependencies = [ 3060 | "version_check 0.9.1", 3061 | ] 3062 | 3063 | [[package]] 3064 | name = "unicode-bidi" 3065 | version = "0.3.4" 3066 | source = "registry+https://github.com/rust-lang/crates.io-index" 3067 | checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 3068 | dependencies = [ 3069 | "matches", 3070 | ] 3071 | 3072 | [[package]] 3073 | name = "unicode-normalization" 3074 | version = "0.1.12" 3075 | source = "registry+https://github.com/rust-lang/crates.io-index" 3076 | checksum = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4" 3077 | dependencies = [ 3078 | "smallvec", 3079 | ] 3080 | 3081 | [[package]] 3082 | name = "unicode-segmentation" 3083 | version = "1.6.0" 3084 | source = "registry+https://github.com/rust-lang/crates.io-index" 3085 | checksum = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0" 3086 | 3087 | [[package]] 3088 | name = "unicode-width" 3089 | version = "0.1.7" 3090 | source = "registry+https://github.com/rust-lang/crates.io-index" 3091 | checksum = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479" 3092 | 3093 | [[package]] 3094 | name = "unicode-xid" 3095 | version = "0.1.0" 3096 | source = "registry+https://github.com/rust-lang/crates.io-index" 3097 | checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 3098 | 3099 | [[package]] 3100 | name = "unicode-xid" 3101 | version = "0.2.0" 3102 | source = "registry+https://github.com/rust-lang/crates.io-index" 3103 | checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" 3104 | 3105 | [[package]] 3106 | name = "untrusted" 3107 | version = "0.7.0" 3108 | source = "registry+https://github.com/rust-lang/crates.io-index" 3109 | checksum = "60369ef7a31de49bcb3f6ca728d4ba7300d9a1658f94c727d4cab8c8d9f4aece" 3110 | 3111 | [[package]] 3112 | name = "url" 3113 | version = "2.1.1" 3114 | source = "registry+https://github.com/rust-lang/crates.io-index" 3115 | checksum = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb" 3116 | dependencies = [ 3117 | "idna", 3118 | "matches", 3119 | "percent-encoding", 3120 | ] 3121 | 3122 | [[package]] 3123 | name = "utf-8" 3124 | version = "0.7.5" 3125 | source = "registry+https://github.com/rust-lang/crates.io-index" 3126 | checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" 3127 | 3128 | [[package]] 3129 | name = "uuid" 3130 | version = "0.8.1" 3131 | source = "registry+https://github.com/rust-lang/crates.io-index" 3132 | checksum = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11" 3133 | dependencies = [ 3134 | "rand 0.7.3", 3135 | "serde", 3136 | ] 3137 | 3138 | [[package]] 3139 | name = "v_escape" 3140 | version = "0.7.4" 3141 | source = "registry+https://github.com/rust-lang/crates.io-index" 3142 | checksum = "660b101c07b5d0863deb9e7fb3138777e858d6d2a79f9e6049a27d1cc77c6da6" 3143 | dependencies = [ 3144 | "v_escape_derive", 3145 | ] 3146 | 3147 | [[package]] 3148 | name = "v_escape_derive" 3149 | version = "0.5.6" 3150 | source = "registry+https://github.com/rust-lang/crates.io-index" 3151 | checksum = "c2ca2a14bc3fc5b64d188b087a7d3a927df87b152e941ccfbc66672e20c467ae" 3152 | dependencies = [ 3153 | "nom 4.2.3", 3154 | "proc-macro2 1.0.10", 3155 | "quote 1.0.3", 3156 | "syn 1.0.17", 3157 | ] 3158 | 3159 | [[package]] 3160 | name = "v_eval" 3161 | version = "0.2.0" 3162 | source = "registry+https://github.com/rust-lang/crates.io-index" 3163 | checksum = "21b72772d117853d88293401eb2c51bdb0915ace7035c46a266a017b651a2997" 3164 | dependencies = [ 3165 | "quote 1.0.3", 3166 | "syn 1.0.17", 3167 | ] 3168 | 3169 | [[package]] 3170 | name = "v_htmlescape" 3171 | version = "0.4.5" 3172 | source = "registry+https://github.com/rust-lang/crates.io-index" 3173 | checksum = "e33e939c0d8cf047514fb6ba7d5aac78bc56677a6938b2ee67000b91f2e97e41" 3174 | dependencies = [ 3175 | "cfg-if", 3176 | "v_escape", 3177 | ] 3178 | 3179 | [[package]] 3180 | name = "vcpkg" 3181 | version = "0.2.8" 3182 | source = "registry+https://github.com/rust-lang/crates.io-index" 3183 | checksum = "3fc439f2794e98976c88a2a2dafce96b930fe8010b0a256b3c2199a773933168" 3184 | 3185 | [[package]] 3186 | name = "vec_map" 3187 | version = "0.8.1" 3188 | source = "registry+https://github.com/rust-lang/crates.io-index" 3189 | checksum = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a" 3190 | 3191 | [[package]] 3192 | name = "version_check" 3193 | version = "0.1.5" 3194 | source = "registry+https://github.com/rust-lang/crates.io-index" 3195 | checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 3196 | 3197 | [[package]] 3198 | name = "version_check" 3199 | version = "0.9.1" 3200 | source = "registry+https://github.com/rust-lang/crates.io-index" 3201 | checksum = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce" 3202 | 3203 | [[package]] 3204 | name = "walkdir" 3205 | version = "2.3.1" 3206 | source = "registry+https://github.com/rust-lang/crates.io-index" 3207 | checksum = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d" 3208 | dependencies = [ 3209 | "same-file", 3210 | "winapi 0.3.8", 3211 | "winapi-util", 3212 | ] 3213 | 3214 | [[package]] 3215 | name = "wasi" 3216 | version = "0.9.0+wasi-snapshot-preview1" 3217 | source = "registry+https://github.com/rust-lang/crates.io-index" 3218 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" 3219 | 3220 | [[package]] 3221 | name = "wasm-bindgen" 3222 | version = "0.2.60" 3223 | source = "registry+https://github.com/rust-lang/crates.io-index" 3224 | checksum = "2cc57ce05287f8376e998cbddfb4c8cb43b84a7ec55cf4551d7c00eef317a47f" 3225 | dependencies = [ 3226 | "cfg-if", 3227 | "wasm-bindgen-macro", 3228 | ] 3229 | 3230 | [[package]] 3231 | name = "wasm-bindgen-backend" 3232 | version = "0.2.60" 3233 | source = "registry+https://github.com/rust-lang/crates.io-index" 3234 | checksum = "d967d37bf6c16cca2973ca3af071d0a2523392e4a594548155d89a678f4237cd" 3235 | dependencies = [ 3236 | "bumpalo", 3237 | "lazy_static", 3238 | "log", 3239 | "proc-macro2 1.0.10", 3240 | "quote 1.0.3", 3241 | "syn 1.0.17", 3242 | "wasm-bindgen-shared", 3243 | ] 3244 | 3245 | [[package]] 3246 | name = "wasm-bindgen-macro" 3247 | version = "0.2.60" 3248 | source = "registry+https://github.com/rust-lang/crates.io-index" 3249 | checksum = "8bd151b63e1ea881bb742cd20e1d6127cef28399558f3b5d415289bc41eee3a4" 3250 | dependencies = [ 3251 | "quote 1.0.3", 3252 | "wasm-bindgen-macro-support", 3253 | ] 3254 | 3255 | [[package]] 3256 | name = "wasm-bindgen-macro-support" 3257 | version = "0.2.60" 3258 | source = "registry+https://github.com/rust-lang/crates.io-index" 3259 | checksum = "d68a5b36eef1be7868f668632863292e37739656a80fc4b9acec7b0bd35a4931" 3260 | dependencies = [ 3261 | "proc-macro2 1.0.10", 3262 | "quote 1.0.3", 3263 | "syn 1.0.17", 3264 | "wasm-bindgen-backend", 3265 | "wasm-bindgen-shared", 3266 | ] 3267 | 3268 | [[package]] 3269 | name = "wasm-bindgen-shared" 3270 | version = "0.2.60" 3271 | source = "registry+https://github.com/rust-lang/crates.io-index" 3272 | checksum = "daf76fe7d25ac79748a37538b7daeed1c7a6867c92d3245c12c6222e4a20d639" 3273 | 3274 | [[package]] 3275 | name = "web-sys" 3276 | version = "0.3.37" 3277 | source = "registry+https://github.com/rust-lang/crates.io-index" 3278 | checksum = "2d6f51648d8c56c366144378a33290049eafdd784071077f6fe37dae64c1c4cb" 3279 | dependencies = [ 3280 | "js-sys", 3281 | "wasm-bindgen", 3282 | ] 3283 | 3284 | [[package]] 3285 | name = "which" 3286 | version = "2.0.1" 3287 | source = "registry+https://github.com/rust-lang/crates.io-index" 3288 | checksum = "b57acb10231b9493c8472b20cb57317d0679a49e0bdbee44b3b803a6473af164" 3289 | dependencies = [ 3290 | "failure", 3291 | "libc", 3292 | ] 3293 | 3294 | [[package]] 3295 | name = "widestring" 3296 | version = "0.4.0" 3297 | source = "registry+https://github.com/rust-lang/crates.io-index" 3298 | checksum = "effc0e4ff8085673ea7b9b2e3c73f6bd4d118810c9009ed8f1e16bd96c331db6" 3299 | 3300 | [[package]] 3301 | name = "winapi" 3302 | version = "0.2.8" 3303 | source = "registry+https://github.com/rust-lang/crates.io-index" 3304 | checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 3305 | 3306 | [[package]] 3307 | name = "winapi" 3308 | version = "0.3.8" 3309 | source = "registry+https://github.com/rust-lang/crates.io-index" 3310 | checksum = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" 3311 | dependencies = [ 3312 | "winapi-i686-pc-windows-gnu", 3313 | "winapi-x86_64-pc-windows-gnu", 3314 | ] 3315 | 3316 | [[package]] 3317 | name = "winapi-build" 3318 | version = "0.1.1" 3319 | source = "registry+https://github.com/rust-lang/crates.io-index" 3320 | checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 3321 | 3322 | [[package]] 3323 | name = "winapi-i686-pc-windows-gnu" 3324 | version = "0.4.0" 3325 | source = "registry+https://github.com/rust-lang/crates.io-index" 3326 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 3327 | 3328 | [[package]] 3329 | name = "winapi-util" 3330 | version = "0.1.4" 3331 | source = "registry+https://github.com/rust-lang/crates.io-index" 3332 | checksum = "fa515c5163a99cc82bab70fd3bfdd36d827be85de63737b40fcef2ce084a436e" 3333 | dependencies = [ 3334 | "winapi 0.3.8", 3335 | ] 3336 | 3337 | [[package]] 3338 | name = "winapi-x86_64-pc-windows-gnu" 3339 | version = "0.4.0" 3340 | source = "registry+https://github.com/rust-lang/crates.io-index" 3341 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 3342 | 3343 | [[package]] 3344 | name = "winreg" 3345 | version = "0.6.2" 3346 | source = "registry+https://github.com/rust-lang/crates.io-index" 3347 | checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" 3348 | dependencies = [ 3349 | "winapi 0.3.8", 3350 | ] 3351 | 3352 | [[package]] 3353 | name = "ws2_32-sys" 3354 | version = "0.2.1" 3355 | source = "registry+https://github.com/rust-lang/crates.io-index" 3356 | checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 3357 | dependencies = [ 3358 | "winapi 0.2.8", 3359 | "winapi-build", 3360 | ] 3361 | 3362 | [[package]] 3363 | name = "xml-rs" 3364 | version = "0.8.2" 3365 | source = "registry+https://github.com/rust-lang/crates.io-index" 3366 | checksum = "2bb76e5c421bbbeb8924c60c030331b345555024d56261dae8f3e786ed817c23" 3367 | 3368 | [[package]] 3369 | name = "yaml-rust" 3370 | version = "0.4.3" 3371 | source = "registry+https://github.com/rust-lang/crates.io-index" 3372 | checksum = "65923dd1784f44da1d2c3dbbc5e822045628c590ba72123e1c73d3c230c4434d" 3373 | dependencies = [ 3374 | "linked-hash-map", 3375 | ] 3376 | 3377 | [[package]] 3378 | name = "yarte" 3379 | version = "0.7.0" 3380 | source = "registry+https://github.com/rust-lang/crates.io-index" 3381 | checksum = "36385cabf9425dfae8badc9c6bbf20ac84a314fe345a4ba01945de6e20b97533" 3382 | dependencies = [ 3383 | "actix-web", 3384 | "futures 0.3.4", 3385 | "yarte_derive", 3386 | "yarte_helpers", 3387 | ] 3388 | 3389 | [[package]] 3390 | name = "yarte_codegen" 3391 | version = "0.7.0" 3392 | source = "registry+https://github.com/rust-lang/crates.io-index" 3393 | checksum = "85964b1129a379edc1cb36b30dc381af62bf7614fde9aebc64b2c05b2c18ba91" 3394 | dependencies = [ 3395 | "markup5ever", 3396 | "mime_guess", 3397 | "proc-macro2 1.0.10", 3398 | "quote 1.0.3", 3399 | "syn 1.0.17", 3400 | "yarte_dom", 3401 | "yarte_helpers", 3402 | "yarte_hir", 3403 | "yarte_html", 3404 | ] 3405 | 3406 | [[package]] 3407 | name = "yarte_derive" 3408 | version = "0.7.0" 3409 | source = "registry+https://github.com/rust-lang/crates.io-index" 3410 | checksum = "e0139181bbe81e38cc5b2fee37c81334136c84b7cfc6806151c530b25afc7dc8" 3411 | dependencies = [ 3412 | "prettyprint", 3413 | "proc-macro2 1.0.10", 3414 | "syn 1.0.17", 3415 | "tempfile", 3416 | "toolchain_find", 3417 | "yarte_codegen", 3418 | "yarte_helpers", 3419 | "yarte_hir", 3420 | "yarte_parser", 3421 | ] 3422 | 3423 | [[package]] 3424 | name = "yarte_dom" 3425 | version = "0.7.0" 3426 | source = "registry+https://github.com/rust-lang/crates.io-index" 3427 | checksum = "ad9c1317a1c8e77e496837211ad4efdbb54a5397c8b7cb26be36cbea9c460573" 3428 | dependencies = [ 3429 | "markup5ever", 3430 | "quote 1.0.3", 3431 | "syn 1.0.17", 3432 | "yarte_helpers", 3433 | "yarte_hir", 3434 | "yarte_html", 3435 | ] 3436 | 3437 | [[package]] 3438 | name = "yarte_helpers" 3439 | version = "0.7.0" 3440 | source = "registry+https://github.com/rust-lang/crates.io-index" 3441 | checksum = "5b11d616498e903d888c31eece6edfd84647ec86d0b70c5b0dcae36edc58771a" 3442 | dependencies = [ 3443 | "serde", 3444 | "toml", 3445 | "v_htmlescape", 3446 | ] 3447 | 3448 | [[package]] 3449 | name = "yarte_hir" 3450 | version = "0.7.0" 3451 | source = "registry+https://github.com/rust-lang/crates.io-index" 3452 | checksum = "001232a8d858efc429a1c3fb489cbfedf7445a51282d35f3b13d498010cab400" 3453 | dependencies = [ 3454 | "derive_more", 3455 | "proc-macro2 1.0.10", 3456 | "quote 1.0.3", 3457 | "syn 1.0.17", 3458 | "v_eval", 3459 | "v_htmlescape", 3460 | "yarte_helpers", 3461 | "yarte_parser", 3462 | ] 3463 | 3464 | [[package]] 3465 | name = "yarte_html" 3466 | version = "0.7.0" 3467 | source = "registry+https://github.com/rust-lang/crates.io-index" 3468 | checksum = "a618de2ab402d25d17dbabfa690f50c57d352e8edc1e8c3a368639bcb4f8b04d" 3469 | dependencies = [ 3470 | "log", 3471 | "mac", 3472 | "markup5ever", 3473 | "proc-macro2 1.0.10", 3474 | "quote 1.0.3", 3475 | "syn 1.0.17", 3476 | "yarte_parser", 3477 | ] 3478 | 3479 | [[package]] 3480 | name = "yarte_parser" 3481 | version = "0.7.0" 3482 | source = "registry+https://github.com/rust-lang/crates.io-index" 3483 | checksum = "31dd0a1f5d746bf46cdc1ef44c3a141df6d3c463ec8a8a779d598ab5e6020ee8" 3484 | dependencies = [ 3485 | "annotate-snippets", 3486 | "derive_more", 3487 | "quote 1.0.3", 3488 | "syn 1.0.17", 3489 | "unicode-xid 0.2.0", 3490 | "yarte_helpers", 3491 | ] 3492 | --------------------------------------------------------------------------------