sqlxgentools/lib/sqlxgentools_attrs/src/lib.rs

42 lines
1.4 KiB
Rust
Raw Normal View History

2024-12-27 23:00:38 +01:00
use proc_macro::TokenStream;
use quote::quote;
use syn::{DeriveInput, Fields, parse_macro_input};
2024-12-27 23:00:38 +01:00
#[proc_macro_attribute]
2024-12-28 19:56:04 +01:00
pub fn sql_generator_model(_attr: TokenStream, item: TokenStream) -> TokenStream {
2024-12-27 23:00:38 +01:00
item
}
#[proc_macro_derive(SqlGeneratorDerive, attributes(sql_generator_field))]
pub fn derive_sql_generator_model(_input: TokenStream) -> TokenStream {
2024-12-27 23:00:38 +01:00
TokenStream::new()
}
#[proc_macro_derive(SqlGeneratorModelWithId, attributes(sql_generator_field))]
pub fn derive_sql_generator_model_with_id(input: TokenStream) -> TokenStream {
let input = parse_macro_input!(input as DeriveInput);
let name = input.ident;
// Extract the fields of the struct
if let syn::Data::Struct(data) = input.data {
if let Fields::Named(fields) = data.fields {
for field in fields.named {
if field.ident.as_ref().map_or(false, |ident| ident == "id") {
let expanded = quote! {
impl DatabaseLine for #name {
fn id(&self) -> String {
self.id.clone()
}
}
};
return TokenStream::from(expanded);
}
}
}
}
// If `id` field is not found, return an error
panic!("Expected struct with a named field `id` of type String")
}
2024-12-27 23:00:38 +01:00