#[cfg(feature = "bloomberg")]
pub mod bloomberg;
#[cfg(feature = "coupang")]
pub mod coupang;
#[cfg(feature = "gen")]
pub mod gen;
#[cfg(feature = "grok")]
pub mod grok;
#[cfg(feature = "instagram")]
pub mod instagram;
#[cfg(feature = "nansen")]
pub mod nansen;
#[cfg(feature = "pcc")]
pub mod pcc;
#[cfg(feature = "reddit")]
pub mod reddit;
#[cfg(feature = "s591")]
pub mod s591;
#[cfg(feature = "sa")]
pub mod sa;
#[cfg(feature = "spotify")]
pub mod spotify;
#[cfg(feature = "twitter")]
pub mod twitter;
#[cfg(feature = "xhs")]
pub mod xhs;
#[cfg(feature = "youtube")]
pub mod youtube;

use crate::adapter::CliAdapter;

/// Collect all enabled adapters.
///
/// Adding a new adapter? Just add one line here:
/// ```ignore
/// #[cfg(feature = "mysite")]
/// adapters.push(Box::new(mysite::Adapter));
/// ```
#[allow(clippy::vec_init_then_push)]
pub fn adapters() -> Vec<Box<dyn CliAdapter>> {
    let mut adapters: Vec<Box<dyn CliAdapter>> = Vec::new();
    #[cfg(feature = "twitter")]
    adapters.push(Box::new(twitter::Adapter));
    #[cfg(feature = "grok")]
    adapters.push(Box::new(grok::Adapter));
    #[cfg(feature = "xhs")]
    adapters.push(Box::new(xhs::Adapter));
    #[cfg(feature = "instagram")]
    adapters.push(Box::new(instagram::Adapter));
    #[cfg(feature = "bloomberg")]
    adapters.push(Box::new(bloomberg::Adapter));
    #[cfg(feature = "coupang")]
    adapters.push(Box::new(coupang::Adapter));
    #[cfg(feature = "reddit")]
    adapters.push(Box::new(reddit::Adapter));
    #[cfg(feature = "youtube")]
    adapters.push(Box::new(youtube::Adapter));
    #[cfg(feature = "s591")]
    adapters.push(Box::new(s591::Adapter));
    #[cfg(feature = "sa")]
    adapters.push(Box::new(sa::Adapter));
    #[cfg(feature = "gen")]
    adapters.push(Box::new(gen::Adapter));
    #[cfg(feature = "nansen")]
    adapters.push(Box::new(nansen::Adapter));
    #[cfg(feature = "spotify")]
    adapters.push(Box::new(spotify::Adapter));
    #[cfg(feature = "pcc")]
    adapters.push(Box::new(pcc::Adapter));
    adapters
}
