taitan-orm-parser 0.1.12

Next Generation ORM based on sqlx
Documentation
use crate::FieldDef;
use proc_macro2::TokenStream;
use quote::{format_ident, quote};

#[derive(Clone, Debug, Default)]
pub struct ArgsMapper;

impl ArgsMapper {
    pub fn map_add_to_args(&self, field: &FieldDef) -> TokenStream {
        let field_name = &field.struct_field.get_name();
        let field_ident = format_ident!("{}", field_name);
        if field.struct_field.is_option() {
            if field.struct_field.is_location_expr {
                quote! {
                    if let Some(f) =  &self.#field_ident {
                        sqlx::Arguments::add(args, &f.val)?
                    }
                }
            } else {
                quote! {
                    if let Some(f) =  &self.#field_ident {
                        sqlx::Arguments::add(args, f)?
                    }
                }
            }
        } else {
            if field.struct_field.is_location_expr {
                quote! {
                    sqlx::Arguments::add(args, &self.#field_ident.val)?
                }
            } else {
                quote! {
                    sqlx::Arguments::add(args, &self.#field_ident)?
                }
            }
        }
    }

    pub fn map_enum_add_to_args(&self, field: &FieldDef) -> TokenStream {
        let field_name = &field.struct_field.get_name();
        let field_ident = format_ident!("{}", field_name);
        if field.struct_field.is_location_expr {
            quote! {
                sqlx::Arguments::add(args, &#field_ident.val)?
            }
        } else {
            quote! {
                sqlx::Arguments::add(args, #field_ident)?
            }
        }

    }
}