1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
pub mod meta_error;
mod site;
pub mod meta;

use select::document::Document;
use site::{Site, Website, find_manual_meta, find_og_meta, find_tw_meta};

pub fn get_meta(url: &str) -> Result<meta::Meta, meta_error::MetaError>{ 
    let mut site = Site::new(url);
    site.check_type()?;
    let doc = Document::from(site.content.as_ref());
    let default_meta = meta::Meta::new("kosong", "kosong", "kosong");
    let result: meta::Meta =  match site.meta_type {
        meta::MetaType::Og => find_og_meta(&doc).unwrap_or(default_meta),
        meta::MetaType::Tw => find_tw_meta(&doc).unwrap_or(default_meta),
        meta::MetaType::Manual => find_manual_meta(&doc).unwrap_or(default_meta),
        meta::MetaType::Facebook => find_manual_meta(&doc).unwrap_or(default_meta),
        meta::MetaType::Twitter => return Err(meta_error::MetaError::SomeError("twitter site is not available at this momment")),
        meta::MetaType::Instagram => find_og_meta(&doc).unwrap_or(default_meta),
    };
    return Ok(result);
}

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn get_meta_test() {
        let mymeta = get_meta("https://github.com/miqbalrr/grab-meta").unwrap();
        assert_eq!(mymeta.title, "miqbalrr/grab-meta");
    }
}