worktable_macros 0.9.0

Proc-macro companion crate for worktable: the worktable! macro and its derives. Formerly published as worktable_codegen.
Documentation
use crate::common::name_generator::WorktableNameGenerator;
use crate::generators::in_memory::InMemoryGenerator;
use proc_macro2::TokenStream;
use quote::quote;

impl InMemoryGenerator {
    pub fn gen_query_select_impl(&mut self) -> syn::Result<TokenStream> {
        let select_all = self.gen_select_all();

        let name_generator = WorktableNameGenerator::from_table_name(self.name.to_string());
        let table_ident = name_generator.get_work_table_ident();

        Ok(quote! {
            impl #table_ident {
                #select_all
            }
        })
    }

    fn gen_select_all(&mut self) -> TokenStream {
        let name_generator = WorktableNameGenerator::from_table_name(self.name.to_string());
        let row_ident = name_generator.get_row_type_ident();
        let column_range_type = name_generator.get_column_range_type_ident();
        let row_fields_ident = name_generator.get_row_fields_enum_ident();

        quote! {
            pub fn select_all(&self) -> SelectQueryBuilder<#row_ident,
                                                           impl DoubleEndedIterator<Item = #row_ident> + '_ + Sized,
                                                           #column_range_type,
                                                           #row_fields_ident>
            {
                let iter = self.0.primary_index.pk_map
                    .iter()
                    .filter_map(|(_, link)| self.0.data.select_non_ghosted(link.0).ok());

                SelectQueryBuilder::new(iter)
            }
        }
    }
}