X-Git-Url: https://git.r.bdr.sh/rbdr/lyricli/blobdiff_plain/fda55240fb06c55a7552ef7ded8c17ee56ce9f49..4064639d3c3e25760ef43781feca77332cfbe5eb:/src/lyrics_engine/genius.rs 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 { - let response = get(url).await + let response = get(url) + .await .map_err(|_| Error::new(Other, "Could not perform lyrics search in engine."))? - .json::().await - .map_err(|_| Error::new(Other, "Lyrics engine returned invalid response from search."))?; - let url = response.response.hits.into_iter() + .json::() + .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 { } pub async fn get_lyrics(url: &str) -> Result { - 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 { lyrics.push_str(&text); } } - }, + } Text(text) => { lyrics.push_str(text); - }, + } _ => {} } }