diff --git a/src/rust/amadeus-rs/amadeus/src/utils/deamon.rs b/src/rust/amadeus-rs/amadeus/src/utils/deamon.rs index 1cf061e2ded944e8a290086d8217e39bc3ddbdfa..fa774c687f29d1cc6486d654e40b3c492fdca883 100644 --- a/src/rust/amadeus-rs/amadeus/src/utils/deamon.rs +++ b/src/rust/amadeus-rs/amadeus/src/utils/deamon.rs @@ -107,18 +107,23 @@ impl Deamon for CommandDeamon { return_when_flagged!(quit_deamon, joined_deamon); match commands_recv.recv() { Ok(command) => { - let maybe_res = connexion.send_query(command); - if maybe_res.is_err() { - error!("Failed to send query to lektor: {}", maybe_res.unwrap_err()); - continue; - } - let res = maybe_res.unwrap(); - let response = lkt_lib::response::LektorFormatedResponse::from(res); - if let Err(e) = responses_send.send(response) { - error!("Failed to send response to amadeus: {e}") + let res = match connexion.send_query(command) { + Ok(ok) => ok, + Err(e) => { + error!("failed to send query to lektor: {e}"); + continue; + } + }; + match lkt_lib::response::LektorFormatedResponse::try_from(res) { + Ok(response) => { + if let Err(e) = responses_send.send(response) { + error!("failed to send response to amadeus: {e}") + } + } + Err(e) => error!("failed to format the response: {e}"), } } - Err(e) => error!("Failed to get command from amadeus: {e}"), + Err(e) => error!("failed to get command from amadeus: {e}"), }; }); @@ -153,31 +158,36 @@ impl Deamon for StatusDeamon { return_when_flagged!(quit_deamon, joined_deamon); let status = { - let maybe_res = connexion.send_query(lkt_lib::query::LektorQuery::PlaybackStatus); - if maybe_res.is_err() { - error!( - "Failed to send the playback status command to lektor: {}", - maybe_res.unwrap_err() - ); - continue; + let res = match connexion.send_query(lkt_lib::query::LektorQuery::PlaybackStatus) { + Ok(res) => res, + Err(e) => { + error!("failed to send the playback status command to lektor: {e}"); + continue; + } + }; + match lkt_lib::response::LektorFormatedResponse::try_from(res) { + Err(e) => panic!("{e}"), + Ok(mut response) => lkt_lib::response::PlaybackStatus::consume(&mut response), } - let res = maybe_res.unwrap(); - let mut response = lkt_lib::response::LektorFormatedResponse::from(res); - lkt_lib::response::PlaybackStatus::consume(&mut response) }; let current = if status.state != lkt_lib::types::LektorState::Stopped { - let maybe_res = connexion.send_query(lkt_lib::query::LektorQuery::CurrentKara); - if maybe_res.is_err() { - error!( - "Failed to send the current kara command to lektor: {}", - maybe_res.unwrap_err() - ); - continue; + let res = match connexion.send_query(lkt_lib::query::LektorQuery::CurrentKara) { + Ok(res) => res, + Err(e) => { + error!("failed to send the current kara command to lektor: {e}",); + continue; + } + }; + match lkt_lib::response::LektorFormatedResponse::try_from(res) { + Ok(mut response) => { + Some(lkt_lib::response::CurrentKara::consume(&mut response)) + } + Err(e) => { + error!("failed to format response from lektor: {e}"); + None + } } - let res = maybe_res.unwrap(); - let mut response = lkt_lib::response::LektorFormatedResponse::from(res); - Some(lkt_lib::response::CurrentKara::consume(&mut response)) } else { None }; diff --git a/src/rust/amadeus-rs/lkt-lib/src/connexion.rs b/src/rust/amadeus-rs/lkt-lib/src/connexion.rs index 70a3bcf0185c4202d0da22be928f56da6a5db3fd..552a992a11354630ab9ead404fa068bae15e1dc4 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/connexion.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/connexion.rs @@ -1,3 +1,6 @@ +//! Create a connexion to a lektord instande then send commands and recieve data +//! from the server. + use crate::{constants, query::LektorQuery, query::LektorQueryLineType}; use log::error; use std::{ diff --git a/src/rust/amadeus-rs/lkt-lib/src/constants.rs b/src/rust/amadeus-rs/lkt-lib/src/constants.rs index 960c2792931d7c33d317828f06ba51caf8a19f1e..505f0af8e8e8bc5773341ca8fc6496988cb76508 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/constants.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/constants.rs @@ -1,3 +1,6 @@ +//! Contains standard constants from lektord, must be updated manually if they +//! change in lektord... + #![allow(dead_code)] /// MPD commands are at most 32 character long. diff --git a/src/rust/amadeus-rs/lkt-lib/src/lib.rs b/src/rust/amadeus-rs/lkt-lib/src/lib.rs index 3975593c3a2061f61079af11887bd6ec93b3ae97..100741fd15ee9fe6bfbd86c0afbd6caec75f61a3 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/lib.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/lib.rs @@ -1,3 +1,6 @@ +//! Contains structurs and mechanisms to build, send and recieve commands +//! to/from lektord. + pub mod connexion; mod constants; pub mod query; diff --git a/src/rust/amadeus-rs/lkt-lib/src/query.rs b/src/rust/amadeus-rs/lkt-lib/src/query.rs index aba241678e08c104f2f73444983937473ba4a08c..886f19df22e519c2efacf99b181eb1509bfd9fbb 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/query.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/query.rs @@ -1,3 +1,5 @@ +//! Contains files to create and build queries to send latter to lektord. + use crate::uri::LektorUri; use amadeus_macro::lkt_command_from_str; use std::string::ToString; @@ -78,27 +80,28 @@ impl LektorQuery { impl ToString for LektorQuery { fn to_string(&self) -> String { + use LektorQuery::*; match self { - Self::Ping => lkt_command_from_str!("ping"), - Self::Close => lkt_command_from_str!("close"), - Self::KillServer => lkt_command_from_str!("kill"), - Self::ConnectAsUser(password) => format!("password {}\n", password), + Ping => lkt_command_from_str!("ping"), + Close => lkt_command_from_str!("close"), + KillServer => lkt_command_from_str!("kill"), + ConnectAsUser(password) => format!("password {}\n", password), - Self::CurrentKara => lkt_command_from_str!("currentsong"), - Self::PlaybackStatus => lkt_command_from_str!("status"), + CurrentKara => lkt_command_from_str!("currentsong"), + PlaybackStatus => lkt_command_from_str!("status"), - Self::PlayNext => lkt_command_from_str!("next"), - Self::PlayPrevious => lkt_command_from_str!("previous"), - Self::ShuffleQueue => lkt_command_from_str!("shuffle"), + PlayNext => lkt_command_from_str!("next"), + PlayPrevious => lkt_command_from_str!("previous"), + ShuffleQueue => lkt_command_from_str!("shuffle"), - Self::ListAllPlaylists => lkt_command_from_str!("listplaylists"), - Self::ListPlaylist(plt_name) => format!("listplaylist {}\n", plt_name), + ListAllPlaylists => lkt_command_from_str!("listplaylists"), + ListPlaylist(plt_name) => format!("listplaylist {}\n", plt_name), - Self::FindAddKara(uri) => format!("findadd {}\n", uri.to_string()), - Self::InsertKara(uri) => format!("__insert {}\n", uri.to_string()), - Self::AddKara(uri) => format!("add {}\n", uri.to_string()), + FindAddKara(uri) => format!("findadd {}\n", uri.to_string()), + InsertKara(uri) => format!("__insert {}\n", uri.to_string()), + AddKara(uri) => format!("add {}\n", uri.to_string()), - Self::Continuation(cont, query) => format!("{} {}", cont, query.to_owned().to_string()), + Continuation(cont, query) => format!("{} {}", cont, query.to_owned().to_string()), } } } diff --git a/src/rust/amadeus-rs/lkt-lib/src/response.rs b/src/rust/amadeus-rs/lkt-lib/src/response.rs index 24333136643937dc576f67c27cb2fcac7ba55db7..bbedf6d4d80c5e652919fcffd27b3a665f5a32a5 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/response.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/response.rs @@ -1,3 +1,5 @@ +//! Contains types for typed response. + use crate::types::LektorState; use std::collections::HashMap; @@ -15,21 +17,21 @@ impl LektorFormatedResponse { } } -impl From<Vec<String>> for LektorFormatedResponse { - fn from(vec: Vec<String>) -> Self { - Self { - content: vec - .into_iter() - .map(|line| { - let key_pair: Vec<&str> = line.splitn(2, ':').collect(); - if let [key, value] = key_pair[..] { - (key.trim().to_lowercase(), value.trim().to_owned()) - } else { - panic!("Invalid line for formated response: {}", line); - } - }) - .collect(), +impl TryFrom<Vec<String>> for LektorFormatedResponse { + type Error = String; + + fn try_from(vec: Vec<String>) -> Result<Self, Self::Error> { + let mut content = HashMap::with_capacity(vec.len()); + for line in vec { + let key_pair: Vec<&str> = line.splitn(2, ':').collect(); + match key_pair[..] { + [key, value] => { + content.insert(key.trim().to_lowercase(), value.trim().to_string()); + } + _ => return Err(format!("Invalid line for formated response: {}", line)), + } } + Ok(Self { content }) } } diff --git a/src/rust/amadeus-rs/lkt-lib/src/types.rs b/src/rust/amadeus-rs/lkt-lib/src/types.rs index fa3faaff91f5cbad22c1cd8d0a5a38fed70c46f7..421fbd7d01a0cd134dce21b598b5a8816dabbb91 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/types.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/types.rs @@ -1,3 +1,5 @@ +//! Common types for lektord. + use std::hash::{Hash, Hasher}; /// Lektor Types are the Kara and the Playlist types. You should not implement diff --git a/src/rust/amadeus-rs/lkt-lib/src/uri.rs b/src/rust/amadeus-rs/lkt-lib/src/uri.rs index 95892a1c798782fc79ac630f072a01b70c279a39..7c1e8308540a95ae32976828bfb6483a9e664e1f 100644 --- a/src/rust/amadeus-rs/lkt-lib/src/uri.rs +++ b/src/rust/amadeus-rs/lkt-lib/src/uri.rs @@ -1,3 +1,5 @@ +//! Build lektord queries. + #[derive(Debug, Clone)] pub enum LektorUri { Id(i32), diff --git a/src/rust/amadeus-rs/lkt-rs/src/main.rs b/src/rust/amadeus-rs/lkt-rs/src/main.rs index fc6376caa82dc2b0bede805e5699af5241efafce..3e939515c9c3895870dc084e8bfa37b030ad6be9 100644 --- a/src/rust/amadeus-rs/lkt-rs/src/main.rs +++ b/src/rust/amadeus-rs/lkt-rs/src/main.rs @@ -5,13 +5,13 @@ fn main() { if lektor.send_query(LektorQuery::Ping).is_ok() {} if let Ok(res) = lektor.send_query(LektorQuery::CurrentKara) { - let mut response = response::LektorFormatedResponse::from(res); + let mut response = response::LektorFormatedResponse::try_from(res).unwrap(); let current_kara = response::CurrentKara::consume(&mut response); println!("CURRENT {:?}", current_kara); } if let Ok(res) = lektor.send_query(LektorQuery::PlaybackStatus) { - let mut response = response::LektorFormatedResponse::from(res); + let mut response = response::LektorFormatedResponse::try_from(res).unwrap(); let playback_status = response::PlaybackStatus::consume(&mut response); println!("PLAYBACK-STATUS {:?}", playback_status); }