From 47d13a8540d0d093a73a81265ede1154ec083911 Mon Sep 17 00:00:00 2001 From: Kevin J Hoerr Date: Mon, 27 Aug 2018 23:22:53 -0400 Subject: Replace error_chain with failure; return JSON object for callback api --- Cargo.toml | 5 ++++- src/errors.rs | 2 -- src/main.rs | 32 ++++++++++++-------------------- src/routes/messages.rs | 19 +++++++++++++++++++ src/routes/mod.rs | 26 ++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 23 deletions(-) delete mode 100644 src/errors.rs create mode 100644 src/routes/messages.rs create mode 100644 src/routes/mod.rs diff --git a/Cargo.toml b/Cargo.toml index 47dec13..4048b54 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,11 @@ path = "src/main.rs" dotenv = "0.10" env_logger = "0.5" error-chain = "^0.12" +failure = "^0.1" diesel = { version = "1.3.0", features = ["postgres"] } actix = "0.7" -actix-web = "^0.7" \ No newline at end of file +actix-web = "^0.7" +serde = "1.0" +serde_derive = "1.0" \ No newline at end of file diff --git a/src/errors.rs b/src/errors.rs deleted file mode 100644 index e8c5bb5..0000000 --- a/src/errors.rs +++ /dev/null @@ -1,2 +0,0 @@ -// Error definitions for whole project -error_chain! { } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 157d035..a9bf995 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,41 +2,36 @@ #![recursion_limit = "1024"] extern crate dotenv; -#[macro_use] -extern crate error_chain; +extern crate failure; extern crate actix; extern crate actix_web; extern crate env_logger; #[macro_use] extern crate diesel; +extern crate serde; +#[macro_use] +extern crate serde_derive; -pub mod errors; pub mod schema; +pub mod routes; -use actix_web::{middleware, server, App, HttpRequest}; +use actix_web::{middleware, server, App}; use diesel::prelude::*; use diesel::pg::PgConnection; use dotenv::dotenv; use std::env; -use errors::*; +use failure::Error; +use routes::*; fn main() { if let Err(ref e) = run() { println!("error: {}", e); - for e in e.iter().skip(1) { - println!("caused by: {}", e); - } - - if let Some(backtrace) = e.backtrace() { - println!("backtrace: {:?}", backtrace); - } - ::std::process::exit(1); } } -fn run() -> Result<()> { +fn run() -> Result<(), Error> { dotenv().ok(); let db_url = env::var("DATABASE_URL") .expect("DATABASE_URL must be set"); @@ -53,8 +48,9 @@ fn run() -> Result<()> { server::new(|| { App::new() .middleware(middleware::Logger::default()) - .resource("/index.html", |r| r.f(index)) - .resource("/", |r| r.f(index)) + .prefix("/api") + .handler("/callback", callback) + .default_resource(|r| r.f(not_understood)) }).bind(&bind_address) .unwrap() .start(); @@ -63,7 +59,3 @@ fn run() -> Result<()> { let _ = sys.run(); Ok(()) } - -fn index(_req: &HttpRequest) -> &'static str { - "Hello, world!" -} diff --git a/src/routes/messages.rs b/src/routes/messages.rs new file mode 100644 index 0000000..694a2a2 --- /dev/null +++ b/src/routes/messages.rs @@ -0,0 +1,19 @@ +use std::collections::HashMap; + +trait Content {} + +trait Message { + fn name(&self) -> String; +} + +#[derive(Serialize)] +pub struct Callback { + pub path: Vec, + pub request: HashMap, +} + +impl Message for Callback { + fn name(&self) -> String { + String::from("Callback") + } +} \ No newline at end of file diff --git a/src/routes/mod.rs b/src/routes/mod.rs new file mode 100644 index 0000000..3d11a8b --- /dev/null +++ b/src/routes/mod.rs @@ -0,0 +1,26 @@ +use actix_web::{HttpRequest, Json, Result, Responder}; +use std::ops::Deref; + +pub mod messages; +use messages::*; + +pub fn not_understood(_req: &HttpRequest) -> impl Responder { + "Hello, world!" +} + +pub fn callback(req: &HttpRequest) -> Result> { + let path = String::from(req.path()); + let request = (*(req.query().deref())).clone(); + + Ok(Json(Callback { + path: destruct_path(path), + request: request, + })) +} + +fn destruct_path(path: String) -> Vec { + path.split_terminator("/") + .skip(1) + .map(|s| String::from(s)) + .collect::>() +} \ No newline at end of file -- cgit