From 792e3b31e0101087a167935baad39a2e3b4296d0 Mon Sep 17 00:00:00 2001 From: ThetaDev Date: Sun, 16 Jun 2024 22:57:55 +0200 Subject: [PATCH] feat: add YtEntity trait --- src/model/traits.rs | 66 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/src/model/traits.rs b/src/model/traits.rs index e64c5b2..329a01d 100644 --- a/src/model/traits.rs +++ b/src/model/traits.rs @@ -4,7 +4,7 @@ use std::ops::Range; pub use super::{convert::FromYtItem, ordering::QualityOrd}; -use super::{AudioFormat, AudioStream, VideoFormat, VideoStream}; +use super::*; /// Trait for YouTube streams (video and audio) pub trait YtStream { @@ -128,3 +128,67 @@ impl FileFormat for AudioFormat { } } } + +/// Trait for YouTube entities (Videos, Channels, Playlists) +pub trait YtEntity { + /// ID + fn id(&self) -> &str; + /// Name + fn name(&self) -> &str; +} + +macro_rules! yt_entity { + ($entity_type:ty) => { + impl YtEntity for $entity_type { + fn id(&self) -> &str { + &self.id + } + + fn name(&self) -> &str { + &self.name + } + } + }; +} + +impl YtEntity for VideoPlayer { + fn id(&self) -> &str { + &self.details.id + } + + fn name(&self) -> &str { + &self.details.name + } +} + +impl YtEntity for Channel { + fn id(&self) -> &str { + &self.id + } + + fn name(&self) -> &str { + &self.name + } +} + +yt_entity! {VideoPlayerDetails} +yt_entity! {Playlist} +yt_entity! {ChannelId} +yt_entity! {VideoDetails} +yt_entity! {ChannelTag} +yt_entity! {ChannelRss} +yt_entity! {ChannelRssVideo} +yt_entity! {VideoItem} +yt_entity! {ChannelItem} +yt_entity! {PlaylistItem} +yt_entity! {VideoId} +yt_entity! {TrackItem} +yt_entity! {ArtistItem} +yt_entity! {AlbumItem} +yt_entity! {MusicPlaylistItem} +yt_entity! {AlbumId} +yt_entity! {MusicPlaylist} +yt_entity! {MusicAlbum} +yt_entity! {MusicArtist} +yt_entity! {MusicGenreItem} +yt_entity! {MusicGenre}