Customize column names
This commit is contained in:
parent
106d38d20b
commit
8b30ef74a2
@ -33,7 +33,7 @@ chrono = { version = "^0", optional = true }
|
|||||||
futures = { version = "^0.3" }
|
futures = { version = "^0.3" }
|
||||||
futures-util = { version = "^0.3" }
|
futures-util = { version = "^0.3" }
|
||||||
rust_decimal = { version = "^1", optional = true }
|
rust_decimal = { version = "^1", optional = true }
|
||||||
sea-orm-macros = { version = "^0.1", optional = true }
|
sea-orm-macros = { version = "^0.1", path = "sea-orm-macros", optional = true }
|
||||||
sea-query = { version = "^0.12.8" }
|
sea-query = { version = "^0.12.8" }
|
||||||
sea-strum = { version = "^0.21", features = ["derive", "sea-orm"] }
|
sea-strum = { version = "^0.21", features = ["derive", "sea-orm"] }
|
||||||
serde = { version = "^1.0", features = ["derive"] }
|
serde = { version = "^1.0", features = ["derive"] }
|
||||||
|
@ -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 expand_derive_column(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,12 +30,10 @@ pub fn expand_derive_column(ident: Ident, data: Data) -> syn::Result<TokenStream
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
|
let impl_iden = expand_derive_custom_column(ident)?;
|
||||||
|
|
||||||
Ok(quote!(
|
Ok(quote!(
|
||||||
impl sea_orm::Iden for #ident {
|
#impl_iden
|
||||||
fn unquoted(&self, s: &mut dyn std::fmt::Write) {
|
|
||||||
write!(s, "{}", self.as_str()).unwrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl sea_orm::IdenStatic for #ident {
|
impl sea_orm::IdenStatic for #ident {
|
||||||
fn as_str(&self) -> &str {
|
fn as_str(&self) -> &str {
|
||||||
@ -46,3 +44,13 @@ pub fn expand_derive_column(ident: Ident, data: Data) -> syn::Result<TokenStream
|
|||||||
}
|
}
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn expand_derive_custom_column(ident: &Ident) -> syn::Result<TokenStream> {
|
||||||
|
Ok(quote!(
|
||||||
|
impl sea_orm::Iden for #ident {
|
||||||
|
fn unquoted(&self, s: &mut dyn std::fmt::Write) {
|
||||||
|
write!(s, "{}", self.as_str()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
))
|
||||||
|
}
|
||||||
|
@ -29,7 +29,17 @@ pub fn derive_primary_key(input: TokenStream) -> TokenStream {
|
|||||||
pub fn derive_column(input: TokenStream) -> TokenStream {
|
pub fn derive_column(input: TokenStream) -> TokenStream {
|
||||||
let DeriveInput { ident, data, .. } = parse_macro_input!(input);
|
let DeriveInput { ident, data, .. } = parse_macro_input!(input);
|
||||||
|
|
||||||
match derives::expand_derive_column(ident, data) {
|
match derives::expand_derive_column(&ident, &data) {
|
||||||
|
Ok(ts) => ts.into(),
|
||||||
|
Err(e) => e.to_compile_error().into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[proc_macro_derive(DeriveCustomColumn)]
|
||||||
|
pub fn derive_custom_column(input: TokenStream) -> TokenStream {
|
||||||
|
let DeriveInput { ident, .. } = parse_macro_input!(input);
|
||||||
|
|
||||||
|
match derives::expand_derive_custom_column(&ident) {
|
||||||
Ok(ts) => ts.into(),
|
Ok(ts) => ts.into(),
|
||||||
Err(e) => e.to_compile_error().into(),
|
Err(e) => e.to_compile_error().into(),
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
pub use crate::{
|
pub use crate::{
|
||||||
error::*, ActiveModelBehavior, ActiveModelTrait, ColumnDef, ColumnTrait, ColumnType,
|
error::*, ActiveModelBehavior, ActiveModelTrait, ColumnDef, ColumnTrait, ColumnType,
|
||||||
DeriveActiveModel, DeriveActiveModelBehavior, DeriveColumn, DeriveEntity, DeriveModel,
|
DeriveActiveModel, DeriveActiveModelBehavior, DeriveColumn, DeriveCustomColumn, DeriveEntity,
|
||||||
DerivePrimaryKey, EntityName, EntityTrait, EnumIter, Iden, IdenStatic, ModelTrait,
|
DeriveModel, DerivePrimaryKey, EntityName, EntityTrait, EnumIter, Iden, IdenStatic, ModelTrait,
|
||||||
PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, QueryResult, Related, RelationDef,
|
PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, QueryResult, Related, RelationDef,
|
||||||
RelationTrait, Select, Value,
|
RelationTrait, Select, Value,
|
||||||
};
|
};
|
||||||
|
@ -219,8 +219,8 @@ pub use executor::*;
|
|||||||
pub use query::*;
|
pub use query::*;
|
||||||
|
|
||||||
pub use sea_orm_macros::{
|
pub use sea_orm_macros::{
|
||||||
DeriveActiveModel, DeriveActiveModelBehavior, DeriveColumn, DeriveEntity, DeriveModel,
|
DeriveActiveModel, DeriveActiveModelBehavior, DeriveColumn, DeriveCustomColumn, DeriveEntity,
|
||||||
DerivePrimaryKey, FromQueryResult,
|
DeriveModel, DerivePrimaryKey, FromQueryResult,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub use sea_query;
|
pub use sea_query;
|
||||||
|
@ -16,12 +16,23 @@ pub struct Model {
|
|||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)]
|
// If your column names are not in snake-case, derive `DeriveCustomColumn` here.
|
||||||
|
#[derive(Copy, Clone, Debug, EnumIter, DeriveCustomColumn)]
|
||||||
pub enum Column {
|
pub enum Column {
|
||||||
Id,
|
Id,
|
||||||
Name,
|
Name,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Then, customize each column names here.
|
||||||
|
impl IdenStatic for Column {
|
||||||
|
fn as_str(&self) -> &str {
|
||||||
|
match self {
|
||||||
|
Self::Id => "id",
|
||||||
|
Self::Name => "name",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, EnumIter, DerivePrimaryKey)]
|
#[derive(Copy, Clone, Debug, EnumIter, DerivePrimaryKey)]
|
||||||
pub enum PrimaryKey {
|
pub enum PrimaryKey {
|
||||||
Id,
|
Id,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user