Custom column names with default
This commit is contained in:
parent
8b30ef74a2
commit
69b0ae1177
@ -3,7 +3,7 @@ use proc_macro2::{Ident, TokenStream};
|
|||||||
use quote::{quote, quote_spanned};
|
use quote::{quote, quote_spanned};
|
||||||
use syn::{Data, DataEnum, Fields, Variant};
|
use syn::{Data, DataEnum, Fields, Variant};
|
||||||
|
|
||||||
pub fn expand_derive_column(ident: &Ident, data: &Data) -> syn::Result<TokenStream> {
|
pub fn impl_default_as_str(ident: &Ident, data: &Data) -> syn::Result<TokenStream> {
|
||||||
let variants = match data {
|
let variants = match data {
|
||||||
syn::Data::Enum(DataEnum { variants, .. }) => variants,
|
syn::Data::Enum(DataEnum { variants, .. }) => variants,
|
||||||
_ => {
|
_ => {
|
||||||
@ -30,13 +30,9 @@ pub fn expand_derive_column(ident: &Ident, data: &Data) -> syn::Result<TokenStre
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let impl_iden = expand_derive_custom_column(ident)?;
|
|
||||||
|
|
||||||
Ok(quote!(
|
Ok(quote!(
|
||||||
#impl_iden
|
impl #ident {
|
||||||
|
fn default_as_str(&self) -> &str {
|
||||||
impl sea_orm::IdenStatic for #ident {
|
|
||||||
fn as_str(&self) -> &str {
|
|
||||||
match self {
|
match self {
|
||||||
#(Self::#variant => #name),*
|
#(Self::#variant => #name),*
|
||||||
}
|
}
|
||||||
@ -45,8 +41,26 @@ pub fn expand_derive_column(ident: &Ident, data: &Data) -> syn::Result<TokenStre
|
|||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expand_derive_custom_column(ident: &Ident) -> syn::Result<TokenStream> {
|
pub fn expand_derive_column(ident: &Ident, data: &Data) -> syn::Result<TokenStream> {
|
||||||
|
let impl_iden = expand_derive_custom_column(ident, data)?;
|
||||||
|
|
||||||
Ok(quote!(
|
Ok(quote!(
|
||||||
|
#impl_iden
|
||||||
|
|
||||||
|
impl sea_orm::IdenStatic for #ident {
|
||||||
|
fn as_str(&self) -> &str {
|
||||||
|
self.default_as_str()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn expand_derive_custom_column(ident: &Ident, data: &Data) -> syn::Result<TokenStream> {
|
||||||
|
let impl_default_as_str = impl_default_as_str(ident, data)?;
|
||||||
|
|
||||||
|
Ok(quote!(
|
||||||
|
#impl_default_as_str
|
||||||
|
|
||||||
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) {
|
||||||
write!(s, "{}", self.as_str()).unwrap();
|
write!(s, "{}", self.as_str()).unwrap();
|
||||||
|
@ -37,9 +37,9 @@ pub fn derive_column(input: TokenStream) -> TokenStream {
|
|||||||
|
|
||||||
#[proc_macro_derive(DeriveCustomColumn)]
|
#[proc_macro_derive(DeriveCustomColumn)]
|
||||||
pub fn derive_custom_column(input: TokenStream) -> TokenStream {
|
pub fn derive_custom_column(input: TokenStream) -> TokenStream {
|
||||||
let DeriveInput { ident, .. } = parse_macro_input!(input);
|
let DeriveInput { ident, data, .. } = parse_macro_input!(input);
|
||||||
|
|
||||||
match derives::expand_derive_custom_column(&ident) {
|
match derives::expand_derive_custom_column(&ident, &data) {
|
||||||
Ok(ts) => ts.into(),
|
Ok(ts) => ts.into(),
|
||||||
Err(e) => e.to_compile_error().into(),
|
Err(e) => e.to_compile_error().into(),
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,10 @@ pub enum Column {
|
|||||||
impl IdenStatic for Column {
|
impl IdenStatic for Column {
|
||||||
fn as_str(&self) -> &str {
|
fn as_str(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
|
// Override column names
|
||||||
Self::Id => "id",
|
Self::Id => "id",
|
||||||
Self::Name => "name",
|
// Leave all other columns using default snake-case values
|
||||||
|
_ => self.default_as_str(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user