sitemaps 0.2.0

Read and write files in the Sitemaps XML format
Documentation
extern crate sitemaps;

use chrono::prelude::*;
use sitemaps::error::Error;
use sitemaps::sitemap::{ChangeFreq, Priority};
use sitemaps::w3c_datetime::W3CDateTime;
use sitemaps::SitemapsFile;
use std::fs::File;
use std::io::BufReader;

#[test]
fn test_parse_sitemap() -> Result<(), Error> {
    let file = File::open("tests/data/example_1_url.xml")?;
    let reader = BufReader::new(file);

    let sitemap = match SitemapsFile::read(reader)? {
        SitemapsFile::Sitemap(sitemap) => sitemap,
        _ => unreachable!(),
    };
    assert_eq!(sitemap.namespace, sitemaps::NAMESPACE);
    assert_eq!(sitemap.entries.len(), 1);
    assert_eq!(
        sitemap.entries[0].loc.to_string(),
        "http://www.example.com/"
    );
    assert_eq!(
        sitemap.entries[0].last_mod,
        Some(W3CDateTime::Date("2005-01-01".parse::<NaiveDate>()?))
    );
    assert_eq!(sitemap.entries[0].change_freq, Some(ChangeFreq::Monthly));
    assert_eq!(sitemap.entries[0].priority, Some(Priority(0.8)));
    Ok(())
}

#[test]
fn test_parse_sitemap_index() -> Result<(), Error> {
    let file = File::open("tests/data/sitemap_index.xml")?;
    let reader = BufReader::new(file);

    let sitemap_index = match SitemapsFile::read(reader)? {
        SitemapsFile::SiteIndex(sitemapindex) => sitemapindex,
        _ => unreachable!(),
    };
    assert_eq!(sitemap_index.namespace, sitemaps::NAMESPACE);
    assert_eq!(sitemap_index.entries.len(), 2);
    assert_eq!(
        sitemap_index.entries[0].loc.to_string(),
        "http://www.example.com/sitemap1.xml.gz"
    );
    assert_eq!(
        sitemap_index.entries[0].last_mod,
        Some(W3CDateTime::DateTime(
            "2004-10-01T18:23:17+00:00".parse::<DateTime<FixedOffset>>()?,
            false,
            false
        ))
    );
    Ok(())
}