#[macro_use] extern crate fatcat_api; extern crate chrono; #[macro_use] extern crate diesel; extern crate dotenv; extern crate futures; #[macro_use] extern crate hyper; //extern crate swagger; #[macro_use] extern crate error_chain; extern crate iron; extern crate r2d2; pub mod api_server; pub mod database_schema; mod errors { error_chain!{} } pub use self::errors::*; use diesel::pg::PgConnection; use diesel::prelude::*; use diesel::r2d2::ConnectionManager; use dotenv::dotenv; use iron::middleware::AfterMiddleware; use iron::{Request, Response}; use std::env; pub type ConnectionPool = r2d2::Pool>; pub fn establish_connection() -> PgConnection { dotenv().ok(); let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); PgConnection::establish(&database_url).expect(&format!("Error connecting to {}", database_url)) } /// Instantiate a new server. pub fn server() -> Result { dotenv().ok(); let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); let manager = ConnectionManager::::new(database_url); let pool = r2d2::Pool::builder() .build(manager) .expect("Failed to create database pool."); Ok(api_server::Server { db_pool: pool }) } /// HTTP header middleware header! { (XClacksOverhead, "X-Clacks-Overhead") => [String] } pub struct XClacksOverheadMiddleware; impl AfterMiddleware for XClacksOverheadMiddleware { fn after(&self, _req: &mut Request, mut res: Response) -> iron::IronResult { res.headers .set(XClacksOverhead("GNU aaronsw, jpb".to_owned())); Ok(res) } }