Associate ActiveModel to EntityTrait

This commit is contained in:
Chris Tsang 2024-04-03 21:14:22 +01:00
parent 785a9faecf
commit 1c269a081f
3 changed files with 13 additions and 3 deletions

View File

@ -7,6 +7,7 @@ pub mod derive_attr {
pub column: Option<syn::Ident>, pub column: Option<syn::Ident>,
pub entity: Option<syn::Ident>, pub entity: Option<syn::Ident>,
pub model: Option<syn::Ident>, pub model: Option<syn::Ident>,
pub active_model: Option<syn::Ident>,
pub primary_key: Option<syn::Ident>, pub primary_key: Option<syn::Ident>,
pub relation: Option<syn::Ident>, pub relation: Option<syn::Ident>,
pub schema_name: Option<syn::Lit>, pub schema_name: Option<syn::Lit>,

View File

@ -9,6 +9,7 @@ struct DeriveEntity {
column_ident: syn::Ident, column_ident: syn::Ident,
ident: syn::Ident, ident: syn::Ident,
model_ident: syn::Ident, model_ident: syn::Ident,
active_model_ident: syn::Ident,
primary_key_ident: syn::Ident, primary_key_ident: syn::Ident,
relation_ident: syn::Ident, relation_ident: syn::Ident,
schema_name: Option<syn::Lit>, schema_name: Option<syn::Lit>,
@ -22,6 +23,7 @@ impl DeriveEntity {
let ident = input.ident; let ident = input.ident;
let column_ident = sea_attr.column.unwrap_or_else(|| format_ident!("Column")); let column_ident = sea_attr.column.unwrap_or_else(|| format_ident!("Column"));
let model_ident = sea_attr.model.unwrap_or_else(|| format_ident!("Model")); let model_ident = sea_attr.model.unwrap_or_else(|| format_ident!("Model"));
let active_model_ident = sea_attr.active_model.unwrap_or_else(|| format_ident!("ActiveModel"));
let primary_key_ident = sea_attr let primary_key_ident = sea_attr
.primary_key .primary_key
.unwrap_or_else(|| format_ident!("PrimaryKey")); .unwrap_or_else(|| format_ident!("PrimaryKey"));
@ -36,6 +38,7 @@ impl DeriveEntity {
column_ident, column_ident,
ident, ident,
model_ident, model_ident,
active_model_ident,
primary_key_ident, primary_key_ident,
relation_ident, relation_ident,
schema_name, schema_name,
@ -87,6 +90,7 @@ impl DeriveEntity {
let Self { let Self {
ident, ident,
model_ident, model_ident,
active_model_ident,
column_ident, column_ident,
primary_key_ident, primary_key_ident,
relation_ident, relation_ident,
@ -98,6 +102,8 @@ impl DeriveEntity {
impl sea_orm::entity::EntityTrait for #ident { impl sea_orm::entity::EntityTrait for #ident {
type Model = #model_ident; type Model = #model_ident;
type ActiveModel = #active_model_ident;
type Column = #column_ident; type Column = #column_ident;
type PrimaryKey = #primary_key_ident; type PrimaryKey = #primary_key_ident;

View File

@ -1,7 +1,7 @@
use crate::{ use crate::{
ActiveModelTrait, ColumnTrait, Delete, DeleteMany, DeleteOne, FromQueryResult, Insert, ActiveModelBehavior, ActiveModelTrait, ColumnTrait, Delete, DeleteMany, DeleteOne,
ModelTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, Related, RelationBuilder, FromQueryResult, Insert, ModelTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, Related,
RelationTrait, RelationType, Select, Update, UpdateMany, UpdateOne, RelationBuilder, RelationTrait, RelationType, Select, Update, UpdateMany, UpdateOne,
}; };
use sea_query::{Alias, Iden, IntoIden, IntoTableRef, IntoValueTuple, TableRef}; use sea_query::{Alias, Iden, IntoIden, IntoTableRef, IntoValueTuple, TableRef};
use std::fmt::Debug; use std::fmt::Debug;
@ -58,6 +58,9 @@ pub trait EntityTrait: EntityName {
#[allow(missing_docs)] #[allow(missing_docs)]
type Model: ModelTrait<Entity = Self> + FromQueryResult; type Model: ModelTrait<Entity = Self> + FromQueryResult;
#[allow(missing_docs)]
type ActiveModel: ActiveModelBehavior<Entity = Self>;
#[allow(missing_docs)] #[allow(missing_docs)]
type Column: ColumnTrait; type Column: ColumnTrait;