#![allow(missing_docs)]
use quick_xml::Error as XmlError;
use rss_gen::error::{Result, RssError};
use std::io;
use std::sync::Arc;
pub fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
println!("\n๐งช RSS Gen Error Handling Examples\n");
missing_field_example()?;
invalid_input_example()?;
xml_error_example()?;
utf8_error_example()?;
io_error_example()?;
validation_errors_example()?;
date_sort_error_example()?;
custom_error_example()?;
http_status_example()?;
println!(
"\n๐ All error handling examples completed successfully!"
);
Ok(())
}
fn missing_field_example() -> Result<()> {
println!("๐ฆ Missing Field Error Example");
println!("---------------------------------------------");
let error = RssError::missing_field("title");
println!(" โ Missing Field Error: {}", error);
match validate_rss_data() {
Ok(_) => println!(" โ
RSS data is valid"),
Err(e) => println!(" โ Validation failed: {}", e),
}
Ok(())
}
fn invalid_input_example() -> Result<()> {
println!("\n๐ฆ Invalid Input Error Example");
println!("---------------------------------------------");
let error = RssError::invalid_input("Invalid date format");
println!(" โ Invalid Input Error: {}", error);
Ok(())
}
fn xml_error_example() -> Result<()> {
println!("\n๐ฆ Xml Error Example");
println!("---------------------------------------------");
let xml_error = XmlError::Io(Arc::new(io::Error::new(
io::ErrorKind::Other,
"XML parsing failed",
)));
let error = RssError::XmlWriteError(xml_error);
println!(" โ XML Error: {}", error);
Ok(())
}
fn utf8_error_example() -> Result<()> {
println!("\n๐ฆ UTF-8 Error Example");
println!("---------------------------------------------");
let invalid_utf8 = vec![0, 159, 146, 150];
let utf8_result = String::from_utf8(invalid_utf8);
match utf8_result {
Ok(_) => println!(" โ
UTF-8 conversion successful"),
Err(e) => {
let error = RssError::Utf8Error(e);
println!(" โ UTF-8 Error: {}", error);
}
}
Ok(())
}
fn io_error_example() -> Result<()> {
println!("\n๐ฆ I/O Error Example");
println!("---------------------------------------------");
let io_error =
io::Error::new(io::ErrorKind::NotFound, "File not found");
let error: RssError = io_error.into();
println!(" โ I/O Error: {}", error);
Ok(())
}
fn validation_errors_example() -> Result<()> {
println!("\n๐ฆ Validation Errors Example");
println!("---------------------------------------------");
let errors = vec![
"Title is missing".to_string(),
"Invalid publication date".to_string(),
];
let error = RssError::ValidationErrors(errors);
println!(" โ Validation Errors: {}", error);
Ok(())
}
fn date_sort_error_example() -> Result<()> {
println!("\n๐ฆ Date Sort Error Example");
println!("---------------------------------------------");
let date_errors = vec![
RssError::date_sort_error(0, "Invalid date format"),
RssError::date_sort_error(2, "Date out of range"),
];
let error = RssError::DateSortError(date_errors);
println!(" โ Date Sort Error: {}", error);
Ok(())
}
fn custom_error_example() -> Result<()> {
println!("\n๐ฆ Custom Error Example");
println!("---------------------------------------------");
let error = RssError::custom("An unexpected error occurred");
println!(" โ Custom Error: {}", error);
Ok(())
}
fn http_status_example() -> Result<()> {
println!("\n๐ฆ Http Status Code Example");
println!("---------------------------------------------");
let missing_field_error = RssError::missing_field("author");
let xml_error = RssError::XmlWriteError(XmlError::Io(Arc::new(
io::Error::new(io::ErrorKind::Other, "XML error"),
)));
println!(
" โ Missing Field Error HTTP Status: {}",
missing_field_error.to_http_status()
);
println!(
" โ XML Error HTTP Status: {}",
xml_error.to_http_status()
);
Ok(())
}
fn validate_rss_data() -> Result<()> {
Err(RssError::missing_field("title"))
}