blob: 34d7d92827ed9feb22996e8098e1b1689673a370 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
use rss::{Channel, ChannelBuilder, Item};
use std::io;
use errors::*;
use meetup::event::Event;
pub fn generate(events: &Vec<Event>) -> Result<Channel> {
let items: Vec<Item> = events.into_iter().map(|event| {
let mut item = Item::default();
item.set_title(event.name.clone());
item.set_link(event.link.clone());
item.set_description(event.description.clone());
item
}).collect();
Ok(
ChannelBuilder::default()
.title("Meetup Events")
.description("Upcoming meetups")
.items(items)
.build()?
)
}
/// Writes the channel to standard output.
pub fn write(channel: Channel) -> Result<()> {
let stdout = io::stdout();
let handle = stdout.lock();
channel.write_to(handle)?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_generate_builds_a_channel_of_events() {
let events = 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(),
}
];
let event = &events[0];
let channel = generate(&events).unwrap();
let item = channel.items().first().unwrap();
assert_eq!(event.name, item.title().unwrap());
assert_eq!(event.link, item.link().unwrap());
assert_eq!(event.description, item.description().unwrap());
}
}
|