use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Hash, PartialEq, Eq, Clone)]
pub struct SongHistoryRecord {
pub song_name: String,
#[serde(default)]
pub album: Option<String>,
#[serde(default)]
pub track_key: Option<String>,
#[serde(default)]
pub release_year: Option<String>,
#[serde(default)]
pub genre: Option<String>,
pub recognition_date: String,
}
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct Song {
pub song_name: String,
pub album: Option<String>,
pub track_key: Option<String>,
pub release_year: Option<String>,
pub genre: Option<String>,
}
pub trait HasSong {
fn get_song(self) -> Song;
}
impl HasSong for Song {
fn get_song(self) -> Song {
self
}
}
impl HasSong for SongHistoryRecord {
fn get_song(self) -> Song {
Song {
song_name: self.song_name,
album: self.album.filter(|val| !val.is_empty()),
track_key: self.track_key.filter(|val| !val.is_empty()),
release_year: self.release_year.filter(|val| !val.is_empty()),
genre: self.genre.filter(|val| !val.is_empty()),
}
}
}