use html_generator::seo::{
generate_meta_tags, generate_structured_data, MetaTagsBuilder,
StructuredDataConfig,
};
use html_generator::HtmlError;
use std::collections::HashMap;
macro_rules! print_result {
($result:expr, $type:expr) => {
match $result {
Ok(data) => println!("Generated {}: \n{data}", $type),
Err(error) => {
eprintln!("Failed to generate {}: {error}", $type);
return Err(error);
}
}
};
}
fn main() -> Result<(), HtmlError> {
println!("\n๐งช html-generator SEO Examples\n");
generate_meta_tags_simple_example()?;
generate_meta_tags_builder_example()?;
generate_structured_data_example()?;
generate_structured_data_advanced_example()?;
println!("\n๐ All SEO examples completed successfully!");
Ok(())
}
fn generate_meta_tags_simple_example() -> Result<(), HtmlError> {
println!("๐ฆ Generate Meta Tags (Simple) Example");
println!("---------------------------------------------");
let html = r#"
<html>
<head><title>Test Page</title></head>
<body><p>This is a test page.</p></body>
</html>
"#;
print_result!(generate_meta_tags(html), "Meta Tags");
Ok(())
}
fn generate_meta_tags_builder_example() -> Result<(), HtmlError> {
println!("\n๐ฆ Generate Meta Tags (Builder) Example");
println!("---------------------------------------------");
let meta_tags = MetaTagsBuilder::new()
.with_title("Test Page")
.with_description("This is a test page.")
.add_meta_tag("keywords", "test,example,seo")
.add_meta_tag("author", "Test Author")
.build()?;
println!("Generated Meta Tags: \n{meta_tags}");
Ok(())
}
fn generate_structured_data_example() -> Result<(), HtmlError> {
println!("\n๐ฆ Generate Structured Data Example");
println!("---------------------------------------------");
let html = r#"
<html>
<head><title>Test Page</title></head>
<body><p>This is a test page.</p></body>
</html>
"#;
print_result!(
generate_structured_data(html, None),
"Structured Data"
);
Ok(())
}
fn generate_structured_data_advanced_example() -> Result<(), HtmlError>
{
println!("\n๐ฆ Generate Structured Data (Advanced) Example");
println!("---------------------------------------------");
let html = r#"
<html>
<head><title>Test Article</title></head>
<body><p>This is a test article.</p></body>
</html>
"#;
let additional_data = HashMap::from([
("author".to_string(), "Test Author".to_string()),
("datePublished".to_string(), "2024-03-15".to_string()),
]);
let config = StructuredDataConfig {
page_type: "Article".to_string(),
additional_types: vec!["WebPage".to_string()],
additional_data: Some(additional_data),
};
print_result!(
generate_structured_data(html, Some(config)),
"Advanced Structured Data"
);
Ok(())
}