mod lyrics_engine;
mod sources;
-use std::io::{Result, Error, ErrorKind::Other};
use clap::Parser;
+use std::io::{Error, ErrorKind::Other, Result};
use configuration::Configuration;
-use sources::{enable, disable, get_track, reset, list};
use lyrics_engine::print_lyrics;
+use sources::{disable, enable, get_track, list, reset};
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Arguments {
-
// Positional Arguments
/// Specify the artist.
artist: Option<String>,
pub struct Track {
pub name: String,
- pub artist: String
+ pub artist: String,
}
#[tokio::main]
async fn main() -> Result<()> {
+ let result = run().await;
+
+ if cfg!(debug_assertions) {
+ result
+ } else {
+ match result {
+ Ok(_) => Ok(()),
+ Err(e) => {
+ eprintln!("Error: {}", e);
+ std::process::exit(1);
+ }
+ }
+ }
+}
+
+async fn run() -> Result<()> {
let mut configuration = Configuration::new();
let arguments = Arguments::parse();
if let Some(artist) = arguments.artist {
current_track = Track {
name: arguments.track_name.unwrap_or("".to_string()),
- artist: artist
+ artist,
};
} else {
- current_track = get_track()
- .ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))?
+ current_track =
+ get_track().ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))?
}
print_lyrics(current_track, arguments.show_title).await