From 01d16aaf1afd799ac08180b399f10133f003a304 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Tue, 10 Jan 2023 17:25:01 +0100 Subject: [PATCH] RUST: Move the priority level definition from lkt-rs to the amalib --- src/rust/amadeus-next/amalib/src/lib.rs | 43 +++++++++++++ src/rust/amadeus-next/lkt-rs/src/args.rs | 23 ++++--- src/rust/amadeus-next/lkt-rs/src/main.rs | 1 - src/rust/amadeus-next/lkt-rs/src/types.rs | 77 ----------------------- 4 files changed, 54 insertions(+), 90 deletions(-) delete mode 100644 src/rust/amadeus-next/lkt-rs/src/types.rs diff --git a/src/rust/amadeus-next/amalib/src/lib.rs b/src/rust/amadeus-next/amalib/src/lib.rs index 4c5c6a93..00d2f9fe 100644 --- a/src/rust/amadeus-next/amalib/src/lib.rs +++ b/src/rust/amadeus-next/amalib/src/lib.rs @@ -16,6 +16,49 @@ pub use uri::*; pub(crate) use commons::{log::*, *}; pub(crate) use std::str::FromStr; +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum LektorPriorityLevel { + Add = 1, + Suggest = 2, + Insert = 3, + Pick = 4, + Enforce = 5, +} + +impl std::str::FromStr for LektorPriorityLevel { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use LektorPriorityLevel::*; + Ok(match s { + "add" | "1" => Add, + "suggest" | "2" => Suggest, + "insert" | "3" => Insert, + "pick" | "4" => Pick, + "enforce" | "5" => Enforce, + _ => return Err(format!("unknown priority level: {s}")), + }) + } +} + +impl Default for LektorPriorityLevel { + fn default() -> Self { + LektorPriorityLevel::Add + } +} + +impl std::fmt::Display for LektorPriorityLevel { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + LektorPriorityLevel::Add => "1", + LektorPriorityLevel::Suggest => "2", + LektorPriorityLevel::Insert => "3", + LektorPriorityLevel::Pick => "4", + LektorPriorityLevel::Enforce => "5", + }) + } +} + /// Whever the query uri should be only the direct query or must include the /// first links. #[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Deserialize, serde::Serialize)] diff --git a/src/rust/amadeus-next/lkt-rs/src/args.rs b/src/rust/amadeus-next/lkt-rs/src/args.rs index c9325d1c..e4fbe10d 100644 --- a/src/rust/amadeus-next/lkt-rs/src/args.rs +++ b/src/rust/amadeus-next/lkt-rs/src/args.rs @@ -1,4 +1,5 @@ -use crate::{config::LktConfig, types::*}; +use crate::config::LktConfig; +use amalib::LektorPriorityLevel; use clap::{Parser, Subcommand}; use std::ops::Range; @@ -116,12 +117,11 @@ enum SubCommand { , short = 'c' , long = "clear" , id = "CLEAR_LVL" - , default_missing_value = PriorityLevel::Enforce , help = concat!( "Clear the queue and set the state to stopped. " , "You can also pass a level to clear up to. The level can be passed as a numeric or as its string representation. " , "[default value: 5, possible values: 1..5]" ))] - clear: Option<Option<PriorityLevel>>, + clear: Option<Option<LektorPriorityLevel>>, #[arg( action = clap::ArgAction::Set , exclusive = true @@ -147,13 +147,12 @@ enum SubCommand { , short = 'z' , long = "shuffle" , id = "SHUFFLE_LVL" - , default_missing_value = PriorityLevel::Enforce , help = concat!( "Shuffle the queue. If lektord was paused it will unpause but if it was stopped it won't start. " , "If it exists, the current kara will be placed in the first place in the queue. " , "You can also pass a level to shuffle up to. The level can be passed as a numeric or as its string representation. " , "[default value: 5, possible values: 1..5]" ))] - shuffle: Option<Option<PriorityLevel>>, + shuffle: Option<Option<LektorPriorityLevel>>, }, // Search commands @@ -345,13 +344,13 @@ pub enum LktQueueCommand { }, Add { - priority: PriorityLevel, + priority: LektorPriorityLevel, query: amalib::LektorUri, }, Crop, Clear { - up_to_lvl: PriorityLevel, + up_to_lvl: LektorPriorityLevel, }, SwapPositions { @@ -364,7 +363,7 @@ pub enum LktQueueCommand { }, Shuffle { - up_to_lvl: PriorityLevel, + up_to_lvl: LektorPriorityLevel, }, } @@ -454,8 +453,8 @@ impl LktCommand { SubCommand::Queue { pause: Some(None), .. } => Queue(LktQueueCommand::TogglePause), SubCommand::Queue { pause: Some(Some(true)), .. } => Queue(LktQueueCommand::Pause), SubCommand::Queue { pause: Some(Some(false)), .. } => Queue(LktQueueCommand::UnPause), - SubCommand::Queue { shuffle: Some(lvl), .. } => Queue(LktQueueCommand::Shuffle { up_to_lvl: lvl.unwrap_or(PriorityLevel::Enforce) }), - SubCommand::Queue { clear: Some(lvl), .. } => Queue(LktQueueCommand::Clear { up_to_lvl: lvl.unwrap_or(PriorityLevel::Enforce) }), + SubCommand::Queue { shuffle: Some(lvl), .. } => Queue(LktQueueCommand::Shuffle { up_to_lvl: lvl.unwrap_or(LektorPriorityLevel::Enforce) }), + SubCommand::Queue { clear: Some(lvl), .. } => Queue(LktQueueCommand::Clear { up_to_lvl: lvl.unwrap_or(LektorPriorityLevel::Enforce) }), SubCommand::Queue { seek: Some(id), .. } => { Queue(LktQueueCommand::SeekIdInQueue { id }) } SubCommand::Queue { pos: Some(None), .. } => Queue(LktQueueCommand::List { range: 0..config.search.default_queue_count }), SubCommand::Queue { pos: Some(Some(range)), .. } => Queue(LktQueueCommand::List { range }), @@ -469,13 +468,13 @@ impl LktCommand { } SubCommand::Queue { add: Some(args), .. } => match &args[..] { [] => sterr!("invalid queue add command, expected `priority query...` or `query...`, got nothing"), - [priority, query @ .. ] if !query.is_empty() && priority.parse::<PriorityLevel>().is_ok() => Queue(LktQueueCommand::Add { + [priority, query @ .. ] if !query.is_empty() && priority.parse::<LektorPriorityLevel>().is_ok() => Queue(LktQueueCommand::Add { priority: priority.parse().expect("something went wrong"), query: amalib::LektorUriBuilder::default() .query_type(config.search.query_type).strings(query.iter().cloned()).try_build() .map_err(|e| format!("invalid query in queue add command: {e}"))? }), - query => Queue(LktQueueCommand::Add { priority: PriorityLevel::Add, + query => Queue(LktQueueCommand::Add { priority: LektorPriorityLevel::Add, query: amalib::LektorUriBuilder::default() .query_type(config.search.query_type).strings(query.iter().cloned()).try_build() .map_err(|e| format!("invalid query in queue add command: {e}"))? diff --git a/src/rust/amadeus-next/lkt-rs/src/main.rs b/src/rust/amadeus-next/lkt-rs/src/main.rs index 9bfb3a7c..eacf33cc 100644 --- a/src/rust/amadeus-next/lkt-rs/src/main.rs +++ b/src/rust/amadeus-next/lkt-rs/src/main.rs @@ -1,7 +1,6 @@ mod args; mod config; mod parsers; -mod types; use crate::{args::*, config::LktConfig}; use amalib::{LektorQuery, LektorResponse}; diff --git a/src/rust/amadeus-next/lkt-rs/src/types.rs b/src/rust/amadeus-next/lkt-rs/src/types.rs deleted file mode 100644 index 834e99dd..00000000 --- a/src/rust/amadeus-next/lkt-rs/src/types.rs +++ /dev/null @@ -1,77 +0,0 @@ -use std::str::FromStr; - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum PriorityLevel { - Add = 1, - Suggest = 2, - Insert = 3, - Pick = 4, - Enforce = 5, -} - -impl std::str::FromStr for PriorityLevel { - type Err = String; - - fn from_str(s: &str) -> Result<Self, Self::Err> { - use PriorityLevel::*; - Ok(match s { - "add" | "1" => Add, - "suggest" | "2" => Suggest, - "insert" | "3" => Insert, - "pick" | "4" => Pick, - "enforce" | "5" => Enforce, - _ => return Err(format!("unknown priority level: {s}")), - }) - } -} - -impl From<&str> for PriorityLevel { - fn from(value: &str) -> Self { - PriorityLevel::from_str(value).expect("conversion failed") - } -} - -impl Default for PriorityLevel { - fn default() -> Self { - PriorityLevel::Add - } -} - -impl std::fmt::Display for PriorityLevel { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - f.write_str(match self { - PriorityLevel::Add => "1", - PriorityLevel::Suggest => "2", - PriorityLevel::Insert => "3", - PriorityLevel::Pick => "4", - PriorityLevel::Enforce => "5", - }) - } -} - -impl From<clap::builder::OsStr> for PriorityLevel { - fn from(value: clap::builder::OsStr) -> Self { - let value = value - .to_str() - .unwrap_or_else(|| panic!("invalid utf8 string: {}", value.to_string_lossy())); - PriorityLevel::from(value) - } -} - -impl From<PriorityLevel> for clap::builder::OsStr { - fn from(val: PriorityLevel) -> Self { - clap::builder::OsStr::from(match val { - PriorityLevel::Add => "1", - PriorityLevel::Suggest => "2", - PriorityLevel::Insert => "3", - PriorityLevel::Pick => "4", - PriorityLevel::Enforce => "5", - }) - } -} - -#[derive(Debug, Clone, PartialEq, Eq)] -pub struct FilterPlaylist { - playlist: String, - query: String, -} -- GitLab