Skip to main content

lavende_core/sources/
plugin.rs

1use crate::{
2    config::HttpProxyConfig,
3    protocol::tracks::{LoadResult, SearchResult},
4    routeplanner::RoutePlanner,
5    sources::playable_track::BoxedTrack,
6};
7use async_trait::async_trait;
8use std::sync::Arc;
9#[async_trait]
10pub trait SourcePlugin: Send + Sync {
11    fn name(&self) -> &str;
12    fn can_handle(&self, identifier: &str) -> bool;
13    async fn load(
14        &self,
15        identifier: &str,
16        routeplanner: Option<Arc<dyn RoutePlanner>>,
17    ) -> LoadResult;
18    async fn get_track(
19        &self,
20        _identifier: &str,
21        _routeplanner: Option<Arc<dyn RoutePlanner>>,
22    ) -> Option<BoxedTrack> {
23        None
24    }
25    async fn load_search(
26        &self,
27        _query: &str,
28        _types: &[String],
29        _routeplanner: Option<Arc<dyn RoutePlanner>>,
30    ) -> Option<SearchResult> {
31        None
32    }
33    fn get_proxy_config(&self) -> Option<HttpProxyConfig> {
34        None
35    }
36    fn search_prefixes(&self) -> Vec<&str> {
37        vec![]
38    }
39    fn isrc_prefixes(&self) -> Vec<&str> {
40        vec![]
41    }
42    fn rec_prefixes(&self) -> Vec<&str> {
43        vec![]
44    }
45    fn is_mirror(&self) -> bool {
46        false
47    }
48}