use rss_gen::{
generate_atom, generate_rss, AtomEntry, AtomFeed, RssData,
RssError, RssItem,
};
fn main() {
print_rss_validation_errors();
print_atom_validation_errors();
print_date_acceptance();
}
fn print_rss_validation_errors() {
println!("== RSS channel + item validation ==");
let mut rss = RssData::new(None);
rss.add_item(
RssItem::new()
.title("Item missing description")
.link("https://example.com/post"),
);
match generate_rss(&rss) {
Ok(_) => println!(" (no errors)"),
Err(RssError::ValidationErrors(errs)) => {
for e in &errs {
println!(" field = {:<24} message = {}", e.field, e);
}
}
Err(other) => println!(" unexpected error: {other}"),
}
}
fn print_atom_validation_errors() {
println!("\n== Atom feed + entry validation ==");
let feed = AtomFeed::new().add_entry(
AtomEntry::new()
.id("urn:example:1")
.title("Entry one")
.updated("2026-06-28T00:00:00Z"),
);
match generate_atom(&feed) {
Ok(_) => println!(" (no errors)"),
Err(RssError::ValidationErrors(errs)) => {
for e in &errs {
println!(" field = {:<24} message = {}", e.field, e);
}
}
Err(other) => println!(" unexpected error: {other}"),
}
}
fn print_date_acceptance() {
use rss_gen::data::parse_date;
println!("\n== Date parser accepts RFC 2822 + ISO 8601 ==");
let inputs = [
"Mon, 01 Jan 2024 00:00:00 GMT",
"Sun, 28 Jun 2026 00:12:20 +0000",
"Sat, 27 Jun 2026 19:12:20 -0500",
"2026-06-28T00:12:20Z",
];
for input in inputs {
match parse_date(input) {
Ok(_) => println!(" OK {input}"),
Err(e) => println!(" FAIL {input} ({e})"),
}
}
}