Skip to content

Commit 9550a84

Browse files
committed
Add video entity for the database which is also used for the data exchanged between yew and axum.
1 parent 50cce88 commit 9550a84

File tree

4 files changed

+42
-32
lines changed

4 files changed

+42
-32
lines changed

entity/Cargo.toml

+7-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,11 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
sea-orm = { version = "0.10", features = [ "sqlx-sqlite", "runtime-tokio-native-tls", "macros" ] }
9+
sea-orm = { version = "0.10", features = ["sqlx-sqlite", "runtime-tokio-native-tls", "macros"], optional = true }
10+
bincode = { version = "2.0.0-rc.2", optional = true}
1011
serde = { version = "1.0", features = ["derive"] }
12+
13+
[features]
14+
user = []
15+
seaorm = ["dep:sea-orm"]
16+
video = ["dep:bincode"]

entity/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1+
#[cfg(feature = "user")]
12
pub mod user;
3+
#[cfg(feature = "video")]
4+
pub mod video;

entity/src/video.rs

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use bincode::{Decode, Encode};
2+
use serde::{Deserialize, Serialize};
3+
4+
#[cfg(feature = "seaorm")]
5+
use sea_orm::entity::prelude::*;
6+
7+
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize, Decode, Encode)] // TODO : remove the Debug
8+
#[cfg_attr(feature = "seaorm", derive(DeriveEntityModel))]
9+
#[cfg_attr(feature = "seaorm", sea_orm(table_name = "videos"))]
10+
pub struct Model {
11+
#[cfg_attr(feature = "seaorm", sea_orm(primary_key, auto_increment = false))]
12+
pub id: String,
13+
pub title: String,
14+
pub thumbnail: String,
15+
pub author: String,
16+
pub duration: String,
17+
}
18+
19+
#[cfg(feature = "seaorm")]
20+
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
21+
pub enum Relation {}
22+
23+
#[cfg(feature = "seaorm")]
24+
impl ActiveModelBehavior for ActiveModel {}

src/lib.rs

+8-31
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,24 @@
11
use anyhow::Result;
2-
#[cfg(feature = "axum")]
3-
use axum::extract::ws;
42
use bincode::{config, Decode, Encode};
5-
use gloo_net::websocket;
6-
use my_youtube_extractor::youtube_info::YtVideoPageInfo;
3+
use entity::video::Model;
74

85
#[derive(Debug, Encode, Decode, Clone)]
9-
pub enum NetDataAxum {
10-
Remove(String),
11-
Add(YtVideoPageInfo),
12-
Search(Vec<YtVideoPageInfo>),
13-
Next,
14-
}
15-
16-
#[derive(Debug, Encode, Decode)]
17-
pub enum NetDataYew {
6+
pub enum NetData {
187
Search(String),
8+
SearchResult(Vec<Model>),
199
Remove(String),
20-
Add(YtVideoPageInfo),
10+
Add(Model),
2111
Play,
2212
Pause,
2313
Next,
2414
}
2515

26-
impl NetDataYew {
27-
pub fn encode_yew_message(&self) -> Result<websocket::Message> {
28-
let encoded = bincode::encode_to_vec(self, config::standard())?;
29-
Ok(websocket::Message::Bytes(encoded))
30-
}
31-
32-
pub fn decode_message(bytes: &[u8]) -> Result<NetDataYew> {
33-
Ok(bincode::decode_from_slice(bytes, config::standard())?.0)
34-
}
35-
}
36-
37-
impl NetDataAxum {
38-
#[cfg(feature = "axum")]
39-
pub fn encode_axum_message(&self) -> Result<ws::Message> {
40-
let encoded = bincode::encode_to_vec(self, config::standard())?;
41-
Ok(ws::Message::Binary(encoded))
16+
impl NetData {
17+
pub fn encode_message(&self) -> Result<Vec<u8>> {
18+
Ok(bincode::encode_to_vec(self, config::standard())?)
4219
}
4320

44-
pub fn decode_message(bytes: &[u8]) -> Result<NetDataAxum> {
21+
pub fn decode_message(bytes: &[u8]) -> Result<NetData> {
4522
Ok(bincode::decode_from_slice(bytes, config::standard())?.0)
4623
}
4724
}

0 commit comments

Comments
 (0)