#[cfg(any(feature = "sync", feature = "async"))]
use std::error::Error;
use crate::InvidiousError;
#[cfg(any(feature = "sync", feature = "async"))]
use crate::{channel::*, universal::*, video::*, PublicItems};
#[cfg(feature = "sync")]
pub trait ClientSyncTrait
where
Self: Sized,
{
fn new(instance: String) -> Self;
fn set_instance(&mut self, instance: String);
fn get_instance(&self) -> &str;
fn instance(mut self, instance: String) -> Self {
self.set_instance(instance);
self
}
fn fetch(&self, url: &str) -> Result<String, Box<dyn Error>>;
fn stats(&self, params: Option<&str>) -> Result<Stats, InvidiousError> {
Stats::fetch_sync(self, None, params)
}
fn video(&self, id: &str, params: Option<&str>) -> Result<Video, InvidiousError> {
Video::fetch_sync(self, Some(id), params)
}
fn comments(&self, id: &str, params: Option<&str>) -> Result<Comments, InvidiousError> {
Comments::fetch_sync(self, Some(id), params)
}
fn captions(&self, id: &str, params: Option<&str>) -> Result<Captions, InvidiousError> {
Captions::fetch_sync(self, Some(id), params)
}
fn annotations(&self, id: &str, params: Option<&str>) -> Result<Annotations, InvidiousError> {
Annotations::fetch_sync(self, Some(id), params)
}
fn trending(&self, params: Option<&str>) -> Result<Trending, InvidiousError> {
Trending::fetch_sync(self, None, params)
}
fn popular(&self, params: Option<&str>) -> Result<Popular, InvidiousError> {
Popular::fetch_sync(self, None, params)
}
fn channel(&self, id: &str, params: Option<&str>) -> Result<Channel, InvidiousError> {
Channel::fetch_sync(self, Some(id), params)
}
fn channel_videos(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelVideos, InvidiousError> {
ChannelVideos::fetch_sync(self, Some(id), params)
}
fn channel_playlists(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelPlaylists, InvidiousError> {
ChannelPlaylists::fetch_sync(self, Some(id), params)
}
fn channel_comments(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelComments, InvidiousError> {
ChannelComments::fetch_sync(self, Some(id), params)
}
fn channel_search(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelSearch, InvidiousError> {
ChannelSearch::fetch_sync(self, Some(id), params)
}
fn search(&self, params: Option<&str>) -> Result<Search, InvidiousError> {
Search::fetch_sync(self, None, params)
}
fn playlist(&self, id: &str, params: Option<&str>) -> Result<Playlist, InvidiousError> {
Playlist::fetch_sync(self, Some(id), params)
}
fn mix(&self, id: &str, params: Option<&str>) -> Result<Mix, InvidiousError> {
Mix::fetch_sync(self, Some(id), params)
}
fn search_suggestions(&self, params: Option<&str>) -> Result<Suggestions, InvidiousError> {
Suggestions::fetch_sync(self, None, params)
}
}
#[cfg(feature = "async")]
#[async_trait::async_trait]
pub trait ClientAsyncTrait
where
Self: Sync + Sized,
{
fn new(instance: String) -> Self;
fn set_instance(&mut self, instance: String);
fn get_instance(&self) -> &str;
fn instance(mut self, instance: String) -> Self {
self.set_instance(instance);
self
}
async fn fetch(&self, url: &str) -> Result<String, Box<dyn Error>>;
async fn stats(&self, params: Option<&str>) -> Result<Stats, InvidiousError> {
Stats::fetch_async(self, None, params).await
}
async fn video(&self, id: &str, params: Option<&str>) -> Result<Video, InvidiousError> {
Video::fetch_async(self, Some(id), params).await
}
async fn comments(&self, id: &str, params: Option<&str>) -> Result<Comments, InvidiousError> {
Comments::fetch_async(self, Some(id), params).await
}
async fn captions(&self, id: &str, params: Option<&str>) -> Result<Captions, InvidiousError> {
Captions::fetch_async(self, Some(id), params).await
}
async fn annotations(
&self,
id: &str,
params: Option<&str>,
) -> Result<Annotations, InvidiousError> {
Annotations::fetch_async(self, Some(id), params).await
}
async fn trending(&self, params: Option<&str>) -> Result<Trending, InvidiousError> {
Trending::fetch_async(self, None, params).await
}
async fn popular(&self, params: Option<&str>) -> Result<Popular, InvidiousError> {
Popular::fetch_async(self, None, params).await
}
async fn channel(&self, id: &str, params: Option<&str>) -> Result<Channel, InvidiousError> {
Channel::fetch_async(self, Some(id), params).await
}
async fn channel_videos(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelVideos, InvidiousError> {
ChannelVideos::fetch_async(self, Some(id), params).await
}
async fn channel_playlists(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelPlaylists, InvidiousError> {
ChannelPlaylists::fetch_async(self, Some(id), params).await
}
async fn channel_comments(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelComments, InvidiousError> {
ChannelComments::fetch_async(self, Some(id), params).await
}
async fn channel_search(
&self,
id: &str,
params: Option<&str>,
) -> Result<ChannelSearch, InvidiousError> {
ChannelSearch::fetch_async(self, Some(id), params).await
}
async fn search(&self, params: Option<&str>) -> Result<Search, InvidiousError> {
Search::fetch_async(self, None, params).await
}
async fn playlist(&self, id: &str, params: Option<&str>) -> Result<Playlist, InvidiousError> {
Playlist::fetch_async(self, Some(id), params).await
}
async fn mix(&self, id: &str, params: Option<&str>) -> Result<Mix, InvidiousError> {
Mix::fetch_async(self, Some(id), params).await
}
async fn search_suggestions(
&self,
params: Option<&str>,
) -> Result<Suggestions, InvidiousError> {
Suggestions::fetch_async(self, None, params).await
}
}
#[cfg(feature = "sync")]
pub trait ClientSyncClone
where
Self: ClientSyncTrait + Clone,
{
}
#[cfg(feature = "async")]
pub trait ClientAsyncClone
where
Self: ClientAsyncTrait + Clone,
{
}