diesel-crud-codegen 0.0.2

diesel-crud-codegen
Documentation
#![crate_type = "proc-macro"]
#![recursion_limit = "1024"]
#![deny(warnings, missing_copy_implementations)]
#![allow(clippy::needless_pass_by_value, clippy::option_map_unwrap_or_else, clippy::option_map_unwrap_or)]
#![warn(
    clippy::wrong_pub_self_convention,
    clippy::mut_mut,
    clippy::non_ascii_literal,
    clippy::similar_names,
    clippy::unicode_not_nfc,
    clippy::if_not_else,
    clippy::items_after_statements,
    clippy::used_underscore_binding
)]

#[macro_use]
extern crate darling;
extern crate proc_macro;
extern crate proc_macro2;
#[macro_use]
extern crate quote;
#[macro_use]
extern crate syn;

use darling::FromDeriveInput;

mod crud;
mod field;
mod macros;
mod opts;
mod utils;
mod view;

#[doc(hidden)]
#[proc_macro_derive(Creatable, attributes(crud))]
pub fn derive_crud_creatable(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) error");
    let table_name = utils::get_struct_attribute(&ast.attrs, "table_name").expect("table_name attribute not found!");
    let builder = crud::create::parse(opt, table_name);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(Updatable, attributes(crud))]
pub fn derive_crud_updatable(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) error");
    let table_name = utils::get_struct_attribute(&ast.attrs, "table_name").expect("table_name attribute not found!");
    let builder = crud::update::parse(opt, table_name);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(Deletable, attributes(crud))]
pub fn derive_crud_deletable(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) error");
    let table_name = utils::get_struct_attribute(&ast.attrs, "table_name").expect("table_name attribute not found!");
    let builder = crud::delete::parse(opt, table_name);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(Retrievable, attributes(crud))]
pub fn derive_crud_retrievable(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) error");
    let builder = crud::retrieve::parse(opt);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(SimpleListable, attributes(crud))]
pub fn derive_crud_simple_listable(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) error");
    let table_name = utils::get_struct_attribute(&ast.attrs, "table_name").expect("table_name attribute not found!");
    let builder = crud::simple_list::parse(opt, table_name);
    quote!(#builder).into()
}

#[proc_macro_derive(AddtionalCountModel, attributes(crud))]
pub fn model_crud_additional_count_model(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::ModelStructOpts::from_derive_input(&ast) error");
    let table_name = utils::get_struct_attribute(&ast.attrs, "table_name").expect("table_name attribute not found!");
    let builder = crud::additional_count_model::parse(opt, table_name);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(VDeletable, attributes(view))]
pub fn derive_view_delete(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ViewStructOpts::from_derive_input(&ast).expect("opts::ViewStructOpts::from_derive_input(&ast) error");
    let builder = view::delete::parse(opt);
    quote!(#builder).into()
}

#[proc_macro_derive(VCreatable, attributes(view))]
pub fn derive_view_create(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ViewStructOpts::from_derive_input(&ast).expect("opts::ViewStructOpts::from_derive_input(&ast) error");
    let builder = view::create::parse(opt);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(VUpdatable, attributes(view))]
pub fn derive_view_update(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ViewStructOpts::from_derive_input(&ast).expect("opts::ViewStructOpts::from_derive_input(&ast) error");
    let builder = view::update::parse(opt);
    quote!(#builder).into()
}

#[doc(hidden)]
#[proc_macro_derive(VRetrievable, attributes(view))]
pub fn derive_view_query(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ViewStructOpts::from_derive_input(&ast).expect("opts::ViewStructOpts::from_derive_input(&ast) error");
    let builder = view::retrieve::parse(opt);
    quote!(#builder).into()
}

#[proc_macro_attribute]
pub fn queryable_by_name(_args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) diesel_queryable_by_name error");
    let (add_count_field, generate_count_struct) = (false, false);
    let builder = macros::diesel_queryable_by_name::parse(opt, add_count_field, generate_count_struct);
    quote!(#builder).into()
}

#[proc_macro_attribute]
pub fn queryable_by_name_and_generate_count_model(_args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) diesel_queryable_by_name_and_generate_count_model error");
    let (add_count_field, generate_count_struct) = (false, true);
    let builder = macros::diesel_queryable_by_name::parse(opt, add_count_field, generate_count_struct);
    quote!(#builder).into()
}

#[proc_macro_attribute]
pub fn queryable_by_name_and_add_count_field(_args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let ast = parse_macro_input!(input as syn::DeriveInput);
    let opt = opts::ModelStructOpts::from_derive_input(&ast).expect("opts::opts::ModelStructOpts::from_derive_input(&ast) diesel_queryable_by_name_and_generate_count_model error");
    let (add_count_field, generate_count_struct) = (true, false);
    let builder = macros::diesel_queryable_by_name::parse(opt, add_count_field, generate_count_struct);
    quote!(#builder).into()
}