Update DerivePrimaryKey
This commit is contained in:
parent
f79a417150
commit
4f090d192b
@ -1,7 +1,7 @@
|
|||||||
use heck::SnakeCase;
|
use heck::SnakeCase;
|
||||||
use proc_macro2::{Ident, TokenStream};
|
use proc_macro2::{Ident, TokenStream};
|
||||||
use quote::{quote, quote_spanned};
|
use quote::{quote, quote_spanned, ToTokens};
|
||||||
use syn::{Data, DataEnum, Fields, Variant};
|
use syn::{punctuated::Punctuated, token::Comma, Data, DataEnum, Fields, Variant};
|
||||||
|
|
||||||
pub fn expand_derive_primary_key(ident: Ident, data: Data) -> syn::Result<TokenStream> {
|
pub fn expand_derive_primary_key(ident: Ident, data: Data) -> syn::Result<TokenStream> {
|
||||||
let variants = match data {
|
let variants = match data {
|
||||||
@ -30,6 +30,21 @@ pub fn expand_derive_primary_key(ident: Ident, data: Data) -> syn::Result<TokenS
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
let primary_key_value: Punctuated<_, Comma> =
|
||||||
|
variants.iter().fold(Punctuated::new(), |mut acc, v| {
|
||||||
|
let variant = &v.ident;
|
||||||
|
acc.push(
|
||||||
|
quote! { active_model.take(#ident::#variant.into_column()).unwrap().unwrap() },
|
||||||
|
);
|
||||||
|
acc
|
||||||
|
});
|
||||||
|
let mut primary_key_value = primary_key_value.to_token_stream();
|
||||||
|
if variants.len() > 1 {
|
||||||
|
primary_key_value = quote! {
|
||||||
|
(#primary_key_value)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
Ok(quote!(
|
Ok(quote!(
|
||||||
impl sea_orm::Iden for #ident {
|
impl sea_orm::Iden for #ident {
|
||||||
fn unquoted(&self, s: &mut dyn std::fmt::Write) {
|
fn unquoted(&self, s: &mut dyn std::fmt::Write) {
|
||||||
@ -61,5 +76,16 @@ pub fn expand_derive_primary_key(ident: Ident, data: Data) -> syn::Result<TokenS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PrimaryKeyValue<Entity> for #ident {
|
||||||
|
fn get_primary_key_value<A>(
|
||||||
|
mut active_model: A,
|
||||||
|
) -> <<Entity as EntityTrait>::PrimaryKey as PrimaryKeyTrait>::ValueType
|
||||||
|
where
|
||||||
|
A: ActiveModelTrait<Entity = Entity>,
|
||||||
|
{
|
||||||
|
#primary_key_value
|
||||||
|
}
|
||||||
|
}
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user