]> git.r.bdr.sh - rbdr/lyricli/blobdiff - src/main.rs
Add rust implementation test
[rbdr/lyricli] / src / main.rs
diff --git a/src/main.rs b/src/main.rs
new file mode 100644 (file)
index 0000000..13b7e37
--- /dev/null
@@ -0,0 +1,78 @@
+// mod configuration;
+mod lyrics_engine;
+mod sources;
+
+use std::io::{Result, Error, ErrorKind::Other};
+use clap::{Parser};
+
+use sources::{enable, disable, get_track, reset, list};
+use lyrics_engine::print_lyrics;
+
+#[derive(Parser, Debug)]
+#[command(version, about, long_about = None)]
+struct Arguments {
+
+    // Positional Arguments
+    /// Specify the artist.
+    artist: Option<String>,
+
+    /// Specify the artist.
+    track_name: Option<String>,
+
+    /// Show title of track if present
+    #[arg(short = 't', long)]
+    show_title: bool,
+
+    /// Lists all sources
+    #[arg(short, long)]
+    list_sources: bool,
+
+    /// Enables a source
+    #[arg(short, long, value_name = "SOURCE")]
+    enable_source: Option<String>,
+
+    #[arg(short, long, value_name = "SOURCE")]
+    disable_source: Option<String>,
+
+    #[arg(short, long, value_name = "SOURCE")]
+    reset_source: Option<String>,
+}
+
+pub struct Track {
+    pub name: String,
+    pub artist: String
+}
+
+#[tokio::main]
+async fn main() -> Result<()> {
+    let arguments = Arguments::parse();
+
+    if arguments.list_sources {
+        return list();
+    }
+
+    if let Some(source_name) = arguments.enable_source {
+        return enable(source_name);
+    }
+
+    if let Some(source_name) = arguments.disable_source {
+        return disable(source_name);
+    }
+
+    if let Some(source_name) = arguments.reset_source {
+        return reset(source_name);
+    }
+
+    let current_track: Track;
+    if let Some(artist) = arguments.artist {
+        current_track = Track {
+            name: arguments.track_name.unwrap_or("".to_string()),
+            artist: artist
+        };
+    } else {
+        current_track = get_track()
+            .ok_or_else(|| Error::new(Other, "No Artist/Song could be found :("))?
+    }
+
+    print_lyrics(current_track, arguments.show_title).await
+}