aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin J Hoerr <kjhoerr@protonmail.com>2018-08-27 23:22:53 -0400
committerKevin Hoerr <kjhoerr@submelon.tech>2018-08-31 23:24:45 -0400
commit47d13a8540d0d093a73a81265ede1154ec083911 (patch)
treef8e31a6bea83a13ede87b9a42a91392cb9355623
parent396f302937cc83c8cb50e4bba64b67f4b76b7c13 (diff)
downloadaugust-offensive-47d13a8540d0d093a73a81265ede1154ec083911.tar.gz
august-offensive-47d13a8540d0d093a73a81265ede1154ec083911.tar.bz2
august-offensive-47d13a8540d0d093a73a81265ede1154ec083911.zip
Replace error_chain with failure; return JSON object for callback api
-rw-r--r--Cargo.toml5
-rw-r--r--src/errors.rs2
-rw-r--r--src/main.rs32
-rw-r--r--src/routes/messages.rs19
-rw-r--r--src/routes/mod.rs26
5 files changed, 61 insertions, 23 deletions
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<String>,
+ pub request: HashMap<String, String>,
+}
+
+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<Json<Callback>> {
+ 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<String> {
+ path.split_terminator("/")
+ .skip(1)
+ .map(|s| String::from(s))
+ .collect::<Vec<String>>()
+} \ No newline at end of file