worktable_macros 0.9.0

Proc-macro companion crate for worktable: the worktable! macro and its derives. Formerly published as worktable_codegen.
Documentation
mod index;
mod locks;
mod primary_key;
mod queries;
mod row;
mod table;
mod wrapper;

use proc_macro2::Ident;
use quote::quote;

use crate::common::model::Columns;

pub struct ReadOnlyGenerator {
    pub name: Ident,
    pub columns: Columns,
    pub pk: Option<crate::common::model::PrimaryKey>,
    pub version: u32,
}

impl ReadOnlyGenerator {
    pub fn new(name: Ident, columns: Columns, version: u32) -> Self {
        Self {
            name,
            columns,
            pk: None,
            version,
        }
    }
}

pub fn expand(
    name: proc_macro2::Ident,
    columns: crate::common::model::Columns,
    version: u32,
) -> syn::Result<proc_macro2::TokenStream> {
    let mut generator = ReadOnlyGenerator::new(name, columns, version);

    let pk_def = generator.gen_primary_key_def()?;
    let row_def = generator.gen_row_def();
    let query_available_def = generator.gen_available_types_def()?;
    let wrapper_def = generator.gen_wrapper_def();
    let locks_def = generator.gen_locks_def();
    let index_def = generator.gen_index_def()?;
    let table_def = generator.gen_table_def()?;
    let select_impls = generator.gen_query_select_impl()?;

    Ok(quote! {
        #pk_def
        #row_def
        #query_available_def
        #wrapper_def
        #locks_def
        #index_def
        #table_def
        #select_impls
    })
}