Open
Description
It would be nice to provide a simplified interface for the most common needs:
#[udf]
fn my_udf(a: Option<&str>, b: f64, c: &str) -> Option<i32> {
}
#[udf]
fn my_udf2(cache: &mut Vec<u8>, a: Option<&str>, b: f64, c: &str) -> Result<&[u8], String> {
}
// If init is not specified, default to Default
#[udf(init = MyStruct::new())]
fn my_udf3(cache: &mut MyStruct, a: Option<&str>, b: f64, c: &str) -> &[u8] {
}
// desugars to something like
mod my_udf_mod {
struct MyUdf(Vec<u8>);
#[register]
impl BasicUdf for MyUdf {
returning = Option<i32>;
fn init(...) { /* autogenerated, verify types */ }
fn process(&mut self...) {
// generate user defined types
let arg1 = args.get(0).as_str();
my_udf(self.0, arg1, arg2, arg3)
}
}
fn my_udf(a: Option<&str>, b: f64, c: &str) -> Option<i32> {
}
}
The work would be entirely in the proc macro and would just desugar to our current traits. Some way to define >1 function signature would also be cool, but I don't quite know how to combine them together without having them in the same block
Metadata
Metadata
Assignees
Labels
No labels