Feed: Add Builder pattern.
This commit is contained in:
parent
b3c4de320b
commit
ef52a026bc
@ -51,7 +51,12 @@ fn index_urls() -> Vec<Box<Future<Item = (), Error = Error>>> {
|
||||
let s = Source::from_url(url).unwrap();
|
||||
// parse it into a channel
|
||||
let chan = rss::Channel::read_from(BufReader::new(buff)).unwrap();
|
||||
Feed::from_channel_source(chan, s.id())
|
||||
|
||||
FeedBuilder::default()
|
||||
.channel(chan)
|
||||
.source_id(s.id())
|
||||
.build()
|
||||
.unwrap()
|
||||
})
|
||||
.collect();
|
||||
|
||||
@ -115,7 +120,11 @@ fn bench_index_large_feed(c: &mut Criterion) {
|
||||
let s = Source::from_url(url).unwrap();
|
||||
// parse it into a channel
|
||||
let chan = rss::Channel::read_from(BufReader::new(CODE)).unwrap();
|
||||
let feed = Feed::from_channel_source(chan, s.id());
|
||||
let feed = FeedBuilder::default()
|
||||
.channel(chan)
|
||||
.source_id(s.id())
|
||||
.build()
|
||||
.unwrap();
|
||||
let _foo = core.run(feed.index()).unwrap();
|
||||
})
|
||||
});
|
||||
@ -132,7 +141,11 @@ fn bench_index_small_feed(c: &mut Criterion) {
|
||||
let s = Source::from_url(url).unwrap();
|
||||
// parse it into a channel
|
||||
let chan = rss::Channel::read_from(BufReader::new(STARS)).unwrap();
|
||||
let feed = Feed::from_channel_source(chan, s.id());
|
||||
let feed = FeedBuilder::default()
|
||||
.channel(chan)
|
||||
.source_id(s.id())
|
||||
.build()
|
||||
.unwrap();
|
||||
let _foo = core.run(feed.index()).unwrap();
|
||||
})
|
||||
});
|
||||
|
||||
@ -12,20 +12,19 @@ use pipeline::*;
|
||||
|
||||
type InsertUpdate = (Vec<NewEpisode>, Vec<Option<(NewEpisode, i32)>>);
|
||||
|
||||
#[derive(Debug)]
|
||||
/// Wrapper struct that hold a `Source` id and the `rss::Channel`
|
||||
/// that corresponds to the `Source.uri` field.
|
||||
#[derive(Debug, Clone, Builder)]
|
||||
#[builder(derive(Debug))]
|
||||
#[builder(setter(into))]
|
||||
pub struct Feed {
|
||||
/// The `rss::Channel` parsed from the `Source` uri.
|
||||
channel: rss::Channel,
|
||||
/// The `Source` id where the xml `rss::Channel` came from.
|
||||
source_id: i32,
|
||||
}
|
||||
|
||||
impl Feed {
|
||||
/// Constructor that consumes a `rss::Channel`, returns a `Feed` struct.
|
||||
pub fn from_channel_source(channel: rss::Channel, source_id: i32) -> Feed {
|
||||
Feed { channel, source_id }
|
||||
}
|
||||
|
||||
/// Index the contents of the RSS `Feed` into the database.
|
||||
pub fn index(self) -> Box<Future<Item = (), Error = Error>> {
|
||||
let fut = self.parse_podcast_async()
|
||||
@ -102,10 +101,11 @@ mod tests {
|
||||
use tokio_core::reactor::Core;
|
||||
|
||||
use Source;
|
||||
use database::truncate_db;
|
||||
use dbqueries;
|
||||
use pipeline;
|
||||
|
||||
use database::truncate_db;
|
||||
|
||||
use std::fs;
|
||||
use std::io::BufReader;
|
||||
|
||||
@ -167,7 +167,11 @@ mod tests {
|
||||
let feed = fs::File::open(path).unwrap();
|
||||
// parse it into a channel
|
||||
let chan = rss::Channel::read_from(BufReader::new(feed)).unwrap();
|
||||
Feed::from_channel_source(chan, s.id())
|
||||
FeedBuilder::default()
|
||||
.channel(chan)
|
||||
.source_id(s.id())
|
||||
.build()
|
||||
.unwrap()
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
||||
@ -64,7 +64,7 @@ mod feed;
|
||||
mod parser;
|
||||
mod schema;
|
||||
|
||||
pub use feed::Feed;
|
||||
pub use feed::{Feed, FeedBuilder};
|
||||
pub use models::{Episode, EpisodeWidgetQuery, Podcast, PodcastCoverQuery, Source};
|
||||
|
||||
/// [XDG Base Direcotory](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) Paths.
|
||||
|
||||
@ -12,7 +12,7 @@ use futures::prelude::*;
|
||||
|
||||
use database::connection;
|
||||
use errors::*;
|
||||
use feed::Feed;
|
||||
use feed::{Feed, FeedBuilder};
|
||||
use models::NewSource;
|
||||
use schema::source;
|
||||
|
||||
@ -125,7 +125,13 @@ impl Source {
|
||||
Ok(res)
|
||||
})
|
||||
.and_then(response_to_channel)
|
||||
.map(move |chan| Feed::from_channel_source(chan, id));
|
||||
.map(move |chan| {
|
||||
FeedBuilder::default()
|
||||
.channel(chan)
|
||||
.source_id(id)
|
||||
.build()
|
||||
.unwrap()
|
||||
});
|
||||
|
||||
Box::new(feed)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user