From f3a1142975ba108f4e71c64e788e9f5fa4123bdc Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 13 Apr 2018 18:15:41 +0200 Subject: Add a function to build an RSS `Channel` object from a list of `Event`s This uses the RSS crate to build a new channel with items corresponding to the given `Event`s. It needs to be fleshed out a little, but this is the basic idea. --- meetup/src/lib.rs | 2 +- src/lib.rs | 5 +++++ src/meetup_rss.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/lib.rs create mode 100644 src/meetup_rss.rs diff --git a/meetup/src/lib.rs b/meetup/src/lib.rs index 2ad0358..39def21 100644 --- a/meetup/src/lib.rs +++ b/meetup/src/lib.rs @@ -4,4 +4,4 @@ extern crate serde; extern crate serde_derive; extern crate serde_json; -mod event; +pub mod event; diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..9f8b791 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,5 @@ +extern crate rss; + +extern crate meetup; + +mod meetup_rss; diff --git a/src/meetup_rss.rs b/src/meetup_rss.rs new file mode 100644 index 0000000..6879082 --- /dev/null +++ b/src/meetup_rss.rs @@ -0,0 +1,44 @@ +use rss::{Channel, ChannelBuilder, Item}; + +use meetup::event::Event; + +pub fn generate(events: Vec) -> Result { + let items: Vec = events.into_iter().map(|event| { + let mut item = Item::default(); + item.set_title(event.name); + item.set_link(event.link); + item.set_description(event.description); + + item + }).collect(); + + Ok( + ChannelBuilder::default() + .title("Test") + .description("Description") + .items(items) + .build()? + ) +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_generate_builds_a_channel() { + let x = generate( + vec![ + Event { + name: "Summer Sun Celebration".to_owned(), + description: "Description".to_owned(), + link: "http://example.com".to_owned(), + local_date: "2018-04-13".to_owned(), + local_time: "18:30".to_owned(), + } + ] + ); + println!("{:?}", x); + } +} -- cgit v1.2.3