Skip to main content

lux_core/
traits.rs

1use crate::error::SourceError;
2use crate::types::{Quality, SearchResult, Source};
3use async_trait::async_trait;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct LyricInfo {
8    pub lyric: String,
9    pub tlyric: Option<String>,
10    pub rlyric: Option<String>,
11    pub lxlyric: Option<String>,
12}
13
14#[async_trait]
15pub trait MusicSource: Send + Sync {
16    fn platform(&self) -> Source;
17    fn supported_qualities(&self) -> &[Quality];
18    async fn search(
19        &self,
20        keyword: &str,
21        page: usize,
22        limit: usize,
23    ) -> Result<SearchResult, SourceError>;
24    async fn get_url(&self, song_id: &str, quality: Quality) -> Result<String, SourceError>;
25    async fn get_lyric(&self, song_id: &str) -> Result<Option<LyricInfo>, SourceError>;
26    async fn get_pic(&self, song_id: &str) -> Result<Option<String>, SourceError>;
27}