diff options
| author | Teddy Wing | 2018-04-13 02:30:00 +0200 | 
|---|---|---|
| committer | Teddy Wing | 2018-04-13 02:30:00 +0200 | 
| commit | c95e34243c9805163f08ad76d2c5f744009f5ead (patch) | |
| tree | eb38845a2d121179aa3d86cb4c20090535fa1225 /meetup | |
| parent | 931517dbb1e881bb03f94daddff762f16c94a807 (diff) | |
| download | meetup-find-events-rss-c95e34243c9805163f08ad76d2c5f744009f5ead.tar.bz2 | |
meetup(parse_json): Return a Vec of Events
* Derive `Deserialize` on our `Event` type
* Use Serde to parse a `Vec` of `Event`s that we can return from the
  function
* Return a `Result` from the function to handle Serde errors
Diffstat (limited to 'meetup')
| -rw-r--r-- | meetup/src/event.rs | 14 | ||||
| -rw-r--r-- | meetup/src/lib.rs | 6 | 
2 files changed, 16 insertions, 4 deletions
| diff --git a/meetup/src/event.rs b/meetup/src/event.rs index 5ca5b54..06031b7 100644 --- a/meetup/src/event.rs +++ b/meetup/src/event.rs @@ -1,4 +1,7 @@ -#[derive(Debug, PartialEq)] +use serde_json; + + +#[derive(Debug, Deserialize, PartialEq)]  pub struct Event {      pub name: String,      pub description: String, @@ -13,8 +16,11 @@ pub struct Event {  // } -fn parse_json(json: String) -> Vec<Event> { -    Vec::new() +fn parse_json(json: String) -> Result<Vec<Event>, serde_json::Error> { +    let parsed: serde_json::Value = serde_json::from_str(json.as_ref())?; +    let events: Vec<Event> = serde_json::from_value(parsed["events"].clone())?; + +    Ok(events)  } @@ -27,7 +33,7 @@ mod tests {          let events = parse_json(              include_str!("../testdata/meetup--find-upcoming_events.json")                  .to_owned() -        ); +        ).unwrap();          assert_eq!(              events, diff --git a/meetup/src/lib.rs b/meetup/src/lib.rs index 428d00a..2ad0358 100644 --- a/meetup/src/lib.rs +++ b/meetup/src/lib.rs @@ -1 +1,7 @@ +extern crate serde; + +#[macro_use] +extern crate serde_derive; +extern crate serde_json; +  mod event; | 
