use frontmatter_gen::error::Error;
use frontmatter_gen::extractor::{
detect_format, extract_json_frontmatter, extract_raw_frontmatter,
};
use std::time::Instant;
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("\n๐งช FrontMatterGen Extractor Examples\n");
extract_yaml_example()?;
extract_toml_example()?;
extract_json_example()?;
extract_json_deeply_nested_example()?;
detect_format_example()?;
example_invalid_delimiters()?;
example_partial_content()?;
example_edge_cases()?;
example_empty_inputs()?;
benchmark_large_frontmatter()?;
#[cfg(feature = "ssg")]
run_ssg_examples()?;
println!("\n๐ All extractor examples completed successfully!");
Ok(())
}
fn extract_yaml_example() -> Result<(), Error> {
println!("๐ฆ YAML Frontmatter Extraction Example");
println!("---------------------------------------------");
let content = r#"---
title: Example
---
Content here"#;
let result = extract_raw_frontmatter(content)?;
println!(" โ
Extracted frontmatter: {}\n", result.0);
println!(" Remaining content: {}", result.1);
Ok(())
}
fn extract_toml_example() -> Result<(), Error> {
println!("\n๐ฆ TOML Frontmatter Extraction Example");
println!("---------------------------------------------");
let content = r#"+++
title = "Example"
+++
Content here"#;
let result = extract_raw_frontmatter(content)?;
println!(" โ
Extracted frontmatter: {}\n", result.0);
println!(" Remaining content: {}", result.1);
Ok(())
}
fn extract_json_example() -> Result<(), Error> {
println!("\n๐ฆ JSON Frontmatter Extraction Example");
println!("---------------------------------------------");
let content = r#"{ "title": "Example" }
Content here"#;
let result = extract_json_frontmatter(content)?;
println!(" โ
Extracted JSON frontmatter: {}\n", result);
Ok(())
}
fn extract_json_deeply_nested_example() -> Result<(), Error> {
println!("\n๐ฆ Deeply Nested JSON Frontmatter Example");
println!("---------------------------------------------");
let content = r#"{ "a": { "b": { "c": { "d": { "e": {} }}}}}
Content here"#;
let result = extract_json_frontmatter(content)?;
println!(
" โ
Extracted deeply nested frontmatter: {}\n",
result
);
Ok(())
}
fn detect_format_example() -> Result<(), Error> {
println!("\n๐ฆ Frontmatter Format Detection Example");
println!("---------------------------------------------");
let yaml = "title: Example";
let toml = "title = \"Example\"";
let json = "{ \"title\": \"Example\" }";
println!(
" Detected format for YAML: {:?}",
detect_format(yaml)?
);
println!(
" Detected format for TOML: {:?}",
detect_format(toml)?
);
println!(
" Detected format for JSON: {:?}",
detect_format(json)?
);
Ok(())
}
fn example_invalid_delimiters() -> Result<(), Error> {
println!("\n๐จ Testing invalid delimiters...");
let content_with_invalid_delimiters = r#"<>
title: Invalid Delimiters
<>
Content"#;
let result =
extract_raw_frontmatter(content_with_invalid_delimiters);
match result {
Ok(_) => println!(" โ Unexpectedly extracted content with invalid delimiters."),
Err(e) => println!(
" โ
Correctly detected invalid delimiters. Error: {}\n",
e
),
}
Ok(())
}
fn example_partial_content() -> Result<(), Error> {
println!("\n๐จ Testing partial content extraction...");
let content_with_partial_frontmatter = r#"---
title: "Incomplete
Content"#;
let result =
extract_raw_frontmatter(content_with_partial_frontmatter);
match result {
Ok(_) => println!(" โ Unexpectedly extracted incomplete frontmatter."),
Err(e) => println!(
" โ
Correctly detected incomplete frontmatter. Error: {}\n",
e
),
}
Ok(())
}
fn example_edge_cases() -> Result<(), Error> {
println!("\n๐จ Testing edge cases...");
let empty_frontmatter = r#"---
---
Content here"#;
let result = extract_raw_frontmatter(empty_frontmatter);
match result {
Ok(res) => println!(
" โ
Extracted empty frontmatter: '{}', Remaining: '{}'\n",
res.0, res.1
),
Err(e) => println!(
" โ Failed to extract empty frontmatter. Error: {}\n",
e
),
}
Ok(())
}
fn benchmark_large_frontmatter() -> Result<(), Error> {
println!("\n๐ Benchmarking large frontmatter extraction...");
let large_content = format!(
"---\n{}\n---\nContent here",
(0..10_000)
.map(|i| format!("key{}: value{}", i, i))
.collect::<Vec<_>>()
.join("\n")
);
let start = Instant::now();
let result = extract_raw_frontmatter(&large_content);
let duration = start.elapsed();
match result {
Ok(_) => println!(
" โ
Successfully extracted large frontmatter in {:?}.",
duration
),
Err(e) => println!(
" โ Failed to extract large frontmatter. Error: {}",
e
),
}
Ok(())
}
fn example_empty_inputs() -> Result<(), Error> {
println!("\n๐จ Testing empty inputs...");
let empty_content = "";
match extract_raw_frontmatter(empty_content) {
Ok(_) => println!(" โ Unexpectedly parsed empty content."),
Err(_) => println!(
" โ
Correctly detected error for empty content."
),
}
let null_content: Option<&str> = None;
if let Some(content) = null_content {
match extract_raw_frontmatter(content) {
Ok(_) => {
println!(" โ Unexpectedly parsed null content.")
}
Err(_) => println!(
" โ
Correctly detected error for null content."
),
}
} else {
println!(" โ
Detected null content as invalid input.");
}
Ok(())
}
#[cfg(feature = "ssg")]
fn run_ssg_examples() -> Result<(), Error> {
println!("\n๐ฆ SSG-Specific Examples");
println!("---------------------------------------------");
let content = r#"---
title: My Page
layout: post
template: blog
date: 2025-01-01
---
Content here"#;
let result = extract_raw_frontmatter(content)?;
println!(" โ
Extracted SSG frontmatter: {}\n", result.0);
println!(" Remaining content: {}", result.1);
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_yaml_extraction() -> Result<(), Error> {
let content = r#"---
title: Test
---
Content"#;
let result = extract_raw_frontmatter(content)?;
assert_eq!(result.0, "title: Test");
assert_eq!(result.1, "Content");
Ok(())
}
#[test]
fn test_toml_extraction() -> Result<(), Error> {
let content = r#"+++
title = "Test"
+++
Content"#;
let result = extract_raw_frontmatter(content)?;
assert_eq!(result.0, "title = \"Test\"");
assert_eq!(result.1, "Content");
Ok(())
}
#[test]
fn test_empty_inputs() -> Result<(), Error> {
example_empty_inputs()
}
#[test]
fn test_invalid_delimiters() -> Result<(), Error> {
example_invalid_delimiters()
}
#[test]
fn test_partial_content() -> Result<(), Error> {
example_partial_content()
}
#[test]
fn test_edge_cases() -> Result<(), Error> {
example_edge_cases()
}
#[test]
fn test_large_frontmatter() -> Result<(), Error> {
benchmark_large_frontmatter()
}
#[cfg(feature = "ssg")]
#[test]
fn test_ssg_examples() -> Result<(), Error> {
run_ssg_examples()
}
}