first attempt at parsing multiple rows

main
Ashelyn Dawn 5 months ago committed by Ashelyn Rose
parent f95e31f140
commit 20f4210360
No known key found for this signature in database
GPG Key ID: D1980B8C6F349BC1

@ -102,18 +102,37 @@ fn generate_parse_object(
fn generate_parse_vec(inner_type: Box<TypeMapping>) -> proc_macro2::TokenStream {
let value_expression = generate_parse_expression(&*inner_type);
let extract_comparitor = match *inner_type {
TypeMapping::Vec(_) => panic!("Ambiguous data structure: Cannot parse vec of vec"),
TypeMapping::Column(_) => quote! { &current_row_value },
// TODO: Parse ID column from the return type declaration
TypeMapping::Object { struct_name: _, properties: _ } => quote! { &current_row_value.uuid },
};
quote! {
{
let mut parse_closure = || -> joinrs::anyhow::Result<_> {
let mut vec = Vec::new();
let parse_result = #value_expression;
let mut previous_comparison = None;
while let Some(_next) = rows.peek() {
let current_row_value = #value_expression?;
let current_row_comparison = #extract_comparitor;
if let Ok(value) = parse_result {
vec.push(value);
vec.push(current_row_value);
if previous_comparison.is_some() && *previous_comparison.unwrap() != *current_row_comparison {
break
}
rows.next();
previous_comparison = Some(current_row_comparison.clone());
}
Ok(vec)
};
parse_closure()
}
}

Loading…
Cancel
Save