#![allow(missing_docs)]
use metadata_gen::{
extract_and_prepare_metadata, generate_metatags,
utils::{async_extract_metadata_from_file, escape_html},
MetadataError,
};
use std::collections::HashMap;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("\n๐งช metadata-gen Library Usage Examples\n");
extract_and_prepare_example()?;
generate_metatags_example()?;
escape_html_example()?;
async_file_extraction_example().await?;
println!("\n๐ All library usage examples completed successfully!");
Ok(())
}
fn extract_and_prepare_example() -> Result<(), MetadataError> {
println!("๐ฆ Extract and Prepare Metadata Example");
println!("---------------------------------------------");
let content = r#"---
title: Sample Page
description: This is a sample page for metadata extraction
keywords: metadata, example, rust
---
# Sample Content
This is the main content of the page."#;
match extract_and_prepare_metadata(content) {
Ok((metadata, keywords, meta_tags)) => {
println!(
" โ
Successfully extracted and prepared metadata"
);
println!(" ๐ Metadata:");
for (key, value) in metadata.iter() {
println!(" {}: {}", key, value);
}
println!(" ๐ท๏ธ Keywords: {}", keywords.join(", "));
println!(" ๐ท๏ธ Meta Tags:");
println!(" {}", meta_tags);
}
Err(e) => println!(
" โ Failed to extract and prepare metadata: {}",
e
),
}
Ok(())
}
fn generate_metatags_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Generate Meta Tags Example");
println!("---------------------------------------------");
let mut metadata = HashMap::new();
metadata.insert("title".to_string(), "My Awesome Page".to_string());
metadata.insert(
"description".to_string(),
"This is an awesome page about Rust".to_string(),
);
metadata.insert(
"og:image".to_string(),
"https://example.com/image.jpg".to_string(),
);
let meta_tags = generate_metatags(&metadata);
println!(" โ
Successfully generated meta tags");
println!(" ๐ท๏ธ Meta Tags:");
println!(" {}", meta_tags);
Ok(())
}
fn escape_html_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Escape HTML Example");
println!("---------------------------------------------");
let unescaped = r#"<script>alert("XSS");</script>"#;
let escaped = escape_html(unescaped);
println!(" โ
Successfully escaped HTML");
println!(" ๐ Original: {}", unescaped);
println!(" ๐ Escaped: {}", escaped);
Ok(())
}
async fn async_file_extraction_example() -> Result<(), MetadataError> {
println!("\n๐ฆ Async File Metadata Extraction Example");
println!("---------------------------------------------");
match async_extract_metadata_from_file("./examples/example.md")
.await
{
Ok((metadata, keywords, meta_tags)) => {
println!(
" โ
Successfully extracted metadata from file"
);
println!(" ๐ Metadata:");
for (key, value) in metadata.iter() {
println!(" {}: {}", key, value);
}
println!(" ๐ท๏ธ Keywords: {}", keywords.join(", "));
println!(" ๐ท๏ธ Meta Tags:");
println!(" {}", meta_tags);
}
Err(e) => println!(
" โ Failed to extract metadata from file: {}",
e
),
}
Ok(())
}