From c95e34243c9805163f08ad76d2c5f744009f5ead Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 13 Apr 2018 02:30:00 +0200 Subject: 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 --- meetup/src/event.rs | 14 ++++++++++---- meetup/src/lib.rs | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'meetup/src') 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 { - Vec::new() +fn parse_json(json: String) -> Result, serde_json::Error> { + let parsed: serde_json::Value = serde_json::from_str(json.as_ref())?; + let events: Vec = 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; -- cgit v1.2.3