diff options
Diffstat (limited to 'meetup/src')
| -rw-r--r-- | meetup/src/event.rs | 41 | ||||
| -rw-r--r-- | meetup/src/lib.rs | 1 | 
2 files changed, 40 insertions, 2 deletions
| diff --git a/meetup/src/event.rs b/meetup/src/event.rs index ebd3174..615403e 100644 --- a/meetup/src/event.rs +++ b/meetup/src/event.rs @@ -1,5 +1,8 @@ +use reqwest;  use serde_json; +use std::error::Error; +  #[derive(Debug, Deserialize, PartialEq)]  pub struct Event { @@ -12,10 +15,44 @@ pub struct Event {  } -pub fn find_upcoming_events() -> Result<Vec<Event>, serde_json::Error> { +const MEETUP_BASE_URL: &'static str = "https://api.meetup.com"; + +// lat +// lon +// order 'time' +// [radius] +// end_date_range +// [page] +pub fn find_upcoming_events( +    latitude: String, +    longitude: String, +    end_date_range: String, +    radius: Option<String>, +    page: Option<String>, +) -> Result<Vec<Event>, Box<Error>> {      let json = include_str!("../testdata/meetup--find-upcoming_events.json").to_owned(); -    parse_json(json) +    let mut params = vec![ +        ("lat", latitude), +        ("lon", longitude), +        ("end_date_range", end_date_range), +        ("order", "time".to_owned()), +    ]; + +    if let Some(r) = radius { +        params.push(("radius", r)) +    } + +    if let Some(p) = page { +        params.push(("page", p)) +    } + +    let client = reqwest::Client::new(); +    client.get(&format!("{}{}", MEETUP_BASE_URL, "/find/upcoming_events")) +        .query(¶ms) +        .send()?; + +    Ok(parse_json(json)?)  } diff --git a/meetup/src/lib.rs b/meetup/src/lib.rs index 39def21..cd98d9e 100644 --- a/meetup/src/lib.rs +++ b/meetup/src/lib.rs @@ -1,3 +1,4 @@ +extern crate reqwest;  extern crate serde;  #[macro_use] | 
