From cc56b092498c34437c2643bcba07f27e975a5c06 Mon Sep 17 00:00:00 2001 From: Victoria Fischer Date: Thu, 11 Jun 2026 21:42:26 +0200 Subject: [PATCH] artifacts: add artifact sources --- src/artifacts.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/artifacts.rs b/src/artifacts.rs index a8862a6..e2f1e6c 100644 --- a/src/artifacts.rs +++ b/src/artifacts.rs @@ -3,13 +3,22 @@ use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use sqlite::OpenFlags; +#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord)] +pub enum SourceID { + Bandcamp(u64), + Mixxx, + Beets +} + #[derive(Debug, Serialize, Deserialize, Clone, Default)] pub struct Artist { pub name: String, #[serde(skip_serializing_if = "Option::is_none")] pub bio: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub location: Option + pub location: Option, + + pub sources: Vec } impl PartialEq for Artist { @@ -36,6 +45,8 @@ pub struct Album { pub credits: Option, #[serde(skip_serializing_if = "Option::is_none")] pub release_date: Option>, + + pub sources: Vec } #[derive(Debug, Serialize, Deserialize, Clone, Default)] @@ -53,7 +64,9 @@ pub struct Track { #[serde(skip_serializing_if = "Option::is_none")] pub artist: Option, #[serde(skip_serializing_if = "Option::is_none")] - pub bpm: Option + pub bpm: Option, + + pub sources: Vec } impl PartialEq for Track { @@ -122,7 +135,7 @@ impl Artifact { impl Into for bandcamp::Artist { fn into(self) -> Artifact { - Artifact::Artist(Artist { name: self.name, bio: self.bio, location: self.location }) + Artifact::Artist(Artist { name: self.name, bio: self.bio, location: self.location, sources: vec![SourceID::Bandcamp(self.id)] }) } } @@ -133,7 +146,8 @@ impl Into for bandcamp::Album { title: self.title, artist: self.band.name, credits: self.credits, - release_date: Some(self.release_date) + release_date: Some(self.release_date), + sources: vec!{SourceID::Bandcamp(self.id)} }) } } @@ -181,17 +195,20 @@ impl MixxxDB { album: Some(album.into()), title: title.into(), bpm: Some(bpm), + sources: vec![SourceID::Mixxx], ..Default::default() })); ret.push(Artifact::Album(Album { artist: artist.into(), title: album.into(), + sources: vec![SourceID::Mixxx], ..Default::default() })); ret.push(Artifact::Artist(Artist { name: artist.into(), + sources: vec![SourceID::Mixxx], ..Default::default() })); }