#![allow(missing_docs)]
use metadata_gen::{
error::MetadataError, extract_and_prepare_metadata,
utils::async_extract_metadata_from_file,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("\n๐งช metadata-gen Error Handling Examples\n");
extraction_error_example()?;
processing_error_example()?;
missing_field_error_example()?;
date_parse_error_example()?;
yaml_error_example()?;
json_error_example()?;
toml_error_example()?;
unsupported_format_error_example()?;
validation_error_example()?;
io_error_example().await?;
println!(
"\n๐ All error handling examples completed successfully!"
);
Ok(())
}
fn extraction_error_example() -> Result<(), MetadataError> {
println!("๐ฆ Extraction Error Example");
println!("---------------------------------------------");
let invalid_content = "This content has no metadata";
match extract_and_prepare_metadata(invalid_content) {
Ok(_) => {
println!(" โ Unexpected success in extracting metadata")
}
Err(e) => {
println!(
" โ
Successfully caught Extraction Error: {}",
e
);
}
}
Ok(())
}
fn processing_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Processing Error Example");
println!("---------------------------------------------");
let error = MetadataError::new_processing_error(
"Failed to process metadata",
);
println!(" โ
Created Processing Error: {}", error);
Ok(())
}
fn missing_field_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Missing Field Error Example");
println!("---------------------------------------------");
let error = MetadataError::MissingFieldError("title".to_string());
println!(" โ
Created Missing Field Error: {}", error);
Ok(())
}
fn date_parse_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Date Parse Error Example");
println!("---------------------------------------------");
let error = MetadataError::DateParseError(
"Invalid date format".to_string(),
);
println!(" โ
Created Date Parse Error: {}", error);
Ok(())
}
fn yaml_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ YAML Error Example");
println!("---------------------------------------------");
let invalid_yaml = "invalid: yaml: data";
let result: Result<serde_yml::Value, _> =
serde_yml::from_str(invalid_yaml);
match result {
Ok(_) => println!(
" โ Unexpected success in parsing invalid YAML"
),
Err(e) => {
let error = MetadataError::YamlError(e);
println!(
" โ
Successfully caught YAML Error: {}",
error
);
}
}
Ok(())
}
fn json_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ JSON Error Example");
println!("---------------------------------------------");
let invalid_json = "{ invalid json }";
match serde_json::from_str::<serde_json::Value>(invalid_json) {
Ok(_) => println!(
" โ Unexpected success in parsing invalid JSON"
),
Err(e) => {
let error = MetadataError::JsonError(e);
println!(
" โ
Successfully caught JSON Error: {}",
error
);
}
}
Ok(())
}
fn toml_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ TOML Error Example");
println!("---------------------------------------------");
let invalid_toml = "invalid = toml data";
match toml::from_str::<toml::Value>(invalid_toml) {
Ok(_) => println!(
" โ Unexpected success in parsing invalid TOML"
),
Err(e) => {
let error = MetadataError::TomlError(e);
println!(" โ
Successfully caught TOML Error:");
println!(" {}", error);
if let MetadataError::TomlError(ref toml_error) = error {
println!("\n ๐ Error details:");
for line in toml_error.to_string().lines() {
println!(" {}", line);
}
println!("\n ๐ก Suggestion:");
println!(" Try enclosing the value in quotes:");
println!(" invalid = \"toml data\"");
}
}
}
Ok(())
}
fn unsupported_format_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Unsupported Format Error Example");
println!("---------------------------------------------");
let error =
MetadataError::UnsupportedFormatError("XML".to_string());
println!(" โ
Created Unsupported Format Error: {}", error);
Ok(())
}
fn validation_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Validation Error Example");
println!("---------------------------------------------");
let error = MetadataError::new_validation_error(
"title",
"Title must not be empty",
);
println!(" โ
Created Validation Error: {}", error);
Ok(())
}
async fn io_error_example() -> Result<(), MetadataError> {
println!("\n๐ฆ I/O Error Example");
println!("---------------------------------------------");
match async_extract_metadata_from_file("nonexistent_file.md").await
{
Ok(_) => println!(
" โ Unexpected success in reading nonexistent file"
),
Err(e) => {
println!(" โ
Successfully caught I/O Error: {}", e);
}
}
Ok(())
}