diff options
| -rw-r--r-- | meetup/src/event.rs | 2 | ||||
| -rw-r--r-- | src/meetup_rss.rs | 147 | 
2 files changed, 148 insertions, 1 deletions
| diff --git a/meetup/src/event.rs b/meetup/src/event.rs index 30b3fca..cc6abdb 100644 --- a/meetup/src/event.rs +++ b/meetup/src/event.rs @@ -8,7 +8,7 @@ pub struct Event {      pub venue: Option<Venue>,  } -#[derive(Debug, Deserialize, PartialEq)] +#[derive(Clone, Debug, Deserialize, PartialEq)]  pub struct Venue {      pub name: String,      pub address_1: String, diff --git a/src/meetup_rss.rs b/src/meetup_rss.rs index fe7b6df..3445a1a 100644 --- a/src/meetup_rss.rs +++ b/src/meetup_rss.rs @@ -35,9 +35,70 @@ pub fn write(channel: Channel) -> Result<()> {  } +fn description_header(event: &Event) -> String { +    // let when = if let Some(date) = event.local_date && +    //         Some(time) = event.local_time { +    //     format!("When: {} {}", date, time) +    // } else { +    //     "" +    // }; + +    let when = if event.local_date.is_some() && +            event.local_time.is_some() { +        format!( +            "When: {} {}", +            event.local_date.clone().unwrap_or("".to_owned()), +            event.local_time.clone().unwrap_or("".to_owned()), +        ) +    } else { +        "".to_owned() +    }; + +    let place = if let Some(venue) = event.venue.clone() { +        format!( +            "Where: {}, {}, {}, {}", +            venue.name, +            venue.address_1, +            venue.city, +            venue.localized_country_name, +        ) +    } else { +        "".to_owned() +    }; + +    // format!("{}\n{}", when, place) +    // [when, place].join("\n") + +    let header = when; + +    let header = if !header.is_empty() && !place.is_empty() { +        format!("{}\n", header) +    } else { +        header +    }; + +    let header = format!("{}{}", header, place); + +    header + + +//     format!( +//         "When: {} {} +// Where: {}, {}, {}, {}", +//         event.local_date, +//         event.local_time, +//         event.venue.name, +//         event.venue.address_1, +//         event.venue.city, +//         event.venue.localized_country_name, +//     ) +} + +  #[cfg(test)]  mod tests {      use super::*; +    use meetup::event::Venue;      #[test]      fn test_generate_builds_a_channel_of_events() { @@ -64,4 +125,90 @@ mod tests {              item.description().unwrap()          );      } + +    #[test] +    fn description_header_makes_a_string_of_time_and_venue() { +        let event = Event { +            name: "Fairies Story 3 Release Party".to_owned(), +            description: Some("Empty".to_owned()), +            link: "http://example.com".to_owned(), +            local_date: Some("2018-04-15".to_owned()), +            local_time: Some("19:00".to_owned()), +            venue: Some(Venue { +                name: "Passage".to_owned(), +                address_1: "99 Passage des Panoramas".to_owned(), +                city: "Paris".to_owned(), +                localized_country_name: "France".to_owned(), +            }), +        }; + +        let header = description_header(&event); + +        assert_eq!( +            "When: 2018-04-15 19:00 +Where: Passage, 99 Passage des Panoramas, Paris, France", +            header +        ); +    } + +    #[test] +    fn description_header_excludes_when_if_no_date_present() { +        let header = description_header(&Event { +            name: "Fairies Story 3 Release Party".to_owned(), +            description: Some("Empty".to_owned()), +            link: "http://example.com".to_owned(), +            local_date: None, +            local_time: Some("19:00".to_owned()), +            venue: Some(Venue { +                name: "Passage".to_owned(), +                address_1: "99 Passage des Panoramas".to_owned(), +                city: "Paris".to_owned(), +                localized_country_name: "France".to_owned(), +            }), +        }); + +        assert_eq!( +            "Where: Passage, 99 Passage des Panoramas, Paris, France", +            header +        ); +    } + +    #[test] +    fn description_header_excludes_when_if_no_time_present() { +        let header = description_header(&Event { +            name: "Fairies Story 3 Release Party".to_owned(), +            description: Some("Empty".to_owned()), +            link: "http://example.com".to_owned(), +            local_date: Some("2018-04-15".to_owned()), +            local_time: None, +            venue: Some(Venue { +                name: "Passage".to_owned(), +                address_1: "99 Passage des Panoramas".to_owned(), +                city: "Paris".to_owned(), +                localized_country_name: "France".to_owned(), +            }), +        }); + +        assert_eq!( +            "Where: Passage, 99 Passage des Panoramas, Paris, France", +            header +        ); +    } + +    #[test] +    fn description_header_excludes_where_if_no_venue_present() { +        let header = description_header(&Event { +            name: "Fairies Story 3 Release Party".to_owned(), +            description: Some("Empty".to_owned()), +            link: "http://example.com".to_owned(), +            local_date: Some("2018-04-15".to_owned()), +            local_time: Some("19:00".to_owned()), +            venue: None, +        }); + +        assert_eq!( +            "When: 2018-04-15 19:00", +            header +        ); +    }  } | 
