From a307c4b856fa5cff7d3499a432eb50fe1fb57a23 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Sun, 9 Jul 2017 08:27:38 -0400 Subject: add: /view_quote to view a single quote --- src/lib.rs | 1 + src/server.rs | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index b06f517..2052a02 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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 { let mut result = Map::new(); + + let quote_id = { + let map = itry!(r.get_ref::()); + match map.get("id") { + Some(¶ms::Value::String(ref id)) => Some(itry!(id.parse::())), + _ => None, + } + }; + let quotes = { let mu = r.get::>().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()); -- cgit v1.2.3