Skip to content

Commit 3982fbd

Browse files
author
Yue
committed
Gets dynamic dispatch working for serialization.
1 parent b128ec1 commit 3982fbd

17 files changed

Lines changed: 121 additions & 76 deletions

migration/src/m20251122_212357_create_users_table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ impl MigrationTrait for Migration {
1111
Table::create()
1212
.table("users")
1313
.if_not_exists()
14-
.col(pk_uuid("id"))
14+
.col(pk_auto("id"))
1515
.col(string("username").unique_key())
1616
.col(binary("password"))
1717
.to_owned(),

migration/src/m20251124_040703_create_topics_table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ impl MigrationTrait for Migration {
1111
Table::create()
1212
.table("topics")
1313
.if_not_exists()
14-
.col(pk_uuid("id"))
14+
.col(pk_auto("id"))
1515
.col(string("title"))
1616
.col(string("description"))
1717
.to_owned(),

migration/src/m20251124_054355_seed_topics_table.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use sea_orm_migration::{prelude::*, schema::*};
1+
use sea_orm_migration::{prelude::*};
22

33
#[derive(DeriveMigrationName)]
44
pub struct Migration;
@@ -8,8 +8,26 @@ impl MigrationTrait for Migration {
88
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
99
let statement = Query::insert()
1010
.into_table("topics")
11-
.columns(["id", "title", "description"])
12-
.values_panic([0.into(), "memes".into(), "this is where the memes are".into()])
11+
.columns(["title", "description", "id"])
12+
.values_panic(["memes".into(), "this is where the memes are".into(), 0.into()])
13+
.to_owned();
14+
15+
manager.exec_stmt(statement).await?;
16+
17+
18+
let statement = Query::insert()
19+
.into_table("topics")
20+
.columns(["title", "description", "id"])
21+
.values_panic(["sad".into(), "this is where the sad are".into(), 1.into()])
22+
.to_owned();
23+
24+
manager.exec_stmt(statement).await?;
25+
26+
27+
let statement = Query::insert()
28+
.into_table("topics")
29+
.columns(["title", "description", "id"])
30+
.values_panic(["ponies".into(), "this is where the pony are".into(), 2.into()])
1331
.to_owned();
1432

1533
manager.exec_stmt(statement).await?;
@@ -19,6 +37,8 @@ impl MigrationTrait for Migration {
1937

2038
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
2139
let statement = Query::delete().from_table("topics").cond_where(Cond::any().add(Expr::col("id").eq(0))).to_owned();
40+
let statement = Query::delete().from_table("topics").cond_where(Cond::any().add(Expr::col("id").eq(1))).to_owned();
41+
let statement = Query::delete().from_table("topics").cond_where(Cond::any().add(Expr::col("id").eq(2))).to_owned();
2242

2343
manager.exec_stmt(statement).await?;
2444

src/database/entities/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.19
1+
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.19
22
33
pub mod prelude;
44

src/database/entities/prelude.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.19
1+
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.19
22
33
pub use super::topics::Entity as Topics;
44
pub use super::users::Entity as Users;

src/database/entities/topics.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.19
1+
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.19
22
33
use sea_orm::entity::prelude::*;
44
use serde::Serialize;
55

6-
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize)]
6+
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize)]
77
#[sea_orm(table_name = "topics")]
88
pub struct Model {
99
#[sea_orm(primary_key, auto_increment = false)]
10-
pub id: Uuid,
10+
pub id: i64,
1111
pub title: String,
1212
pub description: String,
1313
}

src/database/entities/users.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.19
1+
//! `SeaORM` Entity, @generated by sea-orm-codegen 2.0.0-rc.19
22
33
use sea_orm::entity::prelude::*;
44
use serde::Deserialize;
55

6-
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Deserialize)]
6+
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Deserialize)]
77
#[sea_orm(table_name = "users")]
88
pub struct Model {
99
#[sea_orm(primary_key, auto_increment = false)]
10-
pub id: Uuid,
10+
pub id: i64,
1111
#[sea_orm(unique)]
1212
pub username: String,
1313
#[sea_orm(column_type = "Binary(1)")]

src/routes/home.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
use std::{collections::HashMap};
2-
use rocket::response::content::RawHtml;
31
use crate::utilities::page::Render;
2+
use erased_serde::Serialize;
3+
use rocket::response::content::RawHtml;
4+
use std::sync::Mutex;
5+
46

57
#[get("/home")]
68
pub async fn home() -> RawHtml<String> {
7-
let mut environment = vec![];
9+
let mut environment = Vec::<(String, Mutex<Box<dyn Serialize + Send>>)>::new();
810

9-
let mut page_template = include_str!("../../views/home.template.html").to_string();
11+
let mut page_template = include_str!("../../views/index.template.html").to_string();
1012
let page = page_template.render(&environment).unwrap();
1113

12-
environment.push(("children".to_string(), Box::new(page)));
14+
environment.push(("children".to_string(), Mutex::new(Box::new(page))));
1315

1416
let mut layout_template = include_str!("../../views/layout.template.html").to_string();
1517
let mut layout = layout_template.render(&environment).unwrap();
1618

1719
RawHtml(layout.render(&environment).unwrap())
1820
}
21+

src/routes/index.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
1+
use crate::{services::{post_service::PostService, user_service::UserService}, utilities::page::Render};
12
use erased_serde::Serialize;
2-
use rocket::{State, futures::lock::Mutex, response::content::RawHtml};
3-
use crate::{services::post_service::PostService, utilities::page::Render};
3+
use rocket::{State, response::content::RawHtml};
4+
use std::sync::Mutex;
5+
46

57
#[get("/index")]
68
pub async fn index(post_service: &State<PostService>) -> RawHtml<String> {
7-
let mut environment = Vec::<(String, Mutex<Box<dyn Serialize>>)>::new();
9+
let mut environment = Vec::<(String, Mutex<Box<dyn Serialize + Send>>)>::new();
10+
let posts = post_service.get_posts().await;
11+
12+
environment.push(("posts".to_string(), Mutex::new(Box::new(posts))));
813

914
let mut page_template = include_str!("../../views/index.template.html").to_string();
10-
let page = page_template.render(&environment).await.unwrap();
15+
let page = page_template.render(&environment).unwrap();
1116

12-
let posts = post_service.get_posts().await;
1317

1418
environment.push(("children".to_string(), Mutex::new(Box::new(page))));
15-
environment.push(("posts".to_string(), Mutex::new(Box::new(posts))));
1619

1720
let mut layout_template = include_str!("../../views/layout.template.html").to_string();
18-
let mut layout = layout_template.render(&environment).await.unwrap();
21+
let mut layout = layout_template.render(&environment).unwrap();
1922

20-
RawHtml(layout.render(&environment).await.unwrap())
23+
RawHtml(layout.render(&environment).unwrap())
2124
}
25+

src/routes/layout.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
use std::{collections::HashMap};
2-
use rocket::response::content::RawHtml;
31
use crate::utilities::page::Render;
2+
use erased_serde::Serialize;
3+
use rocket::response::content::RawHtml;
4+
use std::sync::Mutex;
5+
46

57
#[get("/layout")]
68
pub async fn layout() -> RawHtml<String> {
7-
let mut environment = vec![];
9+
let mut environment = Vec::<(String, Mutex<Box<dyn Serialize + Send>>)>::new();
810

9-
let mut page_template = include_str!("../../views/layout.template.html").to_string();
11+
let mut page_template = include_str!("../../views/index.template.html").to_string();
1012
let page = page_template.render(&environment).unwrap();
1113

12-
environment.push(("children".to_string(), Box::new(page)));
14+
environment.push(("children".to_string(), Mutex::new(Box::new(page))));
1315

1416
let mut layout_template = include_str!("../../views/layout.template.html").to_string();
1517
let mut layout = layout_template.render(&environment).unwrap();
1618

1719
RawHtml(layout.render(&environment).unwrap())
1820
}
21+

0 commit comments

Comments
 (0)