use serde::Serialize;
use zbus::zvariant::{ObjectPath, Type, Value};
use crate::{PlaylistId, Uri};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Type)]
pub struct Playlist {
pub id: PlaylistId,
pub name: String,
pub icon: Uri,
}
impl From<Playlist> for Value<'_> {
fn from(p: Playlist) -> Self {
Value::from((p.id, p.name, p.icon))
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Type)]
#[doc(alias = "Maybe_Playlist")]
pub(crate) struct MaybePlaylist {
valid: bool,
playlist: Playlist,
}
impl From<Option<Playlist>> for MaybePlaylist {
fn from(playlist: Option<Playlist>) -> Self {
match playlist {
Some(playlist) => Self {
valid: true,
playlist,
},
None => Self {
valid: false,
playlist: Playlist {
id: ObjectPath::from_static_str_unchecked("/").into(),
name: String::new(),
icon: Uri::new(),
},
},
}
}
}
impl From<MaybePlaylist> for Value<'_> {
fn from(mp: MaybePlaylist) -> Self {
Value::from((mp.valid, mp.playlist))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn valid_signatures() {
assert_eq!(Playlist::SIGNATURE, "(oss)");
assert_eq!(MaybePlaylist::SIGNATURE, "(b(oss))");
}
}