use serde_derive::{Deserialize, Serialize};
use strum_macros::Display;
use crate::fetchers::Fetcher::Jnc;
use crate::fetchers::jnovel::JNovelFetcher;
use crate::lemmy::{PostInfo};

pub mod jnovel;

pub(crate) trait FetcherTrait {
    fn new() -> Self where Self: Sized;
    fn check_feed(&self) -> Result<Vec<PostInfo>, ()>;
}

impl Fetcher {
    pub(crate) fn check_feed(&self) -> Result<Vec<PostInfo>, ()> {
        match self {
            Jnc(fetcher) => fetcher.check_feed(),
            /*default => {
                let err_msg = format!("Fetcher {default} is not implemented");
                error!(err_msg);
                Err(())
            }*/
        }
    }
}

#[derive(Deserialize, Serialize, Debug, Clone, Display)]
pub(crate) enum Fetcher {
    #[serde(rename = "jnc")]
    Jnc(#[serde(skip)] JNovelFetcher)
}