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 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 {
|
||||
syn::Data::Enum(DataEnum { variants, .. }) => variants,
|
||||
_ => {
|
||||
@ -30,13 +30,9 @@ pub fn expand_derive_column(ident: &Ident, data: &Data) -> syn::Result<TokenStre
|
||||
})
|
||||
.collect();
|
||||
|
||||
let impl_iden = expand_derive_custom_column(ident)?;
|
||||
|
||||
Ok(quote!(
|
||||
#impl_iden
|
||||
|
||||
impl sea_orm::IdenStatic for #ident {
|
||||
fn as_str(&self) -> &str {
|
||||
impl #ident {
|
||||
fn default_as_str(&self) -> &str {
|
||||
match self {
|
||||
#(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!(
|
||||
#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 {
|
||||
fn unquoted(&self, s: &mut dyn std::fmt::Write) {
|
||||
write!(s, "{}", self.as_str()).unwrap();
|
||||
|
@ -37,9 +37,9 @@ pub fn derive_column(input: TokenStream) -> TokenStream {
|
||||
|
||||
#[proc_macro_derive(DeriveCustomColumn)]
|
||||
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(),
|
||||
Err(e) => e.to_compile_error().into(),
|
||||
}
|
||||
|
@ -27,8 +27,10 @@ pub enum Column {
|
||||
impl IdenStatic for Column {
|
||||
fn as_str(&self) -> &str {
|
||||
match self {
|
||||
// Override column names
|
||||
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