Use generic IntoIterator instead of &[foo] slices.
This commit is contained in:
parent
9d0df9de46
commit
866904a687
@ -33,7 +33,7 @@ static URLS: &[(&[u8], &str)] = &[
|
|||||||
];
|
];
|
||||||
|
|
||||||
fn index_urls() {
|
fn index_urls() {
|
||||||
URLS.par_iter()
|
let feeds: Vec<_> = URLS.par_iter()
|
||||||
.map(|&(buff, url)| {
|
.map(|&(buff, url)| {
|
||||||
// Create and insert a Source into db
|
// Create and insert a Source into db
|
||||||
let s = Source::from_url(url).unwrap();
|
let s = Source::from_url(url).unwrap();
|
||||||
@ -41,9 +41,9 @@ fn index_urls() {
|
|||||||
let chan = rss::Channel::read_from(BufReader::new(buff)).unwrap();
|
let chan = rss::Channel::read_from(BufReader::new(buff)).unwrap();
|
||||||
Feed::from_channel_source(chan, s)
|
Feed::from_channel_source(chan, s)
|
||||||
})
|
})
|
||||||
.for_each(|feed| {
|
.collect();
|
||||||
index(&mut [feed]);
|
|
||||||
});
|
index(feeds);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[bench]
|
#[bench]
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use diesel::prelude::*;
|
use diesel::prelude::*;
|
||||||
|
use rayon::iter::IntoParallelIterator;
|
||||||
|
|
||||||
use diesel::Identifiable;
|
use diesel::Identifiable;
|
||||||
use rss;
|
use rss;
|
||||||
@ -100,13 +101,13 @@ impl Feed {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn index_all() -> Result<()> {
|
pub fn index_all() -> Result<()> {
|
||||||
let mut feeds = fetch_all()?;
|
let feeds = fetch_all()?;
|
||||||
|
|
||||||
index(&mut feeds);
|
index(feeds);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn index(feeds: &mut [Feed]) {
|
pub fn index<F: IntoParallelIterator<Item = Feed>>(feeds: F) {
|
||||||
feeds.into_par_iter().for_each(|f| {
|
feeds.into_par_iter().for_each(|f| {
|
||||||
let e = f.index();
|
let e = f.index();
|
||||||
if e.is_err() {
|
if e.is_err() {
|
||||||
@ -122,7 +123,7 @@ pub fn fetch_all() -> Result<Vec<Feed>> {
|
|||||||
Ok(fetch(feeds))
|
Ok(fetch(feeds))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fetch(feeds: Vec<Source>) -> Vec<Feed> {
|
pub fn fetch<F: IntoParallelIterator<Item = Source>>(feeds: F) -> Vec<Feed> {
|
||||||
let results: Vec<_> = feeds
|
let results: Vec<_> = feeds
|
||||||
.into_par_iter()
|
.into_par_iter()
|
||||||
.filter_map(|x| {
|
.filter_map(|x| {
|
||||||
@ -140,13 +141,9 @@ pub fn fetch(feeds: Vec<Source>) -> Vec<Feed> {
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
use rss;
|
|
||||||
use models::Source;
|
|
||||||
use database::truncate_db;
|
|
||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
|
use database::truncate_db;
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
@ -196,7 +193,7 @@ mod tests {
|
|||||||
|
|
||||||
truncate_db().unwrap();
|
truncate_db().unwrap();
|
||||||
|
|
||||||
let mut feeds: Vec<_> = urls.iter()
|
let feeds: Vec<_> = urls.iter()
|
||||||
.map(|&(path, url)| {
|
.map(|&(path, url)| {
|
||||||
// Create and insert a Source into db
|
// Create and insert a Source into db
|
||||||
let s = Source::from_url(url).unwrap();
|
let s = Source::from_url(url).unwrap();
|
||||||
@ -210,7 +207,7 @@ mod tests {
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
// Index the channels
|
// Index the channels
|
||||||
index(&mut feeds);
|
index(feeds);
|
||||||
|
|
||||||
// Assert the index rows equal the controlled results
|
// Assert the index rows equal the controlled results
|
||||||
assert_eq!(dbqueries::get_sources().unwrap().len(), 4);
|
assert_eq!(dbqueries::get_sources().unwrap().len(), 4);
|
||||||
|
|||||||
@ -35,15 +35,15 @@ pub fn refresh_feed(stack: >k::Stack, source: Option<Vec<Source>>, delay: Opti
|
|||||||
}
|
}
|
||||||
|
|
||||||
let feeds = {
|
let feeds = {
|
||||||
if let Some(mut vec) = source {
|
if let Some(vec) = source {
|
||||||
Ok(feed::fetch(vec))
|
Ok(feed::fetch(vec))
|
||||||
} else {
|
} else {
|
||||||
feed::fetch_all()
|
feed::fetch_all()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Ok(mut x) = feeds {
|
if let Ok(x) = feeds {
|
||||||
feed::index(&mut x);
|
feed::index(x);
|
||||||
|
|
||||||
sender.send(true).expect("Couldn't send data to channel");;
|
sender.send(true).expect("Couldn't send data to channel");;
|
||||||
glib::idle_add(refresh_podcasts_view);
|
glib::idle_add(refresh_podcasts_view);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user