├── 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 |
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 |
14 |
15 |
16 |
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 |
12 |
13 |
14 |
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 |
12 |
13 |
14 |
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 |
--------------------------------------------------------------------------------