use quarto_error_reporting::DiagnosticMessageBuilder;
fn main() {
println!("=== Example 1: Simple builder usage ===\n");
let error1 = DiagnosticMessageBuilder::error("Invalid input")
.problem("Value must be numeric")
.add_detail("Found text in column 3")
.add_hint("Check the input file format")
.build();
println!("{}", error1.to_text(None));
println!("\n=== Example 2: Tidyverse four-part structure ===\n");
let error2 = DiagnosticMessageBuilder::error("Incompatible types")
.problem("Cannot combine date and datetime types")
.add_detail("`x` has type `date`")
.add_detail("`y` has type `datetime`")
.add_info("Both values come from the same data source")
.add_hint("Convert both to the same type first?")
.build();
println!("{}", error2.to_text(None));
println!("\n=== Example 3: Multiple details and hints ===\n");
let error3 = DiagnosticMessageBuilder::error("Schema validation failed")
.problem("Configuration does not match expected schema")
.add_detail("Property `title` has type `number`")
.add_detail("Expected type is `string`")
.add_detail("Property `author` is missing")
.add_info("Schema is defined in `_quarto.yml`")
.add_hint("Did you forget quotes around the title?")
.add_hint("Add an `author` field to the configuration")
.build();
println!("{}", error3.to_text(None));
println!("\n=== Example 4: Builder validation ===\n");
let (msg, warnings) = DiagnosticMessageBuilder::error("Validation test")
.add_detail("Detail 1")
.add_detail("Detail 2")
.add_detail("Detail 3")
.add_detail("Detail 4")
.add_detail("Detail 5")
.add_detail("Detail 6") .build_with_validation();
println!("{}", msg.to_text(None));
if !warnings.is_empty() {
println!("\nValidation warnings:");
for warning in warnings {
println!(" ⚠ {}", warning);
}
}
}