use crate::{ providers::{ hanime::HanimeProvider, perverzija::PerverzijaProvider, pmvhaven::PmvhavenProvider, pornhub::PornhubProvider, rule34video::Rule34videoProvider, spankbang::SpankbangProvider }, util::cache::VideoCache, videos::VideoItem, DbPool }; pub mod hanime; pub mod perverzija; pub mod pmvhaven; pub mod pornhub; pub mod spankbang; pub mod rule34video; pub trait Provider { async fn get_videos( &self, cache: VideoCache, pool: DbPool, channel: String, sort: String, query: Option, page: String, per_page: String, featured: String, category: String, ) -> Vec; } #[derive(Debug, Clone)] pub enum AnyProvider { Perverzija(PerverzijaProvider), Hanime(HanimeProvider), Spankbang(SpankbangProvider), Pornhub(PornhubProvider), Pmvhaven(PmvhavenProvider), Rule34video(Rule34videoProvider), } impl Provider for AnyProvider { async fn get_videos( &self, cache: VideoCache, pool: DbPool, channel: String, sort: String, query: Option, page: String, per_page: String, featured: String, category: String, ) -> Vec { println!( "/api/videos: channel={:?}, sort={:?}, query={:?}, page={:?}, per_page={:?}, featured={:?}", channel, sort, query, page, per_page, featured ); match self { AnyProvider::Perverzija(p) => { p.get_videos( cache.clone(), pool.clone(), channel.clone(), sort.clone(), query.clone(), page.clone(), per_page.clone(), featured.clone(), category.clone(), ) .await } AnyProvider::Hanime(p) => { p.get_videos(cache, pool, channel, sort, query, page, per_page, featured, category.clone(),) .await } AnyProvider::Spankbang(p) => { p.get_videos(cache, pool, channel, sort, query, page, per_page, featured, category.clone(),) .await } AnyProvider::Pornhub(p) => { p.get_videos(cache, pool, channel, sort, query, page, per_page, featured, category.clone(),) .await } AnyProvider::Pmvhaven(p) => { p.get_videos(cache, pool, channel, sort, query, page, per_page, featured, category.clone(),) .await } AnyProvider::Rule34video(p) => { p.get_videos(cache, pool, channel, sort, query, page, per_page, featured, category.clone(),) .await } } } }