use std::fmt;
use serde::{Deserialize, Serialize};
use zbus::{Type, Variant};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Type, Deserialize, Serialize)]
#[zvariant(signature = "s")]
#[doc(alias = "Loop_Status")]
pub enum LoopStatus {
None,
Track,
Playlist,
}
impl LoopStatus {
pub fn as_str(&self) -> &'static str {
match self {
Self::None => "None",
Self::Track => "Track",
Self::Playlist => "Playlist",
}
}
}
impl fmt::Display for LoopStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(self.as_str())
}
}
impl<'a> TryFrom<Variant<'a>> for LoopStatus {
type Error = zbus::Error;
fn try_from(value: Variant<'a>) -> Result<Self, Self::Error> {
match value {
Variant::Str(s) => match s.as_str() {
"None" => Ok(Self::None),
"Track" => Ok(Self::Track),
"Playlist" => Ok(Self::Playlist),
_ => Err(zbus::Error::Failure(format!("invalid loop status: {s}"))),
},
_ => Err(zbus::Error::IncorrectType),
}
}
}
impl From<LoopStatus> for Variant<'_> {
fn from(status: LoopStatus) -> Self {
Variant::new(status.as_str())
}
}