diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2017-07-09 08:27:38 -0400 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2017-07-09 08:27:38 -0400 |
commit | a307c4b856fa5cff7d3499a432eb50fe1fb57a23 (patch) | |
tree | fefa2f0281b2aa67a5b0c1bd8936b6ecbd553dfe /src | |
parent | 5da3990177a1516dd2990f7b6e1b417d1c622d92 (diff) |
add: /view_quote to view a single quote
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | src/server.rs | 18 |
2 files changed, 17 insertions, 2 deletions
@@ -10,6 +10,7 @@ extern crate serde_json; extern crate serde_derive; extern crate rusqlite; extern crate persistent; +extern crate params; pub mod server; pub mod data; diff --git a/src/server.rs b/src/server.rs index 404c3b2..5d30cf7 100644 --- a/src/server.rs +++ b/src/server.rs @@ -8,7 +8,8 @@ use rusqlite::Connection; use std::collections::BTreeMap; use persistent::Write; use handlebars_iron::handlebars::to_json; -use serde_json::{Value, Map}; +use serde_json::Map; +use params; #[derive(Debug)] pub struct State { @@ -36,10 +37,22 @@ fn make_renderer() -> HandlebarsEngine { fn quotes(r: &mut Request) -> IronResult<Response> { let mut result = Map::new(); + + let quote_id = { + let map = itry!(r.get_ref::<params::Params>()); + match map.get("id") { + Some(¶ms::Value::String(ref id)) => Some(itry!(id.parse::<i64>())), + _ => None, + } + }; + let quotes = { let mu = r.get::<Write<State>>().unwrap(); let state = mu.lock().unwrap(); - try!(data::get_quotes(&state.connection)) + match quote_id { + Some(id) => vec!(data::get_quote(&state.connection, id)?), + None => data::get_quotes(&state.connection)?, + } }; result.insert("quotes".to_string(), to_json("es)); Ok(Response::with(( @@ -53,6 +66,7 @@ pub fn serve(state: State, port: u16) { let router = router!( index: get "/" => quotes, + view_quote: get "/view_quote" => quotes, ); let mut chain = Chain::new(router); chain.link_after(make_renderer()); |