Refactor ActiveModelTrait

This commit is contained in:
Chris Tsang 2021-06-02 22:35:17 +08:00
parent a746f8b863
commit 2169d1284f
5 changed files with 17 additions and 20 deletions

View File

@ -36,8 +36,6 @@ pub fn expand_derive_active_model(ident: Ident, data: Data) -> syn::Result<Token
#(pub #field: sea_orm::ActiveValue<#ty>),* #(pub #field: sea_orm::ActiveValue<#ty>),*
} }
impl sea_orm::ActiveModelOf<Entity> for ActiveModel {}
impl From<#ident> for ActiveModel { impl From<#ident> for ActiveModel {
fn from(m: #ident) -> Self { fn from(m: #ident) -> Self {
Self { Self {

View File

@ -44,12 +44,6 @@ where
ActiveValue::unchanged(value) ActiveValue::unchanged(value)
} }
pub trait ActiveModelOf<E>
where
E: EntityTrait,
{
}
pub trait ActiveModelTrait: Clone + Debug + Default { pub trait ActiveModelTrait: Clone + Debug + Default {
type Entity: EntityTrait; type Entity: EntityTrait;

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
ActiveModelOf, ActiveModelTrait, ColumnTrait, FromQueryResult, Insert, ModelTrait, ActiveModelTrait, ColumnTrait, FromQueryResult, Insert, ModelTrait,
OneOrManyActiveModel, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, RelationBuilder, OneOrManyActiveModel, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, RelationBuilder,
RelationTrait, RelationType, Select, RelationTrait, RelationType, Select,
}; };
@ -98,7 +98,7 @@ pub trait EntityTrait: EntityName {
fn insert<A, C>(models: C) -> Insert<A> fn insert<A, C>(models: C) -> Insert<A>
where where
A: ActiveModelTrait + ActiveModelOf<Self>, A: ActiveModelTrait<Entity = Self>,
C: OneOrManyActiveModel<A>, C: OneOrManyActiveModel<A>,
{ {
if C::is_one() { if C::is_one() {
@ -112,14 +112,14 @@ pub trait EntityTrait: EntityName {
fn insert_one<A>(model: A) -> Insert<A> fn insert_one<A>(model: A) -> Insert<A>
where where
A: ActiveModelTrait + ActiveModelOf<Self>, A: ActiveModelTrait<Entity = Self>,
{ {
Insert::new().one(model) Insert::new().one(model)
} }
fn insert_many<A, I>(models: I) -> Insert<A> fn insert_many<A, I>(models: I) -> Insert<A>
where where
A: ActiveModelTrait + ActiveModelOf<Self>, A: ActiveModelTrait<Entity = Self>,
I: IntoIterator<Item = A>, I: IntoIterator<Item = A>,
{ {
Insert::new().many(models) Insert::new().many(models)

View File

@ -1,5 +1,5 @@
pub use crate::{ pub use crate::{
ActiveModelOf, ActiveModelTrait, ColumnTrait, ColumnType, DeriveActiveModel, DeriveColumn, ActiveModelTrait, ColumnTrait, ColumnType, DeriveActiveModel, DeriveColumn,
DeriveEntity, DeriveModel, DerivePrimaryKey, EntityName, EntityTrait, EnumIter, Iden, DeriveEntity, DeriveModel, DerivePrimaryKey, EntityName, EntityTrait, EnumIter, Iden,
IdenStatic, ModelTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, QueryResult, Related, IdenStatic, ModelTrait, PrimaryKeyToColumn, PrimaryKeyTrait, QueryFilter, QueryResult, Related,
RelationDef, RelationTrait, Select, TypeErr, Value, RelationDef, RelationTrait, Select, TypeErr, Value,

View File

@ -1,4 +1,4 @@
use crate::{ActiveModelOf, ActiveModelTrait, EntityTrait, Iterable, QueryTrait}; use crate::{ActiveModelTrait, EntityTrait, Iterable, QueryTrait};
use core::marker::PhantomData; use core::marker::PhantomData;
use sea_query::{InsertStatement, IntoIden}; use sea_query::{InsertStatement, IntoIden};
@ -12,18 +12,23 @@ where
pub(crate) model: PhantomData<A>, pub(crate) model: PhantomData<A>,
} }
impl<A> Default for Insert<A>
where
A: ActiveModelTrait
{
fn default() -> Self {
Self::new()
}
}
impl<A> Insert<A> impl<A> Insert<A>
where where
A: ActiveModelTrait, A: ActiveModelTrait,
{ {
pub fn new<E>() -> Self pub fn new() -> Self {
where
E: EntityTrait,
A: ActiveModelOf<E>,
{
Self { Self {
query: InsertStatement::new() query: InsertStatement::new()
.into_table(E::default().into_iden()) .into_table(A::Entity::default().into_iden())
.to_owned(), .to_owned(),
columns: Vec::new(), columns: Vec::new(),
model: PhantomData, model: PhantomData,