use anyhow::Result;
use std::future::Future;
use std::pin::Pin;
mod commoncrawl;
mod otx;
mod robots;
mod sitemap;
mod urlscan;
mod vt;
mod wayback;
pub use commoncrawl::CommonCrawlProvider;
pub use otx::OTXProvider;
pub use robots::RobotsProvider;
pub use sitemap::SitemapProvider;
pub use urlscan::UrlscanProvider;
pub use vt::VirusTotalProvider;
pub use wayback::WaybackMachineProvider;
pub trait Provider: Send + Sync {
fn clone_box(&self) -> Box<dyn Provider>;
fn fetch_urls<'a>(
&'a self,
domain: &'a str,
) -> Pin<Box<dyn Future<Output = Result<Vec<String>>> + Send + 'a>>;
fn with_subdomains(&mut self, include: bool);
fn with_proxy(&mut self, proxy: Option<String>);
fn with_proxy_auth(&mut self, auth: Option<String>);
fn with_timeout(&mut self, seconds: u64);
fn with_retries(&mut self, count: u32);
fn with_random_agent(&mut self, enabled: bool);
fn with_insecure(&mut self, enabled: bool);
fn with_parallel(&mut self, count: u32);
fn with_rate_limit(&mut self, requests_per_second: Option<f32>);
}