Redefine NewModels to hold Option<String> instead of Option<&str>.
This commit is contained in:
parent
31328355b1
commit
3bcb23b39a
@ -9,16 +9,16 @@ use dbqueries;
|
||||
#[derive(Insertable)]
|
||||
#[table_name = "source"]
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct NewSource<'a> {
|
||||
uri: &'a str,
|
||||
last_modified: Option<&'a str>,
|
||||
http_etag: Option<&'a str>,
|
||||
pub struct NewSource {
|
||||
uri: String,
|
||||
last_modified: Option<String>,
|
||||
http_etag: Option<String>,
|
||||
}
|
||||
|
||||
impl<'a> NewSource<'a> {
|
||||
pub fn new_with_uri(uri: &'a str) -> NewSource {
|
||||
impl NewSource {
|
||||
pub fn new_with_uri(uri: &str) -> NewSource {
|
||||
NewSource {
|
||||
uri,
|
||||
uri: uri.to_string(),
|
||||
last_modified: None,
|
||||
http_etag: None,
|
||||
}
|
||||
@ -34,25 +34,25 @@ impl<'a> NewSource<'a> {
|
||||
pub fn into_source(self) -> QueryResult<Source> {
|
||||
self.index();
|
||||
|
||||
dbqueries::get_source_from_uri(self.uri)
|
||||
dbqueries::get_source_from_uri(&self.uri)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Insertable)]
|
||||
#[table_name = "episode"]
|
||||
#[derive(Debug, Clone, Default)]
|
||||
pub struct NewEpisode<'a> {
|
||||
pub title: Option<&'a str>,
|
||||
pub struct NewEpisode {
|
||||
pub title: Option<String>,
|
||||
pub uri: Option<String>,
|
||||
pub description: Option<&'a str>,
|
||||
pub description: Option<String>,
|
||||
pub published_date: Option<String>,
|
||||
pub length: Option<i32>,
|
||||
pub guid: Option<&'a str>,
|
||||
pub guid: Option<String>,
|
||||
pub epoch: i32,
|
||||
pub podcast_id: i32,
|
||||
}
|
||||
|
||||
impl<'a> NewEpisode<'a> {
|
||||
impl NewEpisode {
|
||||
// TODO: Currently using diesel from master git.
|
||||
// Watch out for v0.99.0 beta and change the toml.
|
||||
// TODO: Refactor into batch indexes instead.
|
||||
@ -60,7 +60,7 @@ impl<'a> NewEpisode<'a> {
|
||||
let ep = dbqueries::get_episode_from_uri(&self.uri.clone().unwrap());
|
||||
|
||||
match ep {
|
||||
Ok(foo) => if foo.title() != self.title
|
||||
Ok(foo) => if foo.title() != self.title.as_ref().map(|x| x.as_str())
|
||||
|| foo.published_date() != self.published_date.as_ref().map(|x| x.as_str())
|
||||
{
|
||||
dbqueries::replace_episode(self)?;
|
||||
|
||||
@ -29,9 +29,9 @@ pub fn new_podcast(chan: &Channel, source_id: i32) -> NewPodcast {
|
||||
|
||||
/// Parses an `rss::Item` into a `NewEpisode` Struct.
|
||||
pub fn new_episode(item: &Item, parent_id: i32) -> NewEpisode {
|
||||
let title = item.title().map(|s| s.trim());
|
||||
let description = item.description().map(|s| s.trim());
|
||||
let guid = item.guid().map(|s| s.value().trim());
|
||||
let title = item.title().map(|s| s.trim().to_owned());
|
||||
let description = item.description().map(|s| s.trim().to_owned());
|
||||
let guid = item.guid().map(|s| s.value().trim().to_owned());
|
||||
|
||||
// Its kinda weird this being an Option type.
|
||||
// Rss 2.0 specified that it's optional.
|
||||
@ -176,14 +176,17 @@ mod tests {
|
||||
performs.";
|
||||
let i = new_episode(&firstitem, 0);
|
||||
|
||||
assert_eq!(i.title, Some("The Super Bowl of Racism"));
|
||||
assert_eq!(i.title, Some("The Super Bowl of Racism".to_string()));
|
||||
assert_eq!(
|
||||
i.uri,
|
||||
Some("http://traffic.megaphone.fm/PPY6458293736.mp3".to_string())
|
||||
);
|
||||
assert_eq!(i.description, Some(descr));
|
||||
assert_eq!(i.description, Some(descr.to_string()));
|
||||
assert_eq!(i.length, Some(66738886));
|
||||
assert_eq!(i.guid, Some("7df4070a-9832-11e7-adac-cb37b05d5e24"));
|
||||
assert_eq!(
|
||||
i.guid,
|
||||
Some("7df4070a-9832-11e7-adac-cb37b05d5e24".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i.published_date,
|
||||
Some("Wed, 13 Sep 2017 10:00:00 +0000".to_string())
|
||||
@ -203,15 +206,18 @@ mod tests {
|
||||
Venezuela.";
|
||||
assert_eq!(
|
||||
i2.title,
|
||||
Some("Atlas Golfed — U.S.-Backed Think Tanks Target Latin America",)
|
||||
Some("Atlas Golfed — U.S.-Backed Think Tanks Target Latin America".to_string(),)
|
||||
);
|
||||
assert_eq!(
|
||||
i2.uri,
|
||||
Some("http://traffic.megaphone.fm/FL5331443769.mp3".to_string())
|
||||
);
|
||||
assert_eq!(i2.description, Some(descr2));
|
||||
assert_eq!(i2.description, Some(descr2.to_string()));
|
||||
assert_eq!(i2.length, Some(67527575));
|
||||
assert_eq!(i2.guid, Some("7c207a24-e33f-11e6-9438-eb45dcf36a1d"));
|
||||
assert_eq!(
|
||||
i2.guid,
|
||||
Some("7c207a24-e33f-11e6-9438-eb45dcf36a1d".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i2.published_date,
|
||||
Some("Wed, 9 Aug 2017 10:00:00 +0000".to_string())
|
||||
@ -231,7 +237,10 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
i.title,
|
||||
Some("The Breakthrough: Hopelessness and Exploitation Inside Homes for Mentally Ill",)
|
||||
Some(
|
||||
"The Breakthrough: Hopelessness and Exploitation Inside Homes for Mentally Ill"
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(
|
||||
i.uri,
|
||||
@ -240,13 +249,14 @@ mod tests {
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(i.description, Some(descr));
|
||||
assert_eq!(i.description, Some(descr.to_string()));
|
||||
assert_eq!(i.length, Some(33396551));
|
||||
assert_eq!(
|
||||
i.guid,
|
||||
Some(
|
||||
"https://www.propublica.org/podcast/\
|
||||
the-breakthrough-hopelessness-exploitation-homes-for-mentally-ill#134472",
|
||||
the-breakthrough-hopelessness-exploitation-homes-for-mentally-ill#134472"
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(
|
||||
@ -263,9 +273,8 @@ mod tests {
|
||||
|
||||
assert_eq!(
|
||||
i2.title,
|
||||
Some(
|
||||
"The Breakthrough: Behind the Scenes of Hillary Clinton’s Failed Bid for President",
|
||||
)
|
||||
Some("The Breakthrough: Behind the Scenes of Hillary Clinton’s Failed Bid for \
|
||||
President".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i2.uri,
|
||||
@ -274,13 +283,14 @@ mod tests {
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(i2.description, Some(descr2));
|
||||
assert_eq!(i2.description, Some(descr2.to_string()));
|
||||
assert_eq!(i2.length, Some(17964071));
|
||||
assert_eq!(
|
||||
i2.guid,
|
||||
Some(
|
||||
"https://www.propublica.\
|
||||
org/podcast/the-breakthrough-hillary-clinton-failed-presidential-bid#133721",
|
||||
org/podcast/the-breakthrough-hillary-clinton-failed-presidential-bid#133721"
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(
|
||||
@ -302,7 +312,10 @@ mod tests {
|
||||
blaming open source & the Beard just saved the show. It’s a really packed episode!";
|
||||
let i = new_episode(&firstitem, 0);
|
||||
|
||||
assert_eq!(i.title, Some("Hacking Devices with Kali Linux | LUP 214"));
|
||||
assert_eq!(
|
||||
i.title,
|
||||
Some("Hacking Devices with Kali Linux | LUP 214".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i.uri,
|
||||
Some(
|
||||
@ -310,9 +323,12 @@ mod tests {
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(i.description, Some(descr));
|
||||
assert_eq!(i.description, Some(descr.to_string()));
|
||||
assert_eq!(i.length, Some(46479789));
|
||||
assert_eq!(i.guid, Some("78A682B4-73E8-47B8-88C0-1BE62DD4EF9D"));
|
||||
assert_eq!(
|
||||
i.guid,
|
||||
Some("78A682B4-73E8-47B8-88C0-1BE62DD4EF9D".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i.published_date,
|
||||
Some("Tue, 12 Sep 2017 22:24:42 -0700".to_string())
|
||||
@ -328,7 +344,7 @@ mod tests {
|
||||
future.</p>\n\n<p>Plus we chat with Wimpy about the Ubuntu Rally in NYC, \
|
||||
Microsoft’s sneaky move to turn Windows 10 into the “ULTIMATE LINUX \
|
||||
RUNTIME”, community news & more!</p>";
|
||||
assert_eq!(i2.title, Some("Gnome Does it Again | LUP 213"));
|
||||
assert_eq!(i2.title, Some("Gnome Does it Again | LUP 213".to_string()));
|
||||
assert_eq!(
|
||||
i2.uri,
|
||||
Some(
|
||||
@ -336,9 +352,12 @@ mod tests {
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(i2.description, Some(descr2));
|
||||
assert_eq!(i2.description, Some(descr2.to_string()));
|
||||
assert_eq!(i2.length, Some(36544272));
|
||||
assert_eq!(i2.guid, Some("1CE57548-B36C-4F14-832A-5D5E0A24E35B"));
|
||||
assert_eq!(
|
||||
i2.guid,
|
||||
Some("1CE57548-B36C-4F14-832A-5D5E0A24E35B".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i2.published_date,
|
||||
Some("Tue, 5 Sep 2017 20:57:27 -0700".to_string())
|
||||
@ -357,7 +376,10 @@ mod tests {
|
||||
\"Non-lexical lifetimes\"";
|
||||
let i = new_episode(&firstitem, 0);
|
||||
|
||||
assert_eq!(i.title, Some("Episode #9 - A Once in a Lifetime RFC"));
|
||||
assert_eq!(
|
||||
i.title,
|
||||
Some("Episode #9 - A Once in a Lifetime RFC".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i.uri,
|
||||
Some(
|
||||
@ -366,11 +388,14 @@ mod tests {
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(i.description, Some(descr));
|
||||
assert_eq!(i.description, Some(descr.to_string()));
|
||||
assert_eq!(i.length, Some(15077388));
|
||||
assert_eq!(
|
||||
i.guid,
|
||||
Some("https://request-for-explanation.github.io/podcast/ep9-a-once-in-a-lifetime-rfc/",)
|
||||
Some(
|
||||
"https://request-for-explanation.github.io/podcast/ep9-a-once-in-a-lifetime-rfc/"
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(
|
||||
i.published_date,
|
||||
@ -384,7 +409,10 @@ mod tests {
|
||||
let descr2 = "This week we look at <a \
|
||||
href=\"https://github.com/rust-lang/rfcs/pull/2071\">RFC 2071</a> \"Add \
|
||||
impl Trait type alias and variable declarations\"";
|
||||
assert_eq!(i2.title, Some("Episode #8 - An Existential Crisis"));
|
||||
assert_eq!(
|
||||
i2.title,
|
||||
Some("Episode #8 - An Existential Crisis".to_string())
|
||||
);
|
||||
assert_eq!(
|
||||
i2.uri,
|
||||
Some(
|
||||
@ -393,11 +421,14 @@ mod tests {
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(i2.description, Some(descr2));
|
||||
assert_eq!(i2.description, Some(descr2.to_string()));
|
||||
assert_eq!(i2.length, Some(13713219));
|
||||
assert_eq!(
|
||||
i2.guid,
|
||||
Some("https://request-for-explanation.github.io/podcast/ep8-an-existential-crisis/",)
|
||||
Some(
|
||||
"https://request-for-explanation.github.io/podcast/ep8-an-existential-crisis/"
|
||||
.to_string(),
|
||||
)
|
||||
);
|
||||
assert_eq!(
|
||||
i2.published_date,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user