├── rustfmt.toml ├── .env ├── src ├── controllers │ ├── mod.rs │ ├── error.rs │ ├── work_record.rs │ └── user.rs ├── models │ ├── mod.rs │ ├── response.rs │ ├── work_event.rs │ ├── work_record.rs │ └── user.rs ├── common │ ├── mod.rs │ ├── lazy_static.rs │ ├── utils.rs │ ├── filters.rs │ ├── state.rs │ ├── schema.rs │ ├── config.rs │ └── middlewares.rs └── main.rs ├── screenshots ├── 1@2x.png ├── 2@2x.png └── 3@2x.png ├── .gitignore ├── migrations └── 2018-06-05-095707_init │ ├── down.sql │ └── up.sql ├── diesel.toml ├── README.md ├── config ├── dev.toml └── prod.toml ├── log4rs.yaml ├── Cargo.toml └── Cargo.lock /rustfmt.toml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | APP_ENV=dev 2 | DATABASE_URL=mysql://root:111111@localhost/partner 3 | -------------------------------------------------------------------------------- /src/controllers/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod user; 2 | pub mod work_record; 3 | pub mod error; -------------------------------------------------------------------------------- /screenshots/1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinyanlv/partner/HEAD/screenshots/1@2x.png -------------------------------------------------------------------------------- /screenshots/2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinyanlv/partner/HEAD/screenshots/2@2x.png -------------------------------------------------------------------------------- /screenshots/3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yinyanlv/partner/HEAD/screenshots/3@2x.png -------------------------------------------------------------------------------- /src/models/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod user; 2 | pub mod work_record; 3 | pub mod work_event; 4 | pub mod response; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea/ 3 | .vscode/ 4 | 5 | /target/ 6 | **/*.rs.bk 7 | /log/ 8 | 9 | /cmake-build-debug/ 10 | /CMakeLists.txt -------------------------------------------------------------------------------- /migrations/2018-06-05-095707_init/down.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS `work_event`; 2 | DROP TABLE IF EXISTS `work_record`; 3 | DROP TABLE IF EXISTS `user`; 4 | 5 | -------------------------------------------------------------------------------- /src/common/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod schema; 2 | pub mod state; 3 | pub mod utils; 4 | pub mod config; 5 | pub mod lazy_static; 6 | pub mod middlewares; 7 | pub mod filters; -------------------------------------------------------------------------------- /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/common/schema.rs" 6 | -------------------------------------------------------------------------------- /src/common/lazy_static.rs: -------------------------------------------------------------------------------- 1 | use common::config::Config; 2 | 3 | lazy_static! { 4 | 5 | pub static ref CONFIG: Config = { 6 | 7 | Config::get() 8 | }; 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## partner 2 | 3 | **partner**,一个私人生活辅助系统,前后端分离。本仓库是partner项目的后端部分,前端仓库地址:[partner-client](https://github.com/yinyanlv/partner-client) 4 | 5 | ## 主要技术 6 | 7 | **前端:** angular6+,material design 8 | 9 | **后端:** rust,actix-web,diesel,mysql,redis 10 | 11 | ## 截图 12 | 13 | ![登录页](screenshots/1@2x.png) 14 | 15 | ![首页](screenshots/2@2x.png) 16 | 17 | ![工作记录](screenshots/3@2x.png) -------------------------------------------------------------------------------- /src/common/utils.rs: -------------------------------------------------------------------------------- 1 | use crypto::md5::Md5; 2 | use crypto::digest::Digest; 3 | use rand::{thread_rng, Rng}; 4 | 5 | pub fn random_string(limit: usize) -> String { 6 | 7 | thread_rng().gen_ascii_chars().take(limit).collect() 8 | } 9 | 10 | pub fn md5_encode(text: &str) -> String { 11 | 12 | let mut sh = Md5::new(); 13 | 14 | sh.input_str(text); 15 | sh.result_str().to_string() 16 | } -------------------------------------------------------------------------------- /config/dev.toml: -------------------------------------------------------------------------------- 1 | [app] 2 | name = "partner" 3 | host = "127.0.0.1" 4 | port = 8888 5 | home_url = "http://localhost:8888" 6 | allowed_origin = "http://localhost:4200" 7 | cache_max_age = "60 * 60 * 24 * 7" # 7天 8 | 9 | [mysql] 10 | url = "mysql://root:111111@localhost/partner" 11 | 12 | [redis] 13 | url = "127.0.0.1:6379" 14 | ttl = "60 * 60 * 24 * 30" # 30天 15 | 16 | [cookie] 17 | key = "actix-session" 18 | max_age = "60 * 60 * 24 * 30" # 30天 -------------------------------------------------------------------------------- /config/prod.toml: -------------------------------------------------------------------------------- 1 | [app] 2 | name = "partner" 3 | host = "127.0.0.1" 4 | port = 8888 5 | home_url = "http://118.31.54.173" 6 | allowed_origin = "http://118.31.54.173" 7 | cache_max_age = "60 * 60 * 24 * 7" # 7天 8 | 9 | [mysql] 10 | url = "mysql://root:bugong111111@127.0.0.1/partner" 11 | 12 | [redis] 13 | url = "127.0.0.1:6379" 14 | ttl = "60 * 60 * 24 * 30" # 30天 15 | 16 | [cookie] 17 | key = "actix-session" 18 | max_age = "60 * 60 * 24 * 30" # 30天 -------------------------------------------------------------------------------- /log4rs.yaml: -------------------------------------------------------------------------------- 1 | refresh_rate: 30 seconds 2 | appenders: 3 | stdout: 4 | kind: console 5 | requests: 6 | kind: file 7 | path: "log/requests.log" 8 | encoder: 9 | pattern: "{d} - {m}{n}" 10 | root: 11 | level: warn 12 | appenders: 13 | - requests 14 | loggers: 15 | app::backend::db: 16 | level: warn 17 | appenders: 18 | - requests 19 | additive: false 20 | app::requests: 21 | level: warn 22 | appenders: 23 | - requests 24 | additive: false -------------------------------------------------------------------------------- /src/common/filters.rs: -------------------------------------------------------------------------------- 1 | use actix_web::Request; 2 | use actix_web::pred::Predicate; 3 | 4 | use common::state::AppState; 5 | use common::middlewares::IsLoggedIn; 6 | 7 | pub struct Unauthorized; 8 | 9 | pub struct CheckLogin; 10 | 11 | impl Predicate for CheckLogin { 12 | 13 | fn check(&self, req: &Request, _state: &AppState) -> bool { 14 | 15 | let is_logged_in = req.extensions().get::().is_some(); 16 | 17 | if !is_logged_in { 18 | req.extensions_mut().insert(Unauthorized); 19 | } 20 | 21 | is_logged_in 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/controllers/error.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{HttpRequest}; 2 | 3 | use common::state::AppState; 4 | use common::filters::Unauthorized; 5 | use models::response::{Message, MessageResult}; 6 | 7 | pub fn handle_error(req: &HttpRequest) -> MessageResult { 8 | 9 | match req.extensions().get::() { 10 | Some(_) => { 11 | Message::error("用户未登录") 12 | }, 13 | None => { 14 | Message::error("资源不存在") 15 | } 16 | } 17 | } 18 | 19 | pub fn not_found(_req: &HttpRequest) -> MessageResult { 20 | 21 | Message::error("资源不存在") 22 | } -------------------------------------------------------------------------------- /src/common/state.rs: -------------------------------------------------------------------------------- 1 | use actix::*; 2 | use actix_redis::RedisActor; 3 | use diesel::prelude::MysqlConnection; 4 | use diesel::r2d2::{ConnectionManager, Pool, PooledConnection}; 5 | use common::lazy_static::CONFIG; 6 | 7 | pub struct AppState { 8 | pub conn: PooledConnection>, 9 | pub redis_addr: Addr 10 | } 11 | 12 | impl AppState { 13 | 14 | pub fn new(addr: &str) -> AppState { 15 | 16 | let manager = ConnectionManager::::new(&*CONFIG.mysql.url); 17 | 18 | AppState { 19 | conn: Pool::builder().build(manager).unwrap().get().expect("can't build mysql pool"), 20 | redis_addr: RedisActor::start(addr) 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/models/response.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{Result, Json}; 2 | 3 | pub type MessageResult = Result>>; 4 | 5 | #[derive(Debug, Clone, Serialize, Deserialize)] 6 | #[serde(untagged)] 7 | pub enum Message { 8 | Error { 9 | success: bool, 10 | message: String, 11 | }, 12 | Success { 13 | success: bool, 14 | data: T 15 | } 16 | } 17 | 18 | impl Message { 19 | 20 | pub fn success(data: T) -> Result>> { 21 | 22 | Ok(Json(Message::Success { 23 | success: true, 24 | data: data 25 | })) 26 | } 27 | 28 | pub fn error(msg: &str) -> Result>> { 29 | 30 | Ok(Json(Message::Error { 31 | success: false, 32 | message: msg.to_owned() 33 | })) 34 | } 35 | } -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "partner" 3 | version = "0.1.0" 4 | authors = ["yinyanlv "] 5 | 6 | [dependencies] 7 | actix = "^0.7.1" 8 | actix-web = "^0.7.1" 9 | actix-redis = "^0.5.0" 10 | redis-async = "0.3.2" 11 | futures = "0.1" 12 | cookie = "^0.10.1" 13 | serde = "^1.0.66" 14 | serde_derive = "^1.0.66" 15 | serde_json = "^1.0.19" 16 | diesel = {version = "^1.3.0", features = ["mysql", "chrono", "serde_json", "r2d2"]} # windows下,安装diesel_cli时,需安装mysql Connector/C,并配置系统环境变量:MYSQLCLIENT_LIB_DIR = C:\Program Files\MySQL\MySQL Connector C 6.1\lib\vs14,即mysqlclient.lib所在的目录 17 | dotenv = "^0.13.0" 18 | env_logger = "^0.5.10" 19 | lazy_static = "^1.0.1" 20 | chrono = {version = "^0.4.2", features = ["serde"]} 21 | rand = "^0.5.1" 22 | rust-crypto = "^0.2.36" 23 | toml = "^0.4.6" 24 | meval = {version = "^0.1.0", features = ["serde"]} 25 | log4rs = "^0.8.0" -------------------------------------------------------------------------------- /src/common/schema.rs: -------------------------------------------------------------------------------- 1 | table! { 2 | user (id) { 3 | id -> Integer, 4 | username -> Varchar, 5 | nickname -> Nullable, 6 | email -> Varchar, 7 | phone -> Nullable, 8 | role -> Nullable, 9 | password -> Varchar, 10 | salt -> Varchar, 11 | create_time -> Datetime, 12 | update_time -> Datetime, 13 | } 14 | } 15 | 16 | table! { 17 | work_event (id) { 18 | id -> Integer, 19 | record_id -> Integer, 20 | start_time -> Datetime, 21 | end_time -> Datetime, 22 | note -> Nullable, 23 | create_time -> Datetime, 24 | update_time -> Datetime, 25 | } 26 | } 27 | 28 | table! { 29 | work_record (id) { 30 | id -> Integer, 31 | username -> Varchar, 32 | date -> Datetime, 33 | overtime -> Nullable, 34 | create_time -> Datetime, 35 | update_time -> Datetime, 36 | } 37 | } 38 | 39 | joinable!(work_event -> work_record (record_id)); 40 | 41 | allow_tables_to_appear_in_same_query!( 42 | user, 43 | work_event, 44 | work_record, 45 | ); 46 | -------------------------------------------------------------------------------- /migrations/2018-06-05-095707_init/up.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE `user` ( 2 | `id` int(20) PRIMARY KEY AUTO_INCREMENT NOT NULL, 3 | `username` varchar(20) NOT NULL, 4 | `nickname` varchar(20), 5 | `email` varchar(40) NOT NULL, 6 | `phone` varchar(20), 7 | `role` tinyint(2) DEFAULT 0, 8 | `password` varchar(40) NOT NULL, 9 | `salt` varchar(20) NOT NULL, 10 | `create_time` datetime NOT NULL, 11 | `update_time` datetime NOT NULL, 12 | UNIQUE KEY `username` (`username`), 13 | UNIQUE KEY `email` (`email`) 14 | ) ENGINE = InnoDB DEFAULT CHARSET = utf8; 15 | 16 | CREATE TABLE `work_record` ( 17 | `id` int(32) PRIMARY KEY AUTO_INCREMENT NOT NULL, 18 | `username` varchar(20) NOT NULL, 19 | `date` datetime NOT NULL, 20 | `overtime` float(4,2) DEFAULT 0.0, 21 | `create_time` datetime NOT NULL, 22 | `update_time` datetime NOT NULL, 23 | KEY `username` (`username`), 24 | CONSTRAINT `work_record_ibfk_1` FOREIGN KEY (`username`) REFERENCES `user` (`username`) 25 | ) ENGINE = InnoDB DEFAULT CHARSET = utf8; 26 | 27 | CREATE TABLE `work_event` ( 28 | `id` int(32) PRIMARY KEY AUTO_INCREMENT NOT NULL, 29 | `record_id` int(32) NOT NULL, 30 | `start_time` datetime NOT NULL, 31 | `end_time` datetime NOT NULL, 32 | `note` varchar(200), 33 | `create_time` datetime NOT NULL, 34 | `update_time` datetime NOT NULL, 35 | KEY `record_id` (`record_id`), 36 | CONSTRAINT `work_event_ibfk_2` FOREIGN KEY (`record_id`) REFERENCES `work_record` (`id`) 37 | ) ENGINE = InnoDB DEFAULT CHARSET = utf8; -------------------------------------------------------------------------------- /src/common/config.rs: -------------------------------------------------------------------------------- 1 | use std::fs::File; 2 | use std::io::prelude::*; 3 | use dotenv; 4 | use toml; 5 | use meval; 6 | 7 | #[derive(Debug, Deserialize)] 8 | pub struct Config { 9 | pub app: App, 10 | pub mysql: Mysql, 11 | pub redis: Redis, 12 | pub cookie: Cookie 13 | } 14 | 15 | #[derive(Debug, Deserialize)] 16 | pub struct App { 17 | pub name: String, 18 | pub host: String, 19 | pub port: u32, 20 | pub home_url: String, 21 | pub allowed_origin: String, 22 | #[serde(deserialize_with = "meval::de::as_f64")] 23 | pub cache_max_age: f64 24 | } 25 | 26 | #[derive(Debug, Deserialize)] 27 | pub struct Mysql { 28 | pub url: String 29 | } 30 | 31 | #[derive(Debug, Deserialize)] 32 | pub struct Redis { 33 | pub url: String, 34 | #[serde(deserialize_with = "meval::de::as_f64")] 35 | pub ttl: f64 36 | } 37 | 38 | #[derive(Debug, Deserialize)] 39 | pub struct Cookie { 40 | pub key: String, 41 | #[serde(deserialize_with = "meval::de::as_f64")] 42 | pub max_age: f64 43 | } 44 | 45 | impl Config { 46 | 47 | pub fn get() -> Config { 48 | 49 | let env = dotenv::var("APP_ENV").expect("APP_ENV must be set in .env file"); 50 | 51 | let config_file_path = format!("config/{}.toml", env); 52 | 53 | let mut file = match File::open(&*config_file_path) { 54 | Ok(data) => data, 55 | Err(err) => panic!("no such file: {}, exception: {}", config_file_path, err) 56 | }; 57 | 58 | let mut temp = String::new(); 59 | 60 | match file.read_to_string(&mut temp) { 61 | Ok(_) => (), 62 | Err(err) => panic!("read file error: {}", err) 63 | }; 64 | 65 | let config: Config = toml::from_str(&temp).unwrap(); 66 | 67 | config 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/controllers/work_record.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{State, Json, Query}; 2 | 3 | use common::state::AppState; 4 | use models::work_record::*; 5 | use models::response::{Message, MessageResult}; 6 | 7 | pub fn create((state, create_work_record): (State, Json)) -> MessageResult { 8 | 9 | let conn = &state.conn; 10 | let work_record = create_work_record.into_work_record(); 11 | 12 | match work_record.create(conn, &create_work_record.events) { 13 | 14 | Ok(data) => { 15 | 16 | Message::success(data) 17 | }, 18 | 19 | Err(err) => { 20 | 21 | Message::error(&*err.to_string()) 22 | } 23 | } 24 | } 25 | 26 | pub fn update((state, update_work_record): (State, Json)) -> MessageResult { 27 | 28 | let conn = &state.conn; 29 | 30 | match update_work_record.update(conn, &update_work_record.events) { 31 | 32 | Ok(data) => { 33 | 34 | Message::success(data) 35 | }, 36 | 37 | Err(err) => { 38 | 39 | Message::error(&*err.to_string()) 40 | } 41 | } 42 | } 43 | 44 | pub fn get_records((state, query_month_work_record): (State, Json)) -> MessageResult> { 45 | 46 | let conn = &state.conn; 47 | 48 | match query_month_work_record.query(conn) { 49 | 50 | Ok(data) => { 51 | 52 | Message::success(data) 53 | }, 54 | 55 | Err(err) => { 56 | 57 | Message::error(&*err.to_string()) 58 | } 59 | } 60 | } 61 | 62 | pub fn get_record((state, query_work_record): (State, Json)) -> MessageResult { 63 | 64 | let conn = &state.conn; 65 | 66 | match query_work_record.query(conn) { 67 | 68 | Ok(data) => { 69 | 70 | Message::success(data) 71 | }, 72 | 73 | Err(err) => { 74 | 75 | Message::error(&*err.to_string()) 76 | } 77 | } 78 | } 79 | 80 | pub fn delete((state, delete_work_record): (State, Query)) -> MessageResult { 81 | 82 | let conn = &state.conn; 83 | 84 | match delete_work_record.delete(conn) { 85 | 86 | Ok(data) => { 87 | 88 | Message::success(data) 89 | }, 90 | 91 | Err(err) => { 92 | 93 | Message::error(&*err.to_string()) 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/models/work_event.rs: -------------------------------------------------------------------------------- 1 | use diesel; 2 | use diesel::prelude::*; 3 | use diesel::prelude::MysqlConnection; 4 | use diesel::r2d2::{ConnectionManager, PooledConnection}; 5 | use chrono::prelude::*; 6 | use chrono::NaiveDateTime; 7 | 8 | use common::schema::work_event; 9 | 10 | type Conn = PooledConnection>; 11 | 12 | #[derive(Debug, Clone, Serialize, Deserialize, Queryable)] 13 | #[serde(rename_all = "camelCase")] 14 | pub struct RawWorkEvent { 15 | pub id: i32, 16 | pub record_id: i32, 17 | pub start_time: NaiveDateTime, 18 | pub end_time: NaiveDateTime, 19 | pub note: Option, 20 | pub create_time: NaiveDateTime, 21 | pub update_time: NaiveDateTime 22 | } 23 | 24 | #[derive(Debug, Clone, Serialize, Deserialize)] 25 | #[serde(rename_all = "camelCase")] 26 | pub struct CreateWorkEvent { 27 | pub record_id: i32, 28 | pub start_time: DateTime, 29 | pub end_time: DateTime, 30 | pub note: String 31 | } 32 | 33 | impl CreateWorkEvent { 34 | 35 | pub fn into_work_event(&self, record_id: i32, date_time: &NaiveDateTime) -> WorkEvent { 36 | 37 | WorkEvent { 38 | record_id: record_id, 39 | start_time: self.start_time.naive_utc(), 40 | end_time: self.end_time.naive_utc(), 41 | note: self.note.clone(), 42 | create_time: date_time.clone(), 43 | update_time: date_time.clone() 44 | } 45 | } 46 | } 47 | 48 | #[derive(Debug, Clone, Serialize, Deserialize, Insertable)] 49 | #[table_name="work_event"] 50 | #[serde(rename_all = "camelCase")] 51 | pub struct WorkEvent { 52 | pub record_id: i32, 53 | pub start_time: NaiveDateTime, 54 | pub end_time: NaiveDateTime, 55 | pub note: String, 56 | pub create_time: NaiveDateTime, 57 | pub update_time: NaiveDateTime 58 | } 59 | 60 | impl WorkEvent { 61 | 62 | pub fn create(conn: &Conn, records: &Vec) -> QueryResult { 63 | use common::schema::work_event::dsl::*; 64 | 65 | diesel::insert_into(work_event).values(records).execute(conn) 66 | } 67 | } 68 | 69 | #[derive(Debug, Clone, Serialize, Deserialize)] 70 | pub struct QueryWorkEvents; 71 | 72 | impl QueryWorkEvents { 73 | 74 | pub fn query(conn: &Conn, cur_record_id: i32) -> QueryResult> { 75 | 76 | use common::schema::work_event::dsl::*; 77 | 78 | work_event.filter(record_id.eq(cur_record_id)) 79 | .order(create_time.asc()) 80 | .load::(conn) 81 | } 82 | } 83 | 84 | #[derive(Debug, Clone, Serialize, Deserialize)] 85 | pub struct DeleteWorkEvents; 86 | 87 | impl DeleteWorkEvents { 88 | 89 | pub fn delete(&self, conn: &Conn, cur_record_id: i32) -> QueryResult { 90 | 91 | use common::schema::work_event::dsl::*; 92 | 93 | diesel::delete(work_event.filter(record_id.eq(cur_record_id))).execute(conn) 94 | } 95 | } -------------------------------------------------------------------------------- /src/common/middlewares.rs: -------------------------------------------------------------------------------- 1 | use actix::prelude::Arbiter; 2 | use actix_web::{HttpRequest, HttpResponse, Result, Error}; 3 | use actix_web::http::header; 4 | use actix_web::http::header::HeaderValue; 5 | use actix_web::middleware::{Middleware, Started, Response}; 6 | use actix_web::middleware::session::RequestSession; 7 | use actix_redis::Command; 8 | use cookie::{CookieJar, Key}; 9 | use chrono::Duration; 10 | use futures::Future; 11 | 12 | use common::state::AppState; 13 | use common::lazy_static::CONFIG; 14 | use models::user::RawUser; 15 | 16 | pub struct Remember; 17 | 18 | impl Middleware for Remember { 19 | 20 | fn response(&self, req: &HttpRequest, mut res: HttpResponse) -> Result { 21 | 22 | let _req = &*req; 23 | 24 | match _req.session().get::("remember") { 25 | 26 | Ok(data) => { 27 | 28 | if data.is_some() { 29 | 30 | let remember = data.unwrap(); 31 | 32 | if remember { 33 | 34 | let redis_key = get_redis_key(_req); 35 | 36 | update_max_age(_req, &mut res); 37 | 38 | if redis_key.is_some() { 39 | let addr = _req.state().redis_addr.clone(); 40 | 41 | Arbiter::spawn_fn(move || { 42 | 43 | addr.send(Command(resp_array!["EXPIRE", &*redis_key.unwrap(), &*CONFIG.redis.ttl.to_string()])) 44 | .map_err(Error::from) 45 | .then(move |_res| { 46 | Ok(()) 47 | }) 48 | }); 49 | } 50 | 51 | }; 52 | 53 | } 54 | }, 55 | Err(_) => () 56 | } 57 | 58 | Ok(Response::Done(res)) 59 | } 60 | } 61 | 62 | fn get_redis_key(req: &HttpRequest) -> Option { 63 | 64 | let cookies = req.cookies().unwrap(); 65 | 66 | for cookie in cookies.iter() { 67 | 68 | if cookie.name() == &*CONFIG.cookie.key { 69 | 70 | let mut jar = CookieJar::new(); 71 | jar.add_original(cookie.clone()); 72 | 73 | if let Some(cookie) = jar.signed(&Key::from_master(&[0;32])).get(&*CONFIG.cookie.key) { 74 | 75 | return Some(cookie.value().to_owned()); 76 | } 77 | } 78 | } 79 | 80 | None 81 | } 82 | 83 | fn update_max_age(req: &HttpRequest, res: &mut HttpResponse) { 84 | 85 | let cookies = req.cookies().unwrap(); 86 | let mut temp = None; 87 | 88 | for cookie in cookies.iter() { 89 | 90 | if cookie.name() == &*CONFIG.cookie.key { 91 | 92 | let mut c = cookie.clone(); 93 | 94 | c.set_http_only(true); 95 | c.set_path("/".to_owned()); 96 | c.set_max_age(Duration::seconds(CONFIG.cookie.max_age as i64)); 97 | 98 | temp = Some(c); 99 | } 100 | } 101 | 102 | if temp.is_some() { 103 | res.headers_mut().append(header::SET_COOKIE, HeaderValue::from_str(&temp.unwrap().to_string()).unwrap()); 104 | } 105 | } 106 | 107 | pub struct IsLoggedIn; 108 | pub struct MarkLoginState; 109 | 110 | impl Middleware for MarkLoginState { 111 | 112 | fn start(&self, req: &HttpRequest) -> Result { 113 | 114 | let is_logged_in = req.session().get::("user").unwrap().is_some(); 115 | 116 | if is_logged_in { 117 | req.extensions_mut().insert(IsLoggedIn); 118 | } 119 | 120 | Ok(Started::Done) 121 | } 122 | } -------------------------------------------------------------------------------- /src/controllers/user.rs: -------------------------------------------------------------------------------- 1 | use actix_web::{HttpRequest, Json, State}; 2 | use actix_web::middleware::session::RequestSession; 3 | 4 | use common::state::AppState; 5 | use models::user::*; 6 | use models::response::{Message, MessageResult}; 7 | 8 | pub fn register((state, register_user): (State, Json)) -> MessageResult { 9 | 10 | let conn = &state.conn; 11 | 12 | if register_user.password != register_user.confirm_password { 13 | 14 | return Message::error("两次输入的密码不一致"); 15 | } 16 | 17 | if User::is_user_exist(conn, &*register_user.username) { 18 | 19 | return Message::error("该用户名已被注册"); 20 | } 21 | 22 | if User::is_email_exist(conn, &*register_user.email) { 23 | 24 | return Message::error("该邮箱已被注册"); 25 | } 26 | 27 | let user = register_user.into_user(); 28 | 29 | match user.create(conn) { 30 | Ok(_) => { 31 | 32 | Message::success("".to_owned()) 33 | }, 34 | Err(err) => { 35 | 36 | Message::error(&*err) 37 | } 38 | } 39 | } 40 | 41 | pub fn login((req, login_user): (HttpRequest, Json)) -> MessageResult { 42 | 43 | let conn = &req.state().conn; 44 | 45 | match login_user.validate(conn) { 46 | 47 | Ok(data) => { 48 | 49 | req.session().set::("user", data.clone()).unwrap(); 50 | 51 | if login_user.remember { 52 | req.session().set::("remember", true).unwrap(); 53 | } else { 54 | req.session().set::("remember", false).unwrap(); 55 | } 56 | 57 | Message::success(data) 58 | }, 59 | Err(_err) => Message::error("用户名或密码错误") 60 | } 61 | } 62 | 63 | pub fn logout(req: &HttpRequest) -> MessageResult { 64 | 65 | req.session().clear(); 66 | 67 | Message::success("退出登录成功".to_owned()) 68 | } 69 | 70 | pub fn update((state, update_user): (State, Json)) -> MessageResult { 71 | 72 | let conn = &state.conn; 73 | 74 | if !update_user.is_email_updateable(conn) { 75 | 76 | return Message::error("该邮箱已被注册"); 77 | } 78 | 79 | if !update_user.is_phone_updateable(conn) { 80 | 81 | return Message::error("该手机号已被绑定"); 82 | } 83 | 84 | match update_user.update(conn) { 85 | Ok(data) => Message::success(data), 86 | Err(err) => Message::error(&*err.to_string()) 87 | } 88 | } 89 | 90 | pub fn delete((state, delete_user): (State, Json)) -> MessageResult { 91 | 92 | let conn = &state.conn; 93 | 94 | match delete_user.delete(conn) { 95 | Ok(data) => { 96 | 97 | if data == 0 { 98 | Message::error("删除用户失败,该用户不存在") 99 | } else { 100 | Message::success("删除用户成功".to_owned()) 101 | } 102 | }, 103 | Err(err) => Message::error(&*err.to_string()) 104 | } 105 | } 106 | 107 | pub fn modify_password((state, modify_password_user): (State, Json)) -> MessageResult { 108 | 109 | let conn = &state.conn; 110 | 111 | if modify_password_user.new_password != modify_password_user.confirm_new_password { 112 | 113 | return Message::error("您两次输入的新密码不一致"); 114 | } 115 | 116 | match modify_password_user.validate(conn) { 117 | 118 | Ok(_data) => { 119 | 120 | match modify_password_user.modify_password(conn) { 121 | Ok(_) => { 122 | Message::success("密码修改成功,请重新登录".to_owned()) 123 | }, 124 | Err(err) => { 125 | Message::error(&*err.to_string()) 126 | } 127 | } 128 | }, 129 | Err(_) => Message::error("您输入的原密码不正确") 130 | } 131 | } -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![allow(warnings)] 2 | 3 | extern crate actix; 4 | extern crate actix_web; 5 | extern crate actix_redis; 6 | #[macro_use] 7 | extern crate redis_async; 8 | extern crate futures; 9 | extern crate cookie; 10 | #[macro_use] 11 | extern crate diesel; 12 | extern crate dotenv; 13 | #[macro_use] 14 | extern crate lazy_static; 15 | extern crate serde; 16 | #[macro_use] 17 | extern crate serde_derive; 18 | extern crate serde_json; 19 | extern crate chrono; 20 | extern crate rand; 21 | extern crate crypto; 22 | extern crate toml; 23 | extern crate meval; 24 | extern crate env_logger; 25 | extern crate log4rs; 26 | 27 | mod common; 28 | mod controllers; 29 | mod models; 30 | 31 | use actix_web::{server, App, http, middleware, pred}; 32 | use actix_web::http::{header}; 33 | use actix_web::middleware::{session::SessionStorage, cors::Cors}; 34 | use actix_redis::RedisSessionBackend; 35 | use chrono::Duration; 36 | 37 | use controllers::user; 38 | use controllers::work_record; 39 | use controllers::error; 40 | use common::state::AppState; 41 | use common::lazy_static::CONFIG; 42 | use common::middlewares::{Remember, MarkLoginState}; 43 | use common::filters::CheckLogin; 44 | 45 | fn main() { 46 | 47 | let app_env = dotenv::var("APP_ENV").expect("APP_ENV must be set in .env file"); 48 | 49 | if app_env == "dev" { 50 | 51 | std::env::set_var("RUST_LOG", "actix_web=info,actix_redis=info"); 52 | std::env::set_var("RUST_BACKTRACE", "1"); 53 | 54 | env_logger::init(); 55 | } else { 56 | 57 | log4rs::init_file("log4rs.yaml", Default::default()).unwrap(); 58 | } 59 | 60 | let actix_sys = actix::System::new(&*CONFIG.app.name); 61 | 62 | server::new(|| { 63 | vec![ 64 | App::with_state(AppState::new(&*CONFIG.redis.url)) 65 | .middleware(middleware::Logger::default()) 66 | .middleware(Remember) 67 | .middleware(SessionStorage::new( 68 | RedisSessionBackend::new(&*CONFIG.redis.url, &[0;32]) 69 | .ttl(CONFIG.redis.ttl as u16) 70 | .cookie_max_age(Duration::seconds(CONFIG.cookie.max_age as i64)) 71 | )) 72 | .middleware(MarkLoginState) 73 | .prefix("/api") 74 | .configure(|app| { 75 | Cors::for_app(app) 76 | .allowed_origin(&CONFIG.app.allowed_origin) 77 | .allowed_methods(vec!["GET", "POST", "PUT", "DELETE", "OPTIONS"]) 78 | .allowed_headers(vec![header::ORIGIN, header::ACCEPT, header::CONTENT_TYPE]) 79 | .supports_credentials() 80 | .max_age(CONFIG.app.cache_max_age as usize) 81 | .resource("/register", |r| { 82 | r.method(http::Method::POST).with(user::register) 83 | }) 84 | .resource("/login", |r| { 85 | r.method(http::Method::POST).with(user::login) 86 | }) 87 | .resource("/logout", |r| { 88 | r.route() 89 | .filter(CheckLogin) 90 | .filter(pred::Get()) 91 | .f(user::logout); 92 | 93 | r.f(error::handle_error); 94 | }) 95 | .resource("/user/update", |r| { 96 | r.route() 97 | .filter(CheckLogin) 98 | .filter(pred::Put()) 99 | .with(user::update); 100 | 101 | r.f(error::handle_error); 102 | }) 103 | .resource("/user/delete", |r| { 104 | r.route() 105 | .filter(CheckLogin) 106 | .filter(pred::Delete()) 107 | .with(user::delete); 108 | 109 | r.f(error::handle_error); 110 | }) 111 | .resource("/modify-password", |r| { 112 | r.route() 113 | .filter(CheckLogin) 114 | .filter(pred::Put()) 115 | .with(user::modify_password); 116 | 117 | r.f(error::handle_error); 118 | }) 119 | .resource("/work-record/create", |r| { 120 | r.route() 121 | .filter(CheckLogin) 122 | .filter(pred::Post()) 123 | .with(work_record::create); 124 | 125 | r.f(error::handle_error); 126 | }) 127 | .resource("/work-record/update", |r| { 128 | r.route() 129 | .filter(CheckLogin) 130 | .filter(pred::Put()) 131 | .with(work_record::update); 132 | 133 | r.f(error::handle_error); 134 | }) 135 | .resource("/work-record/get-records", |r| { 136 | r.route() 137 | .filter(CheckLogin) 138 | .filter(pred::Post()) 139 | .with(work_record::get_records); 140 | 141 | r.f(error::handle_error); 142 | }) 143 | .resource("/work-record/get-record", |r| { 144 | r.route() 145 | .filter(CheckLogin) 146 | .filter(pred::Post()) 147 | .with(work_record::get_record); 148 | 149 | r.f(error::handle_error); 150 | }) 151 | .resource("/work-record/delete", |r| { 152 | r.route() 153 | .filter(CheckLogin) 154 | .filter(pred::Delete()) 155 | .with(work_record::delete); 156 | 157 | r.f(error::handle_error); 158 | }) 159 | .register() 160 | }) 161 | .boxed(), 162 | 163 | App::new().resource("{tail:.*}", |r| { 164 | r.f(error::not_found) 165 | }) 166 | .boxed() 167 | ] 168 | }) 169 | .bind(&format!("{}:{}", CONFIG.app.host, CONFIG.app.port)) 170 | .expect(&format!("can't bind to port {}", CONFIG.app.port)) 171 | .start(); 172 | 173 | println!("{}", format!("server is listening on port {} !", CONFIG.app.port)); 174 | 175 | actix_sys.run(); 176 | } 177 | -------------------------------------------------------------------------------- /src/models/work_record.rs: -------------------------------------------------------------------------------- 1 | use diesel; 2 | use diesel::prelude::*; 3 | use diesel::expression::sql_literal::sql; 4 | use diesel::prelude::MysqlConnection; 5 | use diesel::r2d2::{ConnectionManager, PooledConnection}; 6 | use chrono::prelude::*; 7 | use chrono::{Local, NaiveDateTime}; 8 | 9 | use models::work_event::*; 10 | use common::schema::work_record; 11 | 12 | type Conn = PooledConnection>; 13 | 14 | #[derive(Debug, Clone, Serialize, Deserialize, Queryable)] 15 | pub struct RawWorkRecord { 16 | pub id: i32, 17 | pub username: String, 18 | pub date: NaiveDateTime, 19 | pub overtime: Option, 20 | pub create_time: NaiveDateTime, 21 | pub update_time: NaiveDateTime 22 | } 23 | 24 | #[derive(Debug, Clone, Serialize, Deserialize)] 25 | pub struct CreateWorkRecord { 26 | pub username: String, 27 | pub date: DateTime, 28 | pub overtime: f32, 29 | pub events: Vec 30 | } 31 | 32 | impl CreateWorkRecord { 33 | 34 | pub fn into_work_record(&self) -> WorkRecord { 35 | 36 | WorkRecord { 37 | username: self.username.clone(), 38 | date: self.date.naive_utc(), 39 | overtime: self.overtime, 40 | create_time: Local::now().naive_utc(), 41 | update_time: Local::now().naive_utc() 42 | } 43 | } 44 | } 45 | 46 | #[derive(Debug, Clone, Serialize, Deserialize)] 47 | pub struct UpdateWorkRecord { 48 | pub id: i32, 49 | pub username: String, 50 | pub overtime: f32, 51 | pub events: Vec 52 | } 53 | 54 | impl UpdateWorkRecord { 55 | 56 | pub fn update(&self, conn: &Conn, events: &Vec) -> QueryResult { 57 | 58 | use common::schema::work_record::dsl::*; 59 | 60 | let num = diesel::update(work_record.filter(id.eq(self.id))) 61 | .set(( 62 | overtime.eq(self.overtime), 63 | update_time.eq(Local::now().naive_utc()) 64 | )) 65 | .execute(conn) 66 | .unwrap(); 67 | 68 | DeleteWorkEvents.delete(conn, self.id).unwrap(); 69 | 70 | if events.len() > 0 { 71 | 72 | let mut new_events = vec![]; 73 | let now = Local::now().naive_utc(); 74 | 75 | for event in events { 76 | 77 | new_events.push(event.into_work_event(self.id, &now)); 78 | } 79 | 80 | if new_events.len() > 0 { 81 | 82 | WorkEvent::create(conn, &new_events).unwrap(); 83 | } 84 | } 85 | 86 | Ok(num) 87 | } 88 | } 89 | 90 | #[derive(Debug, Clone, Serialize, Deserialize, Insertable)] 91 | #[table_name="work_record"] 92 | pub struct WorkRecord { 93 | pub username: String, 94 | pub date: NaiveDateTime, 95 | pub overtime: f32, 96 | pub create_time: NaiveDateTime, 97 | pub update_time: NaiveDateTime 98 | } 99 | 100 | impl WorkRecord { 101 | 102 | pub fn create(&self, conn: &Conn, events: &Vec) -> QueryResult { 103 | use common::schema::work_record::dsl::*; 104 | 105 | let res = diesel::insert_into(work_record).values(self).execute(conn); 106 | 107 | if res.is_err() { 108 | 109 | return res; 110 | } 111 | 112 | let last_insert_id = sql("SELECT LAST_INSERT_ID()").get_result(conn).unwrap(); 113 | let mut new_events = vec![]; 114 | let now = Local::now().naive_utc(); 115 | 116 | for event in events { 117 | 118 | new_events.push(event.into_work_event(last_insert_id, &now)); 119 | } 120 | 121 | if new_events.len() > 0 { 122 | 123 | WorkEvent::create(conn, &new_events).unwrap(); 124 | } 125 | 126 | Ok(last_insert_id as usize) 127 | } 128 | } 129 | 130 | #[derive(Debug, Clone, Serialize, Deserialize)] 131 | #[serde(rename_all = "camelCase")] 132 | pub struct WorkRecordResponse { 133 | pub id: i32, 134 | pub username: String, 135 | pub date: NaiveDateTime, 136 | pub overtime: Option, 137 | pub create_time: NaiveDateTime, 138 | pub update_time: NaiveDateTime, 139 | pub events: Vec 140 | } 141 | 142 | #[derive(Debug, Clone, Serialize, Deserialize)] 143 | pub struct QueryWorkRecord { 144 | pub username: String, 145 | pub date: DateTime 146 | } 147 | 148 | impl QueryWorkRecord { 149 | 150 | pub fn query(&self, conn: &Conn) -> QueryResult { 151 | 152 | use common::schema::work_record::dsl::*; 153 | 154 | let record = work_record 155 | .filter(username.eq(&self.username)) 156 | .filter(date.eq(&self.date.naive_utc())) 157 | .get_result::(conn).unwrap(); 158 | let cur_id = record.id; 159 | let events = QueryWorkEvents::query(conn, cur_id).unwrap(); 160 | 161 | Ok(WorkRecordResponse { 162 | id: record.id, 163 | username: record.username, 164 | date: record.date, 165 | overtime: record.overtime, 166 | create_time: record.create_time, 167 | update_time: record.update_time, 168 | events: events 169 | }) 170 | } 171 | } 172 | 173 | #[derive(Debug, Clone, Serialize, Deserialize)] 174 | #[serde(rename_all = "camelCase")] 175 | pub struct QueryMonthWorkRecord { 176 | pub username: String, 177 | pub start_date: DateTime, 178 | pub end_date: DateTime 179 | } 180 | 181 | impl QueryMonthWorkRecord { 182 | 183 | pub fn query(&self, conn: &Conn) -> QueryResult> { 184 | 185 | use common::schema::work_record::dsl::*; 186 | 187 | let mut list = vec![]; 188 | 189 | let records = work_record 190 | .filter(username.eq(&self.username)) 191 | .filter(date.ge(&self.start_date.naive_utc())) 192 | .filter(date.lt(&self.end_date.naive_utc())) 193 | .load::(conn).unwrap(); 194 | 195 | for record in records { 196 | 197 | let cur_id = record.id; 198 | let events = QueryWorkEvents::query(conn, cur_id).unwrap(); 199 | 200 | list.push(WorkRecordResponse { 201 | id: record.id, 202 | username: record.username, 203 | date: record.date, 204 | overtime: record.overtime, 205 | create_time: record.create_time, 206 | update_time: record.update_time, 207 | events: events 208 | }); 209 | } 210 | 211 | Ok(list) 212 | } 213 | } 214 | 215 | #[derive(Debug, Clone, Serialize, Deserialize)] 216 | #[serde(rename_all = "camelCase")] 217 | pub struct DeleteWorkRecord { 218 | pub username: String, 219 | pub record_id: i32 220 | } 221 | 222 | impl DeleteWorkRecord { 223 | 224 | pub fn delete(&self, conn: &Conn) -> QueryResult { 225 | use common::schema::work_record::dsl::*; 226 | 227 | let res = DeleteWorkEvents.delete(conn, self.record_id); 228 | 229 | if res.is_err() { 230 | return res; 231 | } 232 | 233 | diesel::delete(work_record.filter(id.eq(&self.record_id))).execute(conn) 234 | } 235 | } -------------------------------------------------------------------------------- /src/models/user.rs: -------------------------------------------------------------------------------- 1 | use diesel; 2 | use diesel::prelude::*; 3 | use diesel::prelude::MysqlConnection; 4 | use diesel::r2d2::{ConnectionManager, PooledConnection}; 5 | use chrono::{Local, NaiveDateTime}; 6 | 7 | use common::schema::user; 8 | use common::utils::*; 9 | 10 | type Conn = PooledConnection>; 11 | 12 | #[derive(Debug, Clone, Serialize, Deserialize)] 13 | #[serde(rename_all = "camelCase")] 14 | pub struct RegisterUser { 15 | pub username: String, 16 | pub email: String, 17 | pub password: String, 18 | pub confirm_password: String 19 | } 20 | 21 | impl RegisterUser { 22 | 23 | pub fn into_user(&self) -> User { 24 | 25 | let salt = random_string(8); 26 | let password = md5_encode(&*format!("{}{}", self.password.clone(), &*salt)); 27 | 28 | User { 29 | username: self.username.clone(), 30 | nickname: "".to_owned(), 31 | email: self.email.clone(), 32 | phone: "".to_owned(), 33 | password: password, 34 | role: 0, 35 | salt: salt, 36 | create_time: Local::now().naive_utc(), 37 | update_time: Local::now().naive_utc() 38 | } 39 | } 40 | } 41 | 42 | #[derive(Debug, Clone, Serialize, Deserialize)] 43 | pub struct LoginUser { 44 | pub username: String, 45 | pub password: String, 46 | pub remember: bool, 47 | } 48 | 49 | impl LoginUser { 50 | pub fn validate(&self, conn: &Conn) -> Result { 51 | 52 | let cur_user = User::get_user(conn, &*self.username); 53 | 54 | match cur_user { 55 | 56 | Ok(data) => { 57 | let cur_password = md5_encode(&*format!("{}{}", self.password.clone(), &*data.salt)); 58 | 59 | if cur_password == data.password { 60 | Ok(data) 61 | } else { 62 | Err(false) 63 | } 64 | }, 65 | Err(_) => { 66 | Err(false) 67 | } 68 | } 69 | } 70 | } 71 | 72 | #[derive(Debug, Clone, Serialize, Deserialize)] 73 | pub struct UpdateUser { 74 | pub username: String, 75 | pub nickname: String, 76 | pub email: String, 77 | pub phone: String 78 | } 79 | 80 | impl UpdateUser { 81 | 82 | pub fn update(&self, conn: &Conn) -> QueryResult { 83 | use common::schema::user::dsl::*; 84 | 85 | diesel::update(user.filter(username.eq(&self.username))) 86 | .set(( 87 | nickname.eq(self.nickname.clone()), 88 | email.eq(self.email.clone()), 89 | phone.eq(self.phone.clone()) 90 | )) 91 | .execute(conn).unwrap(); 92 | 93 | User::get_user(conn, &*self.username) 94 | } 95 | 96 | pub fn is_email_updateable(&self, conn: &Conn) -> bool { 97 | use common::schema::user::dsl::*; 98 | 99 | !user 100 | .filter(username.ne(&self.username).and(email.eq(&self.email))) 101 | .get_result::(conn).is_ok() 102 | } 103 | 104 | pub fn is_phone_updateable(&self, conn: &Conn) -> bool { 105 | use common::schema::user::dsl::*; 106 | 107 | if self.phone == "" { 108 | return true; 109 | } 110 | 111 | !user 112 | .filter(username.ne(&self.username).and(phone.eq(&self.phone))) 113 | .get_result::(conn).is_ok() 114 | } 115 | } 116 | 117 | #[derive(Debug, Clone, Serialize, Deserialize)] 118 | pub struct DeleteUser { 119 | pub username: String 120 | } 121 | 122 | impl DeleteUser { 123 | 124 | pub fn delete(&self, conn: &Conn) -> QueryResult { 125 | 126 | use common::schema::user::dsl::*; 127 | 128 | diesel::delete(user.filter(username.eq(&self.username))).execute(conn) 129 | } 130 | } 131 | 132 | #[derive(Debug, Clone, Serialize, Deserialize)] 133 | #[serde(rename_all = "camelCase")] 134 | pub struct ModifyPasswordUser { 135 | pub username: String, 136 | pub password: String, 137 | pub new_password: String, 138 | pub confirm_new_password: String 139 | } 140 | 141 | impl ModifyPasswordUser { 142 | 143 | pub fn validate(&self, conn: &Conn) -> Result { 144 | 145 | let cur_user = User::get_user(conn, &*self.username); 146 | 147 | match cur_user { 148 | 149 | Ok(data) => { 150 | let cur_password = md5_encode(&*format!("{}{}", self.password.clone(), &*data.salt)); 151 | 152 | if cur_password == data.password { 153 | Ok(data) 154 | } else { 155 | Err(false) 156 | } 157 | }, 158 | Err(_) => { 159 | Err(false) 160 | } 161 | } 162 | } 163 | 164 | pub fn modify_password(&self, conn: &Conn) -> QueryResult { 165 | 166 | use common::schema::user::dsl::*; 167 | 168 | let new_salt = random_string(8); 169 | let new_password = md5_encode(&*format!("{}{}", self.new_password.clone(), &*new_salt)); 170 | 171 | diesel::update(user.filter(username.eq(&self.username))) 172 | .set(( 173 | password.eq(new_password), 174 | salt.eq(new_salt) 175 | )) 176 | .execute(conn) 177 | } 178 | } 179 | 180 | #[derive(Debug, Clone, Serialize, Deserialize, Queryable)] 181 | pub struct RawUser { 182 | pub id: i32, 183 | pub username: String, 184 | pub nickname: Option, 185 | pub email: String, 186 | pub phone: Option, 187 | pub role: Option, 188 | pub password: String, 189 | pub salt: String, 190 | pub create_time: NaiveDateTime, 191 | pub update_time: NaiveDateTime 192 | } 193 | 194 | #[derive(Debug, Clone, Serialize, Deserialize, Insertable)] 195 | #[table_name="user"] 196 | pub struct User { 197 | pub username: String, 198 | pub nickname: String, 199 | pub email: String, 200 | pub phone: String, 201 | pub role: i8, 202 | pub password: String, 203 | pub salt: String, 204 | pub create_time: NaiveDateTime, 205 | pub update_time: NaiveDateTime 206 | } 207 | 208 | impl User { 209 | 210 | pub fn create(&self, conn: &Conn) -> Result { 211 | 212 | use common::schema::user::dsl::*; 213 | 214 | let res = diesel::insert_into(user).values(self).execute(conn); 215 | 216 | match res { 217 | Ok(_) => Ok("".to_owned()), 218 | Err(err) => Err(err.to_string()) 219 | } 220 | } 221 | 222 | pub fn update(&self) -> Result { 223 | 224 | Ok("update success".to_owned()) 225 | } 226 | 227 | pub fn is_user_exist(conn: &Conn, cur_username: &str) -> bool { 228 | 229 | User::get_user(conn, cur_username).is_ok() 230 | } 231 | 232 | pub fn get_user(conn: &Conn, cur_username: &str) -> QueryResult { 233 | 234 | use common::schema::user::dsl::*; 235 | 236 | user.filter(username.eq(cur_username)).get_result::(conn) 237 | } 238 | 239 | pub fn is_email_exist(conn: &Conn, cur_email: &str) -> bool { 240 | 241 | use common::schema::user::dsl::*; 242 | 243 | user.filter(email.eq(cur_email)).get_result::(conn).is_ok() 244 | } 245 | 246 | pub fn is_phone_exist(conn: &Conn, cur_phone: &str) -> bool { 247 | 248 | use common::schema::user::dsl::*; 249 | 250 | user.filter(phone.eq(cur_phone)).get_result::(conn).is_ok() 251 | } 252 | } 253 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [[package]] 2 | name = "actix" 3 | version = "0.7.1" 4 | source = "registry+https://github.com/rust-lang/crates.io-index" 5 | dependencies = [ 6 | "actix_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 7 | "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 8 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "crossbeam-channel 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 11 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 12 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 13 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 14 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 15 | "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 16 | "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 17 | "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 18 | "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 19 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 20 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 21 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 22 | "tokio-signal 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 23 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 24 | "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 25 | "trust-dns-resolver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", 26 | "uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", 27 | ] 28 | 29 | [[package]] 30 | name = "actix-redis" 31 | version = "0.5.0" 32 | source = "registry+https://github.com/rust-lang/crates.io-index" 33 | dependencies = [ 34 | "actix 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 35 | "actix-web 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 36 | "backoff 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 37 | "cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 38 | "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 39 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 40 | "http 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 41 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 42 | "rand 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 43 | "redis-async 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 44 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 45 | "serde_json 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 46 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 47 | "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 48 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 49 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 50 | ] 51 | 52 | [[package]] 53 | name = "actix-web" 54 | version = "0.7.1" 55 | source = "registry+https://github.com/rust-lang/crates.io-index" 56 | dependencies = [ 57 | "actix 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 58 | "base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", 59 | "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 60 | "brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 61 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 62 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 63 | "cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 64 | "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 65 | "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 66 | "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 67 | "flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 68 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 69 | "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 70 | "h2 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 71 | "htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 72 | "http 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 73 | "httparse 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 74 | "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 75 | "language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 76 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 77 | "lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 78 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 79 | "mime 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 80 | "mime_guess 2.0.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)", 81 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 82 | "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 83 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 84 | "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 85 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 86 | "rand 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 87 | "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 88 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 89 | "serde_json 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 90 | "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 91 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 92 | "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 93 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 94 | "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 95 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 96 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 97 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 98 | "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 99 | "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 100 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 101 | ] 102 | 103 | [[package]] 104 | name = "actix_derive" 105 | version = "0.2.0" 106 | source = "registry+https://github.com/rust-lang/crates.io-index" 107 | dependencies = [ 108 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 109 | "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", 110 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 111 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 112 | ] 113 | 114 | [[package]] 115 | name = "aho-corasick" 116 | version = "0.6.4" 117 | source = "registry+https://github.com/rust-lang/crates.io-index" 118 | dependencies = [ 119 | "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 120 | ] 121 | 122 | [[package]] 123 | name = "antidote" 124 | version = "1.0.0" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | 127 | [[package]] 128 | name = "arrayvec" 129 | version = "0.4.7" 130 | source = "registry+https://github.com/rust-lang/crates.io-index" 131 | dependencies = [ 132 | "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 133 | ] 134 | 135 | [[package]] 136 | name = "atty" 137 | version = "0.2.10" 138 | source = "registry+https://github.com/rust-lang/crates.io-index" 139 | dependencies = [ 140 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 141 | "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 142 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 143 | ] 144 | 145 | [[package]] 146 | name = "backoff" 147 | version = "0.1.2" 148 | source = "registry+https://github.com/rust-lang/crates.io-index" 149 | dependencies = [ 150 | "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", 151 | ] 152 | 153 | [[package]] 154 | name = "backtrace" 155 | version = "0.2.3" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | dependencies = [ 158 | "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 160 | "dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 161 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 162 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 163 | "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 164 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 165 | ] 166 | 167 | [[package]] 168 | name = "backtrace" 169 | version = "0.3.8" 170 | source = "registry+https://github.com/rust-lang/crates.io-index" 171 | dependencies = [ 172 | "backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)", 173 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 174 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 175 | "rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 176 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 177 | ] 178 | 179 | [[package]] 180 | name = "backtrace-sys" 181 | version = "0.1.23" 182 | source = "registry+https://github.com/rust-lang/crates.io-index" 183 | dependencies = [ 184 | "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", 185 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 186 | ] 187 | 188 | [[package]] 189 | name = "base64" 190 | version = "0.6.0" 191 | source = "registry+https://github.com/rust-lang/crates.io-index" 192 | dependencies = [ 193 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 194 | "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 195 | ] 196 | 197 | [[package]] 198 | name = "base64" 199 | version = "0.9.2" 200 | source = "registry+https://github.com/rust-lang/crates.io-index" 201 | dependencies = [ 202 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 203 | "safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 204 | ] 205 | 206 | [[package]] 207 | name = "bitflags" 208 | version = "1.0.3" 209 | source = "registry+https://github.com/rust-lang/crates.io-index" 210 | 211 | [[package]] 212 | name = "brotli-sys" 213 | version = "0.3.2" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | dependencies = [ 216 | "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", 217 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 218 | ] 219 | 220 | [[package]] 221 | name = "brotli2" 222 | version = "0.3.2" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | dependencies = [ 225 | "brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 226 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 227 | ] 228 | 229 | [[package]] 230 | name = "byteorder" 231 | version = "1.2.3" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | 234 | [[package]] 235 | name = "bytes" 236 | version = "0.4.8" 237 | source = "registry+https://github.com/rust-lang/crates.io-index" 238 | dependencies = [ 239 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 240 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 241 | ] 242 | 243 | [[package]] 244 | name = "cc" 245 | version = "1.0.17" 246 | source = "registry+https://github.com/rust-lang/crates.io-index" 247 | 248 | [[package]] 249 | name = "cfg-if" 250 | version = "0.1.3" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | 253 | [[package]] 254 | name = "chrono" 255 | version = "0.4.3" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | dependencies = [ 258 | "num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)", 259 | "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 260 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 261 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 262 | ] 263 | 264 | [[package]] 265 | name = "cloudabi" 266 | version = "0.0.3" 267 | source = "registry+https://github.com/rust-lang/crates.io-index" 268 | dependencies = [ 269 | "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 270 | ] 271 | 272 | [[package]] 273 | name = "cookie" 274 | version = "0.10.1" 275 | source = "registry+https://github.com/rust-lang/crates.io-index" 276 | dependencies = [ 277 | "base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 278 | "ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)", 279 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 280 | "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 281 | ] 282 | 283 | [[package]] 284 | name = "crossbeam" 285 | version = "0.3.2" 286 | source = "registry+https://github.com/rust-lang/crates.io-index" 287 | 288 | [[package]] 289 | name = "crossbeam-channel" 290 | version = "0.2.1" 291 | source = "registry+https://github.com/rust-lang/crates.io-index" 292 | dependencies = [ 293 | "crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "crossbeam-utils 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 295 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 296 | "parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", 297 | "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 298 | ] 299 | 300 | [[package]] 301 | name = "crossbeam-deque" 302 | version = "0.2.0" 303 | source = "registry+https://github.com/rust-lang/crates.io-index" 304 | dependencies = [ 305 | "crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 306 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 307 | ] 308 | 309 | [[package]] 310 | name = "crossbeam-deque" 311 | version = "0.3.1" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | dependencies = [ 314 | "crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 315 | "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 316 | ] 317 | 318 | [[package]] 319 | name = "crossbeam-epoch" 320 | version = "0.3.1" 321 | source = "registry+https://github.com/rust-lang/crates.io-index" 322 | dependencies = [ 323 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 324 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 325 | "crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 326 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 327 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 328 | "nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 329 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 330 | ] 331 | 332 | [[package]] 333 | name = "crossbeam-epoch" 334 | version = "0.4.3" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | dependencies = [ 337 | "arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)", 338 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 339 | "crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 340 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 341 | "memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 342 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 343 | ] 344 | 345 | [[package]] 346 | name = "crossbeam-utils" 347 | version = "0.2.2" 348 | source = "registry+https://github.com/rust-lang/crates.io-index" 349 | dependencies = [ 350 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 351 | ] 352 | 353 | [[package]] 354 | name = "crossbeam-utils" 355 | version = "0.3.2" 356 | source = "registry+https://github.com/rust-lang/crates.io-index" 357 | dependencies = [ 358 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 359 | ] 360 | 361 | [[package]] 362 | name = "crossbeam-utils" 363 | version = "0.4.1" 364 | source = "registry+https://github.com/rust-lang/crates.io-index" 365 | 366 | [[package]] 367 | name = "dbghelp-sys" 368 | version = "0.2.0" 369 | source = "registry+https://github.com/rust-lang/crates.io-index" 370 | dependencies = [ 371 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 372 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 373 | ] 374 | 375 | [[package]] 376 | name = "diesel" 377 | version = "1.3.2" 378 | source = "registry+https://github.com/rust-lang/crates.io-index" 379 | dependencies = [ 380 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 381 | "chrono 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 382 | "diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 383 | "mysqlclient-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 384 | "r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 385 | "serde_json 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 386 | "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 387 | ] 388 | 389 | [[package]] 390 | name = "diesel_derives" 391 | version = "1.3.0" 392 | source = "registry+https://github.com/rust-lang/crates.io-index" 393 | dependencies = [ 394 | "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 395 | "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 396 | "syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)", 397 | ] 398 | 399 | [[package]] 400 | name = "dotenv" 401 | version = "0.13.0" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | dependencies = [ 404 | "failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 405 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 406 | "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 407 | ] 408 | 409 | [[package]] 410 | name = "dtoa" 411 | version = "0.4.2" 412 | source = "registry+https://github.com/rust-lang/crates.io-index" 413 | 414 | [[package]] 415 | name = "encoding" 416 | version = "0.2.33" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | dependencies = [ 419 | "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 420 | "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 421 | "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 422 | "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 423 | "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 424 | ] 425 | 426 | [[package]] 427 | name = "encoding-index-japanese" 428 | version = "1.20141219.5" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | dependencies = [ 431 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 432 | ] 433 | 434 | [[package]] 435 | name = "encoding-index-korean" 436 | version = "1.20141219.5" 437 | source = "registry+https://github.com/rust-lang/crates.io-index" 438 | dependencies = [ 439 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 440 | ] 441 | 442 | [[package]] 443 | name = "encoding-index-simpchinese" 444 | version = "1.20141219.5" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | dependencies = [ 447 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 448 | ] 449 | 450 | [[package]] 451 | name = "encoding-index-singlebyte" 452 | version = "1.20141219.5" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | dependencies = [ 455 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 456 | ] 457 | 458 | [[package]] 459 | name = "encoding-index-tradchinese" 460 | version = "1.20141219.5" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | dependencies = [ 463 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 464 | ] 465 | 466 | [[package]] 467 | name = "encoding_index_tests" 468 | version = "0.1.4" 469 | source = "registry+https://github.com/rust-lang/crates.io-index" 470 | 471 | [[package]] 472 | name = "env_logger" 473 | version = "0.5.10" 474 | source = "registry+https://github.com/rust-lang/crates.io-index" 475 | dependencies = [ 476 | "atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", 477 | "humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 478 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 479 | "regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 480 | "termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 481 | ] 482 | 483 | [[package]] 484 | name = "error-chain" 485 | version = "0.1.12" 486 | source = "registry+https://github.com/rust-lang/crates.io-index" 487 | dependencies = [ 488 | "backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 489 | ] 490 | 491 | [[package]] 492 | name = "error-chain" 493 | version = "0.8.1" 494 | source = "registry+https://github.com/rust-lang/crates.io-index" 495 | dependencies = [ 496 | "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 497 | ] 498 | 499 | [[package]] 500 | name = "failure" 501 | version = "0.1.1" 502 | source = "registry+https://github.com/rust-lang/crates.io-index" 503 | dependencies = [ 504 | "backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 505 | "failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 506 | ] 507 | 508 | [[package]] 509 | name = "failure_derive" 510 | version = "0.1.1" 511 | source = "registry+https://github.com/rust-lang/crates.io-index" 512 | dependencies = [ 513 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 514 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 515 | "synstructure 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 516 | ] 517 | 518 | [[package]] 519 | name = "flate2" 520 | version = "1.0.1" 521 | source = "registry+https://github.com/rust-lang/crates.io-index" 522 | dependencies = [ 523 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 524 | "miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", 525 | ] 526 | 527 | [[package]] 528 | name = "fnv" 529 | version = "1.0.6" 530 | source = "registry+https://github.com/rust-lang/crates.io-index" 531 | 532 | [[package]] 533 | name = "fuchsia-zircon" 534 | version = "0.3.3" 535 | source = "registry+https://github.com/rust-lang/crates.io-index" 536 | dependencies = [ 537 | "bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 538 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 539 | ] 540 | 541 | [[package]] 542 | name = "fuchsia-zircon-sys" 543 | version = "0.3.3" 544 | source = "registry+https://github.com/rust-lang/crates.io-index" 545 | 546 | [[package]] 547 | name = "futures" 548 | version = "0.1.21" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | 551 | [[package]] 552 | name = "futures-cpupool" 553 | version = "0.1.8" 554 | source = "registry+https://github.com/rust-lang/crates.io-index" 555 | dependencies = [ 556 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 557 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 558 | ] 559 | 560 | [[package]] 561 | name = "gcc" 562 | version = "0.3.54" 563 | source = "registry+https://github.com/rust-lang/crates.io-index" 564 | 565 | [[package]] 566 | name = "h2" 567 | version = "0.1.10" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | dependencies = [ 570 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 571 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 572 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 573 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 574 | "http 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 575 | "indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 576 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 577 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 578 | "string 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 579 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 580 | ] 581 | 582 | [[package]] 583 | name = "hostname" 584 | version = "0.1.5" 585 | source = "registry+https://github.com/rust-lang/crates.io-index" 586 | dependencies = [ 587 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 588 | "winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 589 | ] 590 | 591 | [[package]] 592 | name = "htmlescape" 593 | version = "0.3.1" 594 | source = "registry+https://github.com/rust-lang/crates.io-index" 595 | 596 | [[package]] 597 | name = "http" 598 | version = "0.1.7" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | dependencies = [ 601 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 602 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 603 | "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 604 | ] 605 | 606 | [[package]] 607 | name = "httparse" 608 | version = "1.3.1" 609 | source = "registry+https://github.com/rust-lang/crates.io-index" 610 | 611 | [[package]] 612 | name = "humantime" 613 | version = "1.1.1" 614 | source = "registry+https://github.com/rust-lang/crates.io-index" 615 | dependencies = [ 616 | "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 617 | ] 618 | 619 | [[package]] 620 | name = "idna" 621 | version = "0.1.4" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | dependencies = [ 624 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 625 | "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 626 | "unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 627 | ] 628 | 629 | [[package]] 630 | name = "indexmap" 631 | version = "1.0.1" 632 | source = "registry+https://github.com/rust-lang/crates.io-index" 633 | 634 | [[package]] 635 | name = "iovec" 636 | version = "0.1.2" 637 | source = "registry+https://github.com/rust-lang/crates.io-index" 638 | dependencies = [ 639 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 640 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 641 | ] 642 | 643 | [[package]] 644 | name = "ipconfig" 645 | version = "0.1.6" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | dependencies = [ 648 | "error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", 649 | "socket2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 650 | "widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 651 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 652 | "winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 653 | ] 654 | 655 | [[package]] 656 | name = "itoa" 657 | version = "0.4.1" 658 | source = "registry+https://github.com/rust-lang/crates.io-index" 659 | 660 | [[package]] 661 | name = "kernel32-sys" 662 | version = "0.2.2" 663 | source = "registry+https://github.com/rust-lang/crates.io-index" 664 | dependencies = [ 665 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 666 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 667 | ] 668 | 669 | [[package]] 670 | name = "language-tags" 671 | version = "0.2.2" 672 | source = "registry+https://github.com/rust-lang/crates.io-index" 673 | 674 | [[package]] 675 | name = "lazy_static" 676 | version = "0.2.11" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | 679 | [[package]] 680 | name = "lazy_static" 681 | version = "1.0.1" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | 684 | [[package]] 685 | name = "lazycell" 686 | version = "0.6.0" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | 689 | [[package]] 690 | name = "lazycell" 691 | version = "1.0.0" 692 | source = "registry+https://github.com/rust-lang/crates.io-index" 693 | 694 | [[package]] 695 | name = "libc" 696 | version = "0.2.42" 697 | source = "registry+https://github.com/rust-lang/crates.io-index" 698 | 699 | [[package]] 700 | name = "linked-hash-map" 701 | version = "0.4.2" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | 704 | [[package]] 705 | name = "linked-hash-map" 706 | version = "0.5.1" 707 | source = "registry+https://github.com/rust-lang/crates.io-index" 708 | 709 | [[package]] 710 | name = "lock_api" 711 | version = "0.1.3" 712 | source = "registry+https://github.com/rust-lang/crates.io-index" 713 | dependencies = [ 714 | "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 715 | "scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 716 | ] 717 | 718 | [[package]] 719 | name = "log" 720 | version = "0.4.2" 721 | source = "registry+https://github.com/rust-lang/crates.io-index" 722 | dependencies = [ 723 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 724 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 725 | ] 726 | 727 | [[package]] 728 | name = "log-mdc" 729 | version = "0.1.0" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | 732 | [[package]] 733 | name = "log4rs" 734 | version = "0.8.0" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | dependencies = [ 737 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 738 | "chrono 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 739 | "crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 740 | "flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 741 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 742 | "humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 743 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 744 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 745 | "log-mdc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 746 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 747 | "serde-value 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 748 | "serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 749 | "serde_json 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 750 | "serde_yaml 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)", 751 | "typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 752 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 753 | ] 754 | 755 | [[package]] 756 | name = "lru-cache" 757 | version = "0.1.1" 758 | source = "registry+https://github.com/rust-lang/crates.io-index" 759 | dependencies = [ 760 | "linked-hash-map 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 761 | ] 762 | 763 | [[package]] 764 | name = "matches" 765 | version = "0.1.6" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | 768 | [[package]] 769 | name = "memchr" 770 | version = "2.0.1" 771 | source = "registry+https://github.com/rust-lang/crates.io-index" 772 | dependencies = [ 773 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 774 | ] 775 | 776 | [[package]] 777 | name = "memoffset" 778 | version = "0.2.1" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | 781 | [[package]] 782 | name = "meval" 783 | version = "0.1.0" 784 | source = "registry+https://github.com/rust-lang/crates.io-index" 785 | dependencies = [ 786 | "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 787 | "nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 788 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 789 | ] 790 | 791 | [[package]] 792 | name = "mime" 793 | version = "0.3.7" 794 | source = "registry+https://github.com/rust-lang/crates.io-index" 795 | dependencies = [ 796 | "unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 797 | ] 798 | 799 | [[package]] 800 | name = "mime_guess" 801 | version = "2.0.0-alpha.4" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | dependencies = [ 804 | "mime 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", 805 | "phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", 806 | "phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", 807 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 808 | ] 809 | 810 | [[package]] 811 | name = "miniz-sys" 812 | version = "0.1.10" 813 | source = "registry+https://github.com/rust-lang/crates.io-index" 814 | dependencies = [ 815 | "cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)", 816 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 817 | ] 818 | 819 | [[package]] 820 | name = "mio" 821 | version = "0.6.14" 822 | source = "registry+https://github.com/rust-lang/crates.io-index" 823 | dependencies = [ 824 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 825 | "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 826 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 827 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 828 | "lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", 829 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 830 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 831 | "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 832 | "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 833 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 834 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 835 | ] 836 | 837 | [[package]] 838 | name = "mio-uds" 839 | version = "0.6.6" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | dependencies = [ 842 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 843 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 844 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 845 | ] 846 | 847 | [[package]] 848 | name = "miow" 849 | version = "0.2.1" 850 | source = "registry+https://github.com/rust-lang/crates.io-index" 851 | dependencies = [ 852 | "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 853 | "net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 854 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 855 | "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 856 | ] 857 | 858 | [[package]] 859 | name = "mysqlclient-sys" 860 | version = "0.2.3" 861 | source = "registry+https://github.com/rust-lang/crates.io-index" 862 | dependencies = [ 863 | "pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 864 | "vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 865 | ] 866 | 867 | [[package]] 868 | name = "net2" 869 | version = "0.2.32" 870 | source = "registry+https://github.com/rust-lang/crates.io-index" 871 | dependencies = [ 872 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 873 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 874 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 875 | ] 876 | 877 | [[package]] 878 | name = "nodrop" 879 | version = "0.1.12" 880 | source = "registry+https://github.com/rust-lang/crates.io-index" 881 | 882 | [[package]] 883 | name = "nom" 884 | version = "1.2.4" 885 | source = "registry+https://github.com/rust-lang/crates.io-index" 886 | 887 | [[package]] 888 | name = "num-integer" 889 | version = "0.1.39" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | dependencies = [ 892 | "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 893 | ] 894 | 895 | [[package]] 896 | name = "num-traits" 897 | version = "0.1.43" 898 | source = "registry+https://github.com/rust-lang/crates.io-index" 899 | dependencies = [ 900 | "num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", 901 | ] 902 | 903 | [[package]] 904 | name = "num-traits" 905 | version = "0.2.5" 906 | source = "registry+https://github.com/rust-lang/crates.io-index" 907 | 908 | [[package]] 909 | name = "num_cpus" 910 | version = "1.8.0" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | dependencies = [ 913 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 914 | ] 915 | 916 | [[package]] 917 | name = "ordered-float" 918 | version = "0.5.0" 919 | source = "registry+https://github.com/rust-lang/crates.io-index" 920 | dependencies = [ 921 | "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", 922 | "unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 923 | ] 924 | 925 | [[package]] 926 | name = "owning_ref" 927 | version = "0.3.3" 928 | source = "registry+https://github.com/rust-lang/crates.io-index" 929 | dependencies = [ 930 | "stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 931 | ] 932 | 933 | [[package]] 934 | name = "parking_lot" 935 | version = "0.5.5" 936 | source = "registry+https://github.com/rust-lang/crates.io-index" 937 | dependencies = [ 938 | "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 939 | "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 940 | ] 941 | 942 | [[package]] 943 | name = "parking_lot" 944 | version = "0.6.3" 945 | source = "registry+https://github.com/rust-lang/crates.io-index" 946 | dependencies = [ 947 | "lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 948 | "parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)", 949 | ] 950 | 951 | [[package]] 952 | name = "parking_lot_core" 953 | version = "0.2.14" 954 | source = "registry+https://github.com/rust-lang/crates.io-index" 955 | dependencies = [ 956 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 957 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 958 | "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 959 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 960 | ] 961 | 962 | [[package]] 963 | name = "partner" 964 | version = "0.1.0" 965 | dependencies = [ 966 | "actix 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 967 | "actix-redis 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 968 | "actix-web 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", 969 | "chrono 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 970 | "cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", 971 | "diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 972 | "dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)", 973 | "env_logger 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)", 974 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 975 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 976 | "log4rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 977 | "meval 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 978 | "rand 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 979 | "redis-async 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 980 | "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", 981 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 982 | "serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 983 | "serde_json 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", 984 | "toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 985 | ] 986 | 987 | [[package]] 988 | name = "percent-encoding" 989 | version = "1.0.1" 990 | source = "registry+https://github.com/rust-lang/crates.io-index" 991 | 992 | [[package]] 993 | name = "phf" 994 | version = "0.7.22" 995 | source = "registry+https://github.com/rust-lang/crates.io-index" 996 | dependencies = [ 997 | "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", 998 | ] 999 | 1000 | [[package]] 1001 | name = "phf_codegen" 1002 | version = "0.7.22" 1003 | source = "registry+https://github.com/rust-lang/crates.io-index" 1004 | dependencies = [ 1005 | "phf_generator 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", 1006 | "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "phf_generator" 1011 | version = "0.7.22" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | dependencies = [ 1014 | "phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)", 1015 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1016 | ] 1017 | 1018 | [[package]] 1019 | name = "phf_shared" 1020 | version = "0.7.22" 1021 | source = "registry+https://github.com/rust-lang/crates.io-index" 1022 | dependencies = [ 1023 | "siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1024 | "unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1025 | ] 1026 | 1027 | [[package]] 1028 | name = "pkg-config" 1029 | version = "0.3.11" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | 1032 | [[package]] 1033 | name = "proc-macro2" 1034 | version = "0.3.8" 1035 | source = "registry+https://github.com/rust-lang/crates.io-index" 1036 | dependencies = [ 1037 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1038 | ] 1039 | 1040 | [[package]] 1041 | name = "proc-macro2" 1042 | version = "0.4.6" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | dependencies = [ 1045 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1046 | ] 1047 | 1048 | [[package]] 1049 | name = "quick-error" 1050 | version = "1.2.2" 1051 | source = "registry+https://github.com/rust-lang/crates.io-index" 1052 | 1053 | [[package]] 1054 | name = "quote" 1055 | version = "0.3.15" 1056 | source = "registry+https://github.com/rust-lang/crates.io-index" 1057 | 1058 | [[package]] 1059 | name = "quote" 1060 | version = "0.5.2" 1061 | source = "registry+https://github.com/rust-lang/crates.io-index" 1062 | dependencies = [ 1063 | "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "quote" 1068 | version = "0.6.3" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | dependencies = [ 1071 | "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1072 | ] 1073 | 1074 | [[package]] 1075 | name = "r2d2" 1076 | version = "0.8.2" 1077 | source = "registry+https://github.com/rust-lang/crates.io-index" 1078 | dependencies = [ 1079 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1080 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1081 | "scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1082 | ] 1083 | 1084 | [[package]] 1085 | name = "rand" 1086 | version = "0.3.22" 1087 | source = "registry+https://github.com/rust-lang/crates.io-index" 1088 | dependencies = [ 1089 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1090 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1091 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | ] 1093 | 1094 | [[package]] 1095 | name = "rand" 1096 | version = "0.4.2" 1097 | source = "registry+https://github.com/rust-lang/crates.io-index" 1098 | dependencies = [ 1099 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1101 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1102 | ] 1103 | 1104 | [[package]] 1105 | name = "rand" 1106 | version = "0.5.2" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | dependencies = [ 1109 | "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", 1110 | "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1112 | "rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1113 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1114 | ] 1115 | 1116 | [[package]] 1117 | name = "rand_core" 1118 | version = "0.2.1" 1119 | source = "registry+https://github.com/rust-lang/crates.io-index" 1120 | 1121 | [[package]] 1122 | name = "rayon" 1123 | version = "0.8.2" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | dependencies = [ 1126 | "rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1127 | ] 1128 | 1129 | [[package]] 1130 | name = "rayon-core" 1131 | version = "1.4.0" 1132 | source = "registry+https://github.com/rust-lang/crates.io-index" 1133 | dependencies = [ 1134 | "crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1135 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1136 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1137 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1138 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "redis-async" 1143 | version = "0.3.2" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | dependencies = [ 1146 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1147 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1148 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1149 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1150 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1151 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1152 | ] 1153 | 1154 | [[package]] 1155 | name = "redox_syscall" 1156 | version = "0.1.40" 1157 | source = "registry+https://github.com/rust-lang/crates.io-index" 1158 | 1159 | [[package]] 1160 | name = "redox_termios" 1161 | version = "0.1.1" 1162 | source = "registry+https://github.com/rust-lang/crates.io-index" 1163 | dependencies = [ 1164 | "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 1165 | ] 1166 | 1167 | [[package]] 1168 | name = "regex" 1169 | version = "1.0.1" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | dependencies = [ 1172 | "aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1173 | "memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1174 | "regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1175 | "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1176 | "utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1177 | ] 1178 | 1179 | [[package]] 1180 | name = "regex-syntax" 1181 | version = "0.6.1" 1182 | source = "registry+https://github.com/rust-lang/crates.io-index" 1183 | dependencies = [ 1184 | "ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1185 | ] 1186 | 1187 | [[package]] 1188 | name = "resolv-conf" 1189 | version = "0.6.1" 1190 | source = "registry+https://github.com/rust-lang/crates.io-index" 1191 | dependencies = [ 1192 | "hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1193 | "quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | ] 1195 | 1196 | [[package]] 1197 | name = "ring" 1198 | version = "0.12.1" 1199 | source = "registry+https://github.com/rust-lang/crates.io-index" 1200 | dependencies = [ 1201 | "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", 1202 | "lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 1203 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1204 | "rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)", 1205 | "untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1206 | ] 1207 | 1208 | [[package]] 1209 | name = "rust-crypto" 1210 | version = "0.2.36" 1211 | source = "registry+https://github.com/rust-lang/crates.io-index" 1212 | dependencies = [ 1213 | "gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)", 1214 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1215 | "rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", 1217 | "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | ] 1219 | 1220 | [[package]] 1221 | name = "rustc-demangle" 1222 | version = "0.1.8" 1223 | source = "registry+https://github.com/rust-lang/crates.io-index" 1224 | 1225 | [[package]] 1226 | name = "rustc-serialize" 1227 | version = "0.3.24" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | 1230 | [[package]] 1231 | name = "safemem" 1232 | version = "0.2.0" 1233 | source = "registry+https://github.com/rust-lang/crates.io-index" 1234 | 1235 | [[package]] 1236 | name = "scheduled-thread-pool" 1237 | version = "0.2.0" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | dependencies = [ 1240 | "antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1241 | ] 1242 | 1243 | [[package]] 1244 | name = "scopeguard" 1245 | version = "0.3.3" 1246 | source = "registry+https://github.com/rust-lang/crates.io-index" 1247 | 1248 | [[package]] 1249 | name = "serde" 1250 | version = "1.0.66" 1251 | source = "registry+https://github.com/rust-lang/crates.io-index" 1252 | 1253 | [[package]] 1254 | name = "serde-value" 1255 | version = "0.5.2" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | dependencies = [ 1258 | "ordered-float 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 1259 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 1260 | ] 1261 | 1262 | [[package]] 1263 | name = "serde_derive" 1264 | version = "1.0.66" 1265 | source = "registry+https://github.com/rust-lang/crates.io-index" 1266 | dependencies = [ 1267 | "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1268 | "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "syn 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | ] 1271 | 1272 | [[package]] 1273 | name = "serde_json" 1274 | version = "1.0.21" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | dependencies = [ 1277 | "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1278 | "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", 1279 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 1280 | ] 1281 | 1282 | [[package]] 1283 | name = "serde_yaml" 1284 | version = "0.7.5" 1285 | source = "registry+https://github.com/rust-lang/crates.io-index" 1286 | dependencies = [ 1287 | "dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1288 | "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1289 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 1290 | "yaml-rust 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1291 | ] 1292 | 1293 | [[package]] 1294 | name = "sha1" 1295 | version = "0.6.0" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | 1298 | [[package]] 1299 | name = "siphasher" 1300 | version = "0.2.2" 1301 | source = "registry+https://github.com/rust-lang/crates.io-index" 1302 | 1303 | [[package]] 1304 | name = "slab" 1305 | version = "0.4.0" 1306 | source = "registry+https://github.com/rust-lang/crates.io-index" 1307 | 1308 | [[package]] 1309 | name = "smallvec" 1310 | version = "0.6.3" 1311 | source = "registry+https://github.com/rust-lang/crates.io-index" 1312 | dependencies = [ 1313 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "socket2" 1318 | version = "0.3.6" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | dependencies = [ 1321 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1322 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1323 | "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 1324 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1325 | ] 1326 | 1327 | [[package]] 1328 | name = "stable_deref_trait" 1329 | version = "1.1.0" 1330 | source = "registry+https://github.com/rust-lang/crates.io-index" 1331 | 1332 | [[package]] 1333 | name = "string" 1334 | version = "0.1.0" 1335 | source = "registry+https://github.com/rust-lang/crates.io-index" 1336 | 1337 | [[package]] 1338 | name = "syn" 1339 | version = "0.11.11" 1340 | source = "registry+https://github.com/rust-lang/crates.io-index" 1341 | dependencies = [ 1342 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 1343 | "synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)", 1344 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1345 | ] 1346 | 1347 | [[package]] 1348 | name = "syn" 1349 | version = "0.13.11" 1350 | source = "registry+https://github.com/rust-lang/crates.io-index" 1351 | dependencies = [ 1352 | "proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", 1353 | "quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", 1354 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1355 | ] 1356 | 1357 | [[package]] 1358 | name = "syn" 1359 | version = "0.14.2" 1360 | source = "registry+https://github.com/rust-lang/crates.io-index" 1361 | dependencies = [ 1362 | "proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", 1363 | "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 1364 | "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | ] 1366 | 1367 | [[package]] 1368 | name = "synom" 1369 | version = "0.11.3" 1370 | source = "registry+https://github.com/rust-lang/crates.io-index" 1371 | dependencies = [ 1372 | "unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 1373 | ] 1374 | 1375 | [[package]] 1376 | name = "synstructure" 1377 | version = "0.6.1" 1378 | source = "registry+https://github.com/rust-lang/crates.io-index" 1379 | dependencies = [ 1380 | "quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", 1381 | "syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)", 1382 | ] 1383 | 1384 | [[package]] 1385 | name = "termcolor" 1386 | version = "0.3.6" 1387 | source = "registry+https://github.com/rust-lang/crates.io-index" 1388 | dependencies = [ 1389 | "wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1390 | ] 1391 | 1392 | [[package]] 1393 | name = "termion" 1394 | version = "1.5.1" 1395 | source = "registry+https://github.com/rust-lang/crates.io-index" 1396 | dependencies = [ 1397 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1398 | "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 1399 | "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1400 | ] 1401 | 1402 | [[package]] 1403 | name = "thread_local" 1404 | version = "0.3.5" 1405 | source = "registry+https://github.com/rust-lang/crates.io-index" 1406 | dependencies = [ 1407 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1408 | "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1409 | ] 1410 | 1411 | [[package]] 1412 | name = "time" 1413 | version = "0.1.40" 1414 | source = "registry+https://github.com/rust-lang/crates.io-index" 1415 | dependencies = [ 1416 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1417 | "redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)", 1418 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1419 | ] 1420 | 1421 | [[package]] 1422 | name = "tokio" 1423 | version = "0.1.7" 1424 | source = "registry+https://github.com/rust-lang/crates.io-index" 1425 | dependencies = [ 1426 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1427 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 1428 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1429 | "tokio-fs 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1430 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1431 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1432 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1433 | "tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1434 | "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1435 | "tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1436 | ] 1437 | 1438 | [[package]] 1439 | name = "tokio-codec" 1440 | version = "0.1.0" 1441 | source = "registry+https://github.com/rust-lang/crates.io-index" 1442 | dependencies = [ 1443 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1444 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1445 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1446 | ] 1447 | 1448 | [[package]] 1449 | name = "tokio-executor" 1450 | version = "0.1.2" 1451 | source = "registry+https://github.com/rust-lang/crates.io-index" 1452 | dependencies = [ 1453 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1454 | ] 1455 | 1456 | [[package]] 1457 | name = "tokio-fs" 1458 | version = "0.1.1" 1459 | source = "registry+https://github.com/rust-lang/crates.io-index" 1460 | dependencies = [ 1461 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1462 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1463 | "tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1464 | ] 1465 | 1466 | [[package]] 1467 | name = "tokio-io" 1468 | version = "0.1.7" 1469 | source = "registry+https://github.com/rust-lang/crates.io-index" 1470 | dependencies = [ 1471 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1472 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1473 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1474 | ] 1475 | 1476 | [[package]] 1477 | name = "tokio-reactor" 1478 | version = "0.1.2" 1479 | source = "registry+https://github.com/rust-lang/crates.io-index" 1480 | dependencies = [ 1481 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1482 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1483 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 1484 | "slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1485 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1486 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1487 | ] 1488 | 1489 | [[package]] 1490 | name = "tokio-signal" 1491 | version = "0.2.1" 1492 | source = "registry+https://github.com/rust-lang/crates.io-index" 1493 | dependencies = [ 1494 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1495 | "libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)", 1496 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 1497 | "mio-uds 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", 1498 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1499 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1500 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1501 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "tokio-tcp" 1506 | version = "0.1.0" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | dependencies = [ 1509 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1510 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1511 | "iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1512 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 1513 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1514 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1515 | ] 1516 | 1517 | [[package]] 1518 | name = "tokio-threadpool" 1519 | version = "0.1.4" 1520 | source = "registry+https://github.com/rust-lang/crates.io-index" 1521 | dependencies = [ 1522 | "crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1523 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1524 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1525 | "num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)", 1526 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1527 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1528 | ] 1529 | 1530 | [[package]] 1531 | name = "tokio-timer" 1532 | version = "0.2.4" 1533 | source = "registry+https://github.com/rust-lang/crates.io-index" 1534 | dependencies = [ 1535 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1536 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1537 | ] 1538 | 1539 | [[package]] 1540 | name = "tokio-udp" 1541 | version = "0.1.1" 1542 | source = "registry+https://github.com/rust-lang/crates.io-index" 1543 | dependencies = [ 1544 | "bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", 1545 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1546 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1547 | "mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)", 1548 | "tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1549 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1550 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1551 | ] 1552 | 1553 | [[package]] 1554 | name = "toml" 1555 | version = "0.4.6" 1556 | source = "registry+https://github.com/rust-lang/crates.io-index" 1557 | dependencies = [ 1558 | "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", 1559 | ] 1560 | 1561 | [[package]] 1562 | name = "traitobject" 1563 | version = "0.1.0" 1564 | source = "registry+https://github.com/rust-lang/crates.io-index" 1565 | 1566 | [[package]] 1567 | name = "trust-dns-proto" 1568 | version = "0.4.0" 1569 | source = "registry+https://github.com/rust-lang/crates.io-index" 1570 | dependencies = [ 1571 | "byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1572 | "error-chain 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 1573 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1574 | "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1575 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1576 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1577 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1578 | "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 1579 | "socket2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1580 | "tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1581 | "tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1582 | "tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1583 | "tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1584 | "tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", 1585 | "tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1586 | "url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)", 1587 | ] 1588 | 1589 | [[package]] 1590 | name = "trust-dns-resolver" 1591 | version = "0.9.0" 1592 | source = "registry+https://github.com/rust-lang/crates.io-index" 1593 | dependencies = [ 1594 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1595 | "error-chain 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", 1596 | "futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1597 | "ipconfig 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1598 | "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1599 | "log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1600 | "lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1601 | "resolv-conf 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", 1602 | "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)", 1603 | "tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", 1604 | "trust-dns-proto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1605 | ] 1606 | 1607 | [[package]] 1608 | name = "typemap" 1609 | version = "0.3.3" 1610 | source = "registry+https://github.com/rust-lang/crates.io-index" 1611 | dependencies = [ 1612 | "unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1613 | ] 1614 | 1615 | [[package]] 1616 | name = "ucd-util" 1617 | version = "0.1.1" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | 1620 | [[package]] 1621 | name = "unicase" 1622 | version = "1.4.2" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | dependencies = [ 1625 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1626 | ] 1627 | 1628 | [[package]] 1629 | name = "unicase" 1630 | version = "2.1.0" 1631 | source = "registry+https://github.com/rust-lang/crates.io-index" 1632 | dependencies = [ 1633 | "version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "unicode-bidi" 1638 | version = "0.3.4" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | dependencies = [ 1641 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1642 | ] 1643 | 1644 | [[package]] 1645 | name = "unicode-normalization" 1646 | version = "0.1.7" 1647 | source = "registry+https://github.com/rust-lang/crates.io-index" 1648 | 1649 | [[package]] 1650 | name = "unicode-xid" 1651 | version = "0.0.4" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | 1654 | [[package]] 1655 | name = "unicode-xid" 1656 | version = "0.1.0" 1657 | source = "registry+https://github.com/rust-lang/crates.io-index" 1658 | 1659 | [[package]] 1660 | name = "unreachable" 1661 | version = "0.1.1" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | dependencies = [ 1664 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "unreachable" 1669 | version = "1.0.0" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | dependencies = [ 1672 | "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1673 | ] 1674 | 1675 | [[package]] 1676 | name = "unsafe-any" 1677 | version = "0.4.2" 1678 | source = "registry+https://github.com/rust-lang/crates.io-index" 1679 | dependencies = [ 1680 | "traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1681 | ] 1682 | 1683 | [[package]] 1684 | name = "untrusted" 1685 | version = "0.5.1" 1686 | source = "registry+https://github.com/rust-lang/crates.io-index" 1687 | 1688 | [[package]] 1689 | name = "url" 1690 | version = "1.7.0" 1691 | source = "registry+https://github.com/rust-lang/crates.io-index" 1692 | dependencies = [ 1693 | "encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", 1694 | "idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 1695 | "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1696 | "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "utf8-ranges" 1701 | version = "1.0.0" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | 1704 | [[package]] 1705 | name = "uuid" 1706 | version = "0.6.5" 1707 | source = "registry+https://github.com/rust-lang/crates.io-index" 1708 | dependencies = [ 1709 | "cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1710 | "rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", 1711 | ] 1712 | 1713 | [[package]] 1714 | name = "vcpkg" 1715 | version = "0.2.4" 1716 | source = "registry+https://github.com/rust-lang/crates.io-index" 1717 | 1718 | [[package]] 1719 | name = "version_check" 1720 | version = "0.1.3" 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" 1722 | 1723 | [[package]] 1724 | name = "void" 1725 | version = "1.0.2" 1726 | source = "registry+https://github.com/rust-lang/crates.io-index" 1727 | 1728 | [[package]] 1729 | name = "widestring" 1730 | version = "0.2.2" 1731 | source = "registry+https://github.com/rust-lang/crates.io-index" 1732 | 1733 | [[package]] 1734 | name = "winapi" 1735 | version = "0.2.8" 1736 | source = "registry+https://github.com/rust-lang/crates.io-index" 1737 | 1738 | [[package]] 1739 | name = "winapi" 1740 | version = "0.3.5" 1741 | source = "registry+https://github.com/rust-lang/crates.io-index" 1742 | dependencies = [ 1743 | "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1744 | "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", 1745 | ] 1746 | 1747 | [[package]] 1748 | name = "winapi-build" 1749 | version = "0.1.1" 1750 | source = "registry+https://github.com/rust-lang/crates.io-index" 1751 | 1752 | [[package]] 1753 | name = "winapi-i686-pc-windows-gnu" 1754 | version = "0.4.0" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | 1757 | [[package]] 1758 | name = "winapi-x86_64-pc-windows-gnu" 1759 | version = "0.4.0" 1760 | source = "registry+https://github.com/rust-lang/crates.io-index" 1761 | 1762 | [[package]] 1763 | name = "wincolor" 1764 | version = "0.1.6" 1765 | source = "registry+https://github.com/rust-lang/crates.io-index" 1766 | dependencies = [ 1767 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1768 | ] 1769 | 1770 | [[package]] 1771 | name = "winreg" 1772 | version = "0.5.1" 1773 | source = "registry+https://github.com/rust-lang/crates.io-index" 1774 | dependencies = [ 1775 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1776 | ] 1777 | 1778 | [[package]] 1779 | name = "winutil" 1780 | version = "0.1.1" 1781 | source = "registry+https://github.com/rust-lang/crates.io-index" 1782 | dependencies = [ 1783 | "winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1784 | ] 1785 | 1786 | [[package]] 1787 | name = "ws2_32-sys" 1788 | version = "0.2.1" 1789 | source = "registry+https://github.com/rust-lang/crates.io-index" 1790 | dependencies = [ 1791 | "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", 1792 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1793 | ] 1794 | 1795 | [[package]] 1796 | name = "yaml-rust" 1797 | version = "0.4.0" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | dependencies = [ 1800 | "linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1801 | ] 1802 | 1803 | [metadata] 1804 | "checksum actix 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "28b4c697e6e63280f874c1d3e30c476de1cc589efd91b32b748a17808cb4adc3" 1805 | "checksum actix-redis 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad89a144403961e7d6dc45660bc91421220ec5c75ce267ab44b1e73fa5afa38" 1806 | "checksum actix-web 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1bf2bc88dea9c852b9e2fc1c509a422907e05e83d06bef510e8f493b3396f01a" 1807 | "checksum actix_derive 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c4b1dc922654b9aca7a8a31eab875fde804fa9fbd67f220f2e457787b23590f2" 1808 | "checksum aho-corasick 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d6531d44de723825aa81398a6415283229725a00fa30713812ab9323faa82fc4" 1809 | "checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5" 1810 | "checksum arrayvec 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a1e964f9e24d588183fcb43503abda40d288c8657dfc27311516ce2f05675aef" 1811 | "checksum atty 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2fc4a1aa4c24c0718a250f0681885c1af91419d242f29eb8f2ab28502d80dbd1" 1812 | "checksum backoff 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b7bd67d02cc9dfe9bb1891cb6b4f0169f53cdf0a78b07276ab2141452aaf5789" 1813 | "checksum backtrace 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "346d7644f0b5f9bc73082d3b2236b69a05fd35cce0cfa3724e184e6a5c9e2a2f" 1814 | "checksum backtrace 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "dbdd17cd962b570302f5297aea8648d5923e22e555c2ed2d8b2e34eca646bf6d" 1815 | "checksum backtrace-sys 0.1.23 (registry+https://github.com/rust-lang/crates.io-index)" = "bff67d0c06556c0b8e6b5f090f0eac52d950d9dfd1d35ba04e4ca3543eaf6a7e" 1816 | "checksum base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96434f987501f0ed4eb336a411e0631ecd1afa11574fe148587adc4ff96143c9" 1817 | "checksum base64 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "85415d2594767338a74a30c1d370b2f3262ec1b4ed2d7bba5b3faf4de40467d9" 1818 | "checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789" 1819 | "checksum brotli-sys 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4445dea95f4c2b41cde57cc9fee236ae4dbae88d8fcbdb4750fc1bb5d86aaecd" 1820 | "checksum brotli2 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0cb036c3eade309815c15ddbacec5b22c4d1f3983a774ab2eac2e3e9ea85568e" 1821 | "checksum byteorder 1.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "74c0b906e9446b0a2e4f760cdb3fa4b2c48cdc6db8766a845c54b6ff063fd2e9" 1822 | "checksum bytes 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7dd32989a66957d3f0cba6588f15d4281a733f4e9ffc43fcd2385f57d3bf99ff" 1823 | "checksum cc 1.0.17 (registry+https://github.com/rust-lang/crates.io-index)" = "49ec142f5768efb5b7622aebc3fdbdbb8950a4b9ba996393cb76ef7466e8747d" 1824 | "checksum cfg-if 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "405216fd8fe65f718daa7102ea808a946b6ce40c742998fbfd3463645552de18" 1825 | "checksum chrono 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a81892f0d5a53f46fc05ef0b917305a81c13f1f13bb59ac91ff595817f0764b1" 1826 | "checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" 1827 | "checksum cookie 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "746858cae4eae40fff37e1998320068df317bc247dc91a67c6cfa053afdc2abb" 1828 | "checksum crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24ce9782d4d5c53674646a6a4c1863a21a8fc0cb649b3c94dfc16e45071dea19" 1829 | "checksum crossbeam-channel 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b45c6ba620feae538943c106977c6348c16ad3b03dd8aaecd25a4224345fa795" 1830 | "checksum crossbeam-deque 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f739f8c5363aca78cfb059edf753d8f0d36908c348f3d8d1503f03d8b75d9cf3" 1831 | "checksum crossbeam-deque 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fe8153ef04a7594ded05b427ffad46ddeaf22e63fd48d42b3e1e3bb4db07cae7" 1832 | "checksum crossbeam-epoch 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "927121f5407de9956180ff5e936fe3cf4324279280001cd56b669d28ee7e9150" 1833 | "checksum crossbeam-epoch 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2af0e75710d6181e234c8ecc79f14a97907850a541b13b0be1dd10992f2e4620" 1834 | "checksum crossbeam-utils 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "2760899e32a1d58d5abb31129f8fae5de75220bc2176e77ff7c627ae45c918d9" 1835 | "checksum crossbeam-utils 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d636a8b3bcc1b409d7ffd3facef8f21dcb4009626adbd0c5e6c4305c07253c7b" 1836 | "checksum crossbeam-utils 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ea52fab26a99d96cdff39d0ca75c9716125937f5dba2ab83923aaaf5928f684a" 1837 | "checksum dbghelp-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" 1838 | "checksum diesel 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e71e7a348ae6064e86c4cf0709f0e4c3ef6f30e8e7d3dc05737164af4ebd3511" 1839 | "checksum diesel_derives 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "03bcaf77491f53e400d5ee3bdd57142ea4e1c47fe9217b3361ff9a76ca0e3d37" 1840 | "checksum dotenv 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d0a1279c96732bc6800ce6337b6a614697b0e74ae058dc03c62ebeb78b4d86" 1841 | "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" 1842 | "checksum encoding 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" 1843 | "checksum encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" 1844 | "checksum encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" 1845 | "checksum encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" 1846 | "checksum encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" 1847 | "checksum encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" 1848 | "checksum encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" 1849 | "checksum env_logger 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "0e6e40ebb0e66918a37b38c7acab4e10d299e0463fe2af5d29b9cc86710cfd2a" 1850 | "checksum error-chain 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "faa976b4fd2e4c2b2f3f486874b19e61944d3de3de8b61c9fcf835d583871bcc" 1851 | "checksum error-chain 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6930e04918388a9a2e41d518c25cf679ccafe26733fb4127dbf21993f2575d46" 1852 | "checksum failure 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "934799b6c1de475a012a02dab0ace1ace43789ee4b99bcfbf1a2e3e8ced5de82" 1853 | "checksum failure_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cdda555bb90c9bb67a3b670a0f42de8e73f5981524123ad8578aafec8ddb8b" 1854 | "checksum flate2 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fac2277e84e5e858483756647a9d0aa8d9a2b7cba517fd84325a0aaa69a0909" 1855 | "checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" 1856 | "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" 1857 | "checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" 1858 | "checksum futures 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "1a70b146671de62ec8c8ed572219ca5d594d9b06c0b364d5e67b722fc559b48c" 1859 | "checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" 1860 | "checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb" 1861 | "checksum h2 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "6229ac66d3392dd83288fe04defd4b353354b15bbe07820d53dda063a736afcc" 1862 | "checksum hostname 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "21ceb46a83a85e824ef93669c8b390009623863b5c195d1ba747292c0c72f94e" 1863 | "checksum htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" 1864 | "checksum http 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "4fbced8864b04c030eebcb7d0dc3a81ba5231ac559f5116a29a8ba83ecee22cd" 1865 | "checksum httparse 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "23801d98b42eed0318e5709b0527894ba7c3793d0236814618d6a9b6224152ff" 1866 | "checksum humantime 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0484fda3e7007f2a4a0d9c3a703ca38c71c54c55602ce4660c419fd32e188c9e" 1867 | "checksum idna 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d" 1868 | "checksum indexmap 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08173ba1e906efb6538785a8844dd496f5d34f0a2d88038e95195172fc667220" 1869 | "checksum iovec 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dbe6e417e7d0975db6512b90796e8ce223145ac4e33c377e4a42882a0e88bb08" 1870 | "checksum ipconfig 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9ec4e18c0a0d4340870c14284293632d8421f419008371422dd327892b88877c" 1871 | "checksum itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c069bbec61e1ca5a596166e55dfe4773ff745c3d16b700013bcaff9a6df2c682" 1872 | "checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" 1873 | "checksum language-tags 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a" 1874 | "checksum lazy_static 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73" 1875 | "checksum lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e6412c5e2ad9584b0b8e979393122026cdd6d2a80b933f890dcd694ddbe73739" 1876 | "checksum lazycell 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a6f08839bc70ef4a3fe1d566d5350f519c5912ea86be0df1740a7d247c7fc0ef" 1877 | "checksum lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d33a48d0365c96081958cc663eef834975cb1e8d8bea3378513fc72bdbf11e50" 1878 | "checksum libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)" = "b685088df2b950fccadf07a7187c8ef846a959c142338a48f9dc0b94517eb5f1" 1879 | "checksum linked-hash-map 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7860ec297f7008ff7a1e3382d7f7e1dcd69efc94751a2284bafc3d013c2aa939" 1880 | "checksum linked-hash-map 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "70fb39025bc7cdd76305867c4eccf2f2dcf6e9a57f5b21a93e1c2d86cd03ec9e" 1881 | "checksum lock_api 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "949826a5ccf18c1b3a7c3d57692778d21768b79e46eb9dd07bfc4c2160036c54" 1882 | "checksum log 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6fddaa003a65722a7fb9e26b0ce95921fe4ba590542ced664d8ce2fa26f9f3ac" 1883 | "checksum log-mdc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7" 1884 | "checksum log4rs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a1f16090a553200fba94e104310b3e53e71f500fd9db7dc2143055aa3cc7ae63" 1885 | "checksum lru-cache 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4d06ff7ff06f729ce5f4e227876cb88d10bc59cd4ae1e09fbb2bde15c850dc21" 1886 | "checksum matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376" 1887 | "checksum memchr 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "796fba70e76612589ed2ce7f45282f5af869e0fdd7cc6199fa1aa1f1d591ba9d" 1888 | "checksum memoffset 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3" 1889 | "checksum meval 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "146ed7161c0e9130eb5c374163a05b3b3c13e86e203c81eae94946f41cb9f6fa" 1890 | "checksum mime 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0b28683d0b09bbc20be1c9b3f6f24854efb1356ffcffee08ea3f6e65596e85fa" 1891 | "checksum mime_guess 2.0.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130ea3c9c1b65dba905ab5a4d9ac59234a9585c24d135f264e187fe7336febbd" 1892 | "checksum miniz-sys 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4" 1893 | "checksum mio 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)" = "6d771e3ef92d58a8da8df7d6976bfca9371ed1de6619d9d5a5ce5b1f29b85bfe" 1894 | "checksum mio-uds 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "84c7b5caa3a118a6e34dbac36504503b1e8dc5835e833306b9d6af0e05929f79" 1895 | "checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" 1896 | "checksum mysqlclient-sys 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "879ce08e38739c54d87b7f8332a476004fe2a095f40a142a36f889779d9942b7" 1897 | "checksum net2 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)" = "9044faf1413a1057267be51b5afba8eb1090bd2231c693664aa1db716fe1eae0" 1898 | "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" 1899 | "checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce" 1900 | "checksum num-integer 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "e83d528d2677f0518c570baf2b7abdcf0cd2d248860b68507bdcb3e91d4c0cea" 1901 | "checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" 1902 | "checksum num-traits 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "630de1ef5cc79d0cdd78b7e33b81f083cbfe90de0f4b2b2f07f905867c70e9fe" 1903 | "checksum num_cpus 1.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c51a3322e4bca9d212ad9a158a02abc6934d005490c054a2778df73a70aa0a30" 1904 | "checksum ordered-float 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "58d25b6c0e47b20d05226d288ff434940296e7e2f8b877975da32f862152241f" 1905 | "checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37" 1906 | "checksum parking_lot 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4d05f1349491390b1730afba60bb20d55761bef489a954546b58b4b34e1e2ac" 1907 | "checksum parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69376b761943787ebd5cc85a5bc95958651a22609c5c1c2b65de21786baec72b" 1908 | "checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa" 1909 | "checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831" 1910 | "checksum phf 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "7d37a244c75a9748e049225155f56dbcb98fe71b192fd25fd23cb914b5ad62f2" 1911 | "checksum phf_codegen 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "4e4048fe7dd7a06b8127ecd6d3803149126e9b33c7558879846da3a63f734f2b" 1912 | "checksum phf_generator 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "05a079dd052e7b674d21cb31cbb6c05efd56a2cd2827db7692e2f1a507ebd998" 1913 | "checksum phf_shared 0.7.22 (registry+https://github.com/rust-lang/crates.io-index)" = "c2261d544c2bb6aa3b10022b0be371b9c7c64f762ef28c6f5d4f1ef6d97b5930" 1914 | "checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f" 1915 | "checksum proc-macro2 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7" 1916 | "checksum proc-macro2 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "effdb53b25cdad54f8f48843d67398f7ef2e14f12c1b4cb4effc549a6462a4d6" 1917 | "checksum quick-error 1.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9274b940887ce9addde99c4eee6b5c44cc494b182b97e73dc8ffdcb3397fd3f0" 1918 | "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" 1919 | "checksum quote 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8" 1920 | "checksum quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e44651a0dc4cdd99f71c83b561e221f714912d11af1a4dff0631f923d53af035" 1921 | "checksum r2d2 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f9078ca6a8a5568ed142083bb2f7dc9295b69d16f867ddcc9849e51b17d8db46" 1922 | "checksum rand 0.3.22 (registry+https://github.com/rust-lang/crates.io-index)" = "15a732abf9d20f0ad8eeb6f909bf6868722d9a06e1e50802b6a70351f40b4eb1" 1923 | "checksum rand 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "eba5f8cb59cc50ed56be8880a5c7b496bfd9bd26394e176bc67884094145c2c5" 1924 | "checksum rand 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d0d9f869af32e387d9e0f2bdb64326b8ac84c81d5e55459d0bc7526b0fdb3671" 1925 | "checksum rand_core 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "edecf0f94da5551fc9b492093e30b041a891657db7940ee221f9d2f66e82eef2" 1926 | "checksum rayon 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b614fe08b6665cb9a231d07ac1364b0ef3cb3698f1239ee0c4c3a88a524f54c8" 1927 | "checksum rayon-core 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9d24ad214285a7729b174ed6d3bcfcb80177807f959d95fafd5bfc5c4f201ac8" 1928 | "checksum redis-async 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0109485deeb7a6ba47a042e0c3575a14eca40d33c5dce351ca2917c141797411" 1929 | "checksum redox_syscall 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "c214e91d3ecf43e9a4e41e578973adeb14b474f2bee858742d127af75a0112b1" 1930 | "checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76" 1931 | "checksum regex 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13c93d55961981ba9226a213b385216f83ab43bd6ac53ab16b2eeb47e337cf4e" 1932 | "checksum regex-syntax 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05b06a75f5217880fc5e905952a42750bf44787e56a6c6d6852ed0992f5e1d54" 1933 | "checksum resolv-conf 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c62bd95a41841efdf7fca2ae9951e64a8d8eae7e5da196d8ce489a2241491a92" 1934 | "checksum ring 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "6f7d28b30a72c01b458428e0ae988d4149c20d902346902be881e3edc4bb325c" 1935 | "checksum rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "f76d05d3993fd5f4af9434e8e436db163a12a9d40e1a58a726f27a01dfd12a2a" 1936 | "checksum rustc-demangle 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "76d7ba1feafada44f2d38eed812bd2489a03c0f5abb975799251518b68848649" 1937 | "checksum rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)" = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda" 1938 | "checksum safemem 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e27a8b19b835f7aea908818e871f5cc3a5a186550c30773be987e155e8163d8f" 1939 | "checksum scheduled-thread-pool 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1a2ff3fc5223829be817806c6441279c676e454cc7da608faf03b0ccc09d3889" 1940 | "checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27" 1941 | "checksum serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)" = "e9a2d9a9ac5120e0f768801ca2b58ad6eec929dc9d1d616c162f208869c2ce95" 1942 | "checksum serde-value 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "52903ade2290cbd61a0937a66a268f26cebf246e3ddd7964a8babb297111fb0d" 1943 | "checksum serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)" = "0a90213fa7e0f5eac3f7afe2d5ff6b088af515052cc7303bd68c7e3b91a3fb79" 1944 | "checksum serde_json 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)" = "eb40600c756f02d7ea34943626cefa85732fdae5f95b90b31f9797b3c526d1e6" 1945 | "checksum serde_yaml 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "ef8099d3df28273c99a1728190c7a9f19d444c941044f64adf986bee7ec53051" 1946 | "checksum sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" 1947 | "checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537" 1948 | "checksum slab 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fdeff4cd9ecff59ec7e3744cbca73dfe5ac35c2aedb2cfba8a1c715a18912e9d" 1949 | "checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8" 1950 | "checksum socket2 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "06dc9f86ee48652b7c80f3d254e3b9accb67a928c562c64d10d7b016d3d98dab" 1951 | "checksum stable_deref_trait 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ffbc596e092fe5f598b12ef46cc03754085ac2f4d8c739ad61c4ae266cc3b3fa" 1952 | "checksum string 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "31f98b200e7caca9efca50fc0aa69cd58a5ec81d5f6e75b2f3ecaad2e998972a" 1953 | "checksum syn 0.11.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad" 1954 | "checksum syn 0.13.11 (registry+https://github.com/rust-lang/crates.io-index)" = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b" 1955 | "checksum syn 0.14.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c67da57e61ebc7b7b6fff56bb34440ca3a83db037320b0507af4c10368deda7d" 1956 | "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" 1957 | "checksum synstructure 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3a761d12e6d8dcb4dcf952a7a89b475e3a9d69e4a69307e01a470977642914bd" 1958 | "checksum termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "adc4587ead41bf016f11af03e55a624c06568b5a19db4e90fde573d805074f83" 1959 | "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" 1960 | "checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963" 1961 | "checksum time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "d825be0eb33fda1a7e68012d51e9c7f451dc1a69391e7fdc197060bb8c56667b" 1962 | "checksum tokio 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8ee337e5f4e501fc32966fec6fe0ca0cc1c237b0b1b14a335f8bfe3c5f06e286" 1963 | "checksum tokio-codec 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "881e9645b81c2ce95fcb799ded2c29ffb9f25ef5bef909089a420e5961dd8ccb" 1964 | "checksum tokio-executor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cac2a7883ff3567e9d66bb09100d09b33d90311feca0206c7ca034bc0c55113" 1965 | "checksum tokio-fs 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fc42bae2f6e33865b99069d95bcddfc85c9f0849b4e7e7399eeee71956ef34d7" 1966 | "checksum tokio-io 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a5c9635ee806f26d302b8baa1e145689a280d8f5aa8d0552e7344808da54cc21" 1967 | "checksum tokio-reactor 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e00ec63bbec2c97ce1178cb0587b2c438b2f6b09d3ee54a33c45a9cf0d530810" 1968 | "checksum tokio-signal 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "342d088c63623f63eada591e065778038c63b516939530db2aa09a8df9118507" 1969 | "checksum tokio-tcp 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ec9b094851aadd2caf83ba3ad8e8c4ce65a42104f7b94d9e6550023f0407853f" 1970 | "checksum tokio-threadpool 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b3c3873a6d8d0b636e024e77b9a82eaab6739578a06189ecd0e731c7308fbc5d" 1971 | "checksum tokio-timer 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "028b94314065b90f026a21826cffd62a4e40a92cda3e5c069cc7b02e5945f5e9" 1972 | "checksum tokio-udp 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43eb534af6e8f37d43ab1b612660df14755c42bd003c5f8d2475ee78cc4600c0" 1973 | "checksum toml 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a0263c6c02c4db6c8f7681f9fd35e90de799ebd4cfdeab77a38f4ff6b3d8c0d9" 1974 | "checksum traitobject 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" 1975 | "checksum trust-dns-proto 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "32d7c204ee231f802aa821f9dc2195aa0d0269ef7e9f8c844208565c9e3981e4" 1976 | "checksum trust-dns-resolver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "28b094ad60c4f51f36a493201d04d6605183c62bd5f0c73008a732f23950c156" 1977 | "checksum typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" 1978 | "checksum ucd-util 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd2be2d6639d0f8fe6cdda291ad456e23629558d466e2789d2c3e9892bda285d" 1979 | "checksum unicase 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33" 1980 | "checksum unicase 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284b6d3db520d67fbe88fd778c21510d1b0ba4a551e5d0fbb023d33405f6de8a" 1981 | "checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5" 1982 | "checksum unicode-normalization 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "6a0180bc61fc5a987082bfa111f4cc95c4caff7f9799f3e46df09163a937aa25" 1983 | "checksum unicode-xid 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc" 1984 | "checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" 1985 | "checksum unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f2ae5ddb18e1c92664717616dd9549dde73f539f01bd7b77c2edb2446bdff91" 1986 | "checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" 1987 | "checksum unsafe-any 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" 1988 | "checksum untrusted 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f392d7819dbe58833e26872f5f6f0d68b7bbbe90fc3667e98731c4a15ad9a7ae" 1989 | "checksum url 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f808aadd8cfec6ef90e4a14eb46f24511824d1ac596b9682703c87056c8678b7" 1990 | "checksum utf8-ranges 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" 1991 | "checksum uuid 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e1436e58182935dcd9ce0add9ea0b558e8a87befe01c1a301e6020aeb0876363" 1992 | "checksum vcpkg 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cbe533e138811704c0e3cbde65a818b35d3240409b4346256c5ede403e082474" 1993 | "checksum version_check 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6b772017e347561807c1aa192438c5fd74242a670a6cffacc40f2defd1dc069d" 1994 | "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" 1995 | "checksum widestring 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7157704c2e12e3d2189c507b7482c52820a16dfa4465ba91add92f266667cadb" 1996 | "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" 1997 | "checksum winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "773ef9dcc5f24b7d850d0ff101e542ff24c3b090a9768e03ff889fdef41f00fd" 1998 | "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" 1999 | "checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 2000 | "checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 2001 | "checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767" 2002 | "checksum winreg 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a27a759395c1195c4cc5cda607ef6f8f6498f64e78f7900f5de0a127a424704a" 2003 | "checksum winutil 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7daf138b6b14196e3830a588acf1e86966c694d3e8fb026fb105b8b5dca07e6e" 2004 | "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" 2005 | "checksum yaml-rust 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57ab38ee1a4a266ed033496cf9af1828d8d6e6c1cfa5f643a2809effcae4d628" 2006 | --------------------------------------------------------------------------------