#![cfg_attr(docsrs, feature(doc_cfg))]
#![allow(
clippy::needless_pass_by_value,
clippy::too_many_lines,
reason = "proc-macro expansion code is naturally long and passes syn trees by value"
)]
mod active_enum;
mod attrs;
mod entity;
mod from_query_result;
mod iden;
mod into_active_model;
mod partial_model;
mod relation;
use proc_macro::TokenStream;
#[proc_macro_derive(DeriveEntityModel, attributes(turso))]
pub fn derive_entity_model(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
entity::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(DeriveRelation, attributes(turso))]
pub fn derive_relation(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
relation::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(DeriveIden, attributes(turso))]
pub fn derive_iden(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
iden::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(FromQueryResult, attributes(turso))]
pub fn derive_from_query_result(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
from_query_result::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(DeriveActiveEnum, attributes(turso))]
pub fn derive_active_enum(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
active_enum::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(DerivePartialModel, attributes(turso))]
pub fn derive_partial_model(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
partial_model::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(DeriveIntoActiveModel, attributes(turso))]
pub fn derive_into_active_model(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
into_active_model::expand(input)
.unwrap_or_else(syn::Error::into_compile_error)
.into()
}
#[proc_macro_derive(DeriveMigrationName)]
pub fn derive_migration_name(input: TokenStream) -> TokenStream {
let input = syn::parse_macro_input!(input as syn::DeriveInput);
let ident = input.ident;
quote::quote! {
impl ::turso_orm_migration::MigrationName for #ident {
fn name(&self) -> &str {
let path = module_path!();
path.rsplit("::").next().unwrap_or(path)
}
}
}
.into()
}