lavende_core/sources/
plugin.rs1use 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}