use std::sync::Arc;
use crate::input::proto::substrait;
use crate::output::diagnostic;
use crate::parse::context;
use crate::parse::extensions;
pub fn parse_extension_single_rel(
x: &substrait::ExtensionSingleRel,
y: &mut context::Context,
) -> diagnostic::Result<()> {
let _in_type = handle_rel_input!(x, y);
y.set_schema(Arc::default());
proto_required_field!(x, y, detail, extensions::advanced::parse_functional_any);
if let Some(x) = &x.detail {
describe!(y, Relation, "{} extension", x.type_url);
} else {
describe!(y, Relation, "Unknown extension");
}
handle_rel_common!(x, y);
Ok(())
}
pub fn parse_extension_multi_rel(
x: &substrait::ExtensionMultiRel,
y: &mut context::Context,
) -> diagnostic::Result<()> {
let _in_types: Vec<_> = handle_rel_inputs!(x, y).collect();
y.set_schema(Arc::default());
proto_required_field!(x, y, detail, extensions::advanced::parse_functional_any);
if let Some(x) = &x.detail {
describe!(y, Relation, "{} extension", x.type_url);
} else {
describe!(y, Relation, "Unknown extension");
}
handle_rel_common!(x, y);
Ok(())
}
pub fn parse_extension_leaf_rel(
x: &substrait::ExtensionLeafRel,
y: &mut context::Context,
) -> diagnostic::Result<()> {
y.set_schema(Arc::default());
proto_required_field!(x, y, detail, extensions::advanced::parse_functional_any);
if let Some(x) = &x.detail {
describe!(y, Relation, "{} extension", x.type_url);
} else {
describe!(y, Relation, "Unknown extension");
}
handle_rel_common!(x, y);
Ok(())
}