diff --git a/hammond-data/src/models/insertables.rs b/hammond-data/src/models/insertables.rs
index 68d3ebd..9e9fb92 100644
--- a/hammond-data/src/models/insertables.rs
+++ b/hammond-data/src/models/insertables.rs
@@ -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,
+ http_etag: Option,
}
-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 {
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,
pub uri: Option,
- pub description: Option<&'a str>,
+ pub description: Option,
pub published_date: Option,
pub length: Option,
- pub guid: Option<&'a str>,
+ pub guid: Option,
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)?;
diff --git a/hammond-data/src/parser.rs b/hammond-data/src/parser.rs
index de58a31..312a397 100644
--- a/hammond-data/src/parser.rs
+++ b/hammond-data/src/parser.rs
@@ -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.
\n\n
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!
";
- 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 RFC 2071 \"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,