use crate::constants::Category;

#[derive(Debug, Serialize, Deserialize)]
pub struct Sources {
    pub status: String,
    pub sources: Vec<Source>,
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Source {
    pub id: String,
    pub name: String,
    pub description: String,
    pub url: String,
    pub category: Category,
    pub language: String,
    pub country: String,
}

#[cfg(test)]
mod tests {
    use super::*;
    use std::fs;
    use std::path::PathBuf;

    #[test]
    fn deserialize() {
        let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
        d.push("resources/example_sources.json");

        let contents =
            fs::read_to_string(d.as_path()).expect("Something went wrong reading the file");

        let sources: Sources = serde_json::from_str(&contents).unwrap();

        assert_eq!(sources.status, "ok");
        assert_eq!(sources.sources.len(), 4);
    }
}
