aboutsummaryrefslogtreecommitdiff
path: root/src/lyrics_engine
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-01-26 17:04:00 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-01-26 17:04:00 +0100
commit4064639d3c3e25760ef43781feca77332cfbe5eb (patch)
tree77ce2883e5569bd4de5e1408b41c9d6d556a11c6 /src/lyrics_engine
parentfda55240fb06c55a7552ef7ded8c17ee56ce9f49 (diff)
Run lint / format
Diffstat (limited to 'src/lyrics_engine')
-rw-r--r--src/lyrics_engine/genius.rs41
-rw-r--r--src/lyrics_engine/mod.rs7
2 files changed, 34 insertions, 14 deletions
diff --git a/src/lyrics_engine/genius.rs b/src/lyrics_engine/genius.rs
index e14589d..a8b0468 100644
--- a/src/lyrics_engine/genius.rs
+++ b/src/lyrics_engine/genius.rs
@@ -1,7 +1,10 @@
-use std::io::{Result, Error, ErrorKind::Other};
-use serde::Deserialize;
use reqwest::get;
-use scraper::{ElementRef, Html, Selector, node::Node::{Text, Element}};
+use scraper::{
+ node::Node::{Element, Text},
+ ElementRef, Html, Selector,
+};
+use serde::Deserialize;
+use std::io::{Error, ErrorKind::Other, Result};
#[derive(Deserialize, Debug)]
struct GeniusApiResponse {
@@ -26,11 +29,21 @@ struct GeniusResult {
}
pub async fn search(url: &str) -> Result<String> {
- let response = get(url).await
+ let response = get(url)
+ .await
.map_err(|_| Error::new(Other, "Could not perform lyrics search in engine."))?
- .json::<GeniusApiResponse>().await
- .map_err(|_| Error::new(Other, "Lyrics engine returned invalid response from search."))?;
- let url = response.response.hits.into_iter()
+ .json::<GeniusApiResponse>()
+ .await
+ .map_err(|_| {
+ Error::new(
+ Other,
+ "Lyrics engine returned invalid response from search.",
+ )
+ })?;
+ let url = response
+ .response
+ .hits
+ .into_iter()
.find(|hit| hit.hit_type == "song")
.map(|hit| hit.result.url)
.ok_or_else(|| Error::new(Other, "Could not find a matching track in lyrics engine."))?;
@@ -39,14 +52,18 @@ pub async fn search(url: &str) -> Result<String> {
}
pub async fn get_lyrics(url: &str) -> Result<String> {
- let song_html = get(url).await
+ let song_html = get(url)
+ .await
.map_err(|_| Error::new(Other, "Could not fetch lyrics from engine."))?
- .text().await
+ .text()
+ .await
.map_err(|_| Error::new(Other, "Lyrics engine returned invalid response."))?;
let document = Html::parse_document(&song_html);
let selector = Selector::parse(r#"div[data-lyrics-container="true"]"#).unwrap();
- let lyrics_div = document.select(&selector).next()
+ let lyrics_div = document
+ .select(&selector)
+ .next()
.ok_or_else(|| Error::new(Other, "Could not find lyrics in response."))?;
let mut lyrics = String::new();
@@ -61,10 +78,10 @@ pub async fn get_lyrics(url: &str) -> Result<String> {
lyrics.push_str(&text);
}
}
- },
+ }
Text(text) => {
lyrics.push_str(text);
- },
+ }
_ => {}
}
}
diff --git a/src/lyrics_engine/mod.rs b/src/lyrics_engine/mod.rs
index f83d219..325c523 100644
--- a/src/lyrics_engine/mod.rs
+++ b/src/lyrics_engine/mod.rs
@@ -1,5 +1,5 @@
-use std::io::Result;
use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
+use std::io::Result;
mod genius;
@@ -16,7 +16,10 @@ pub async fn print_lyrics(track: Track, show_title: bool) -> Result<()> {
let artist = utf8_percent_encode(&track.artist, NON_ALPHANUMERIC).to_string();
let name = utf8_percent_encode(&track.name, NON_ALPHANUMERIC).to_string();
- let url = format!("{}?access_token={}&q={}%20{}", GENIUS_API_URL, GENIUS_CLIENT_TOKEN, artist, name);
+ let url = format!(
+ "{}?access_token={}&q={}%20{}",
+ GENIUS_API_URL, GENIUS_CLIENT_TOKEN, artist, name
+ );
let song_url = search(&url).await?;
let lyrics = get_lyrics(&song_url).await?;