use substrait_explain::{OutputOptions, Parser, format, format_with_options};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Substrait-Explain Basic Usage ===\n");
let plan_text = r#"
=== Extensions
URNs:
@ 1: https://github.com/substrait-io/substrait/blob/main/extensions/functions_arithmetic.yaml
Functions:
# 10 @ 1: gt
# 11 @ 1: multiply
=== Plan
Root[revenue]
Filter[gt($2, 100):boolean => $0, $1]
Project[$0, $1, multiply($0, $1):fp64?]
Read[orders => quantity:i32?, price:fp64?]
"#;
let plan = Parser::parse(plan_text)?;
let (text, errors) = format(&plan);
println!("== Standard output ==");
println!("{text}");
if !errors.is_empty() {
println!("Warnings during conversion:");
for error in errors {
println!(" - {error}");
}
return Err(("Unexpected warnings during conversion!!!").into());
}
let (verbose_text, verbose_errors) = format_with_options(&plan, &OutputOptions::verbose());
println!("\n== Verbose output ==");
println!("{verbose_text}");
if !verbose_errors.is_empty() {
println!("Warnings during verbose conversion:");
for error in verbose_errors {
println!(" - {error}");
}
return Err(("Unexpected warnings during verbose conversion!!!").into());
}
Ok(())
}