From a45c44cfc5e1c0741967fb2e40aa2648bea92e58 Mon Sep 17 00:00:00 2001 From: Billy Chan Date: Fri, 17 Sep 2021 11:23:32 +0800 Subject: [PATCH] Add cake_expanded entity file for docs demo --- src/tests_cfg/cake_expanded.rs | 94 ++++++++++++++++++++++++++++++++++ src/tests_cfg/fruit.rs | 12 +++++ src/tests_cfg/mod.rs | 2 + 3 files changed, 108 insertions(+) create mode 100644 src/tests_cfg/cake_expanded.rs diff --git a/src/tests_cfg/cake_expanded.rs b/src/tests_cfg/cake_expanded.rs new file mode 100644 index 00000000..0eeb0738 --- /dev/null +++ b/src/tests_cfg/cake_expanded.rs @@ -0,0 +1,94 @@ +use crate as sea_orm; +use crate::entity::prelude::*; + +#[derive(Copy, Clone, Default, Debug, DeriveEntity)] +pub struct Entity; + +impl EntityName for Entity { + fn table_name(&self) -> &str { + "cake" + } +} + +#[derive(Clone, Debug, PartialEq, DeriveModel, DeriveActiveModel)] +pub struct Model { + pub id: i32, + pub name: String, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveColumn)] +pub enum Column { + Id, + Name, +} + +#[derive(Copy, Clone, Debug, EnumIter, DerivePrimaryKey)] +pub enum PrimaryKey { + Id, +} + +impl PrimaryKeyTrait for PrimaryKey { + type ValueType = i32; + + fn auto_increment() -> bool { + true + } +} + +#[derive(Copy, Clone, Debug, EnumIter)] +pub enum Relation { + Fruit, +} + +impl ColumnTrait for Column { + type EntityName = Entity; + + fn def(&self) -> ColumnDef { + match self { + Self::Id => ColumnType::Integer.def(), + Self::Name => ColumnType::String(None).def(), + } + } +} + +impl RelationTrait for Relation { + fn def(&self) -> RelationDef { + match self { + Self::Fruit => Entity::has_many(super::fruit::Entity).into(), + } + } +} + +impl Related for Entity { + fn to() -> RelationDef { + Relation::Fruit.def() + } +} + +impl Related for Entity { + fn to() -> RelationDef { + super::cake_filling::Relation::Filling.def() + } + + fn via() -> Option { + Some(super::cake_filling::Relation::Cake.def().rev()) + } +} + +#[derive(Debug)] +pub struct CakeToFilling; + +impl Linked for CakeToFilling { + type FromEntity = Entity; + + type ToEntity = super::filling::Entity; + + fn link(&self) -> Vec { + vec![ + super::cake_filling::Relation::Cake.def().rev(), + super::cake_filling::Relation::Filling.def(), + ] + } +} + +impl ActiveModelBehavior for ActiveModel {} diff --git a/src/tests_cfg/fruit.rs b/src/tests_cfg/fruit.rs index 390f502a..166820a2 100644 --- a/src/tests_cfg/fruit.rs +++ b/src/tests_cfg/fruit.rs @@ -18,6 +18,12 @@ pub enum Relation { to = "super::cake::Column::Id" )] Cake, + #[sea_orm( + belongs_to = "super::cake_expanded::Entity", + from = "Column::CakeId", + to = "super::cake_expanded::Column::Id" + )] + CakeExpanded, } impl Related for Entity { @@ -26,4 +32,10 @@ impl Related for Entity { } } +impl Related for Entity { + fn to() -> RelationDef { + Relation::CakeExpanded.def() + } +} + impl ActiveModelBehavior for ActiveModel {} diff --git a/src/tests_cfg/mod.rs b/src/tests_cfg/mod.rs index afb9e115..81d553ac 100644 --- a/src/tests_cfg/mod.rs +++ b/src/tests_cfg/mod.rs @@ -1,12 +1,14 @@ //! Configurations for test cases and examples. Not intended for actual use. pub mod cake; +pub mod cake_expanded; pub mod cake_filling; pub mod cake_filling_price; pub mod filling; pub mod fruit; pub use cake::Entity as Cake; +pub use cake_expanded::Entity as CakeExpanded; pub use cake_filling::Entity as CakeFilling; pub use cake_filling_price::Entity as CakeFillingPrice; pub use filling::Entity as Filling;