api/services/stream/
available_games_events.rs1#[cfg(feature = "server")]
2use dioxus::fullstack::extract::State;
3use dioxus::{
4 fullstack::{JsonEncoding, Streaming},
5 prelude::*,
6};
7
8#[cfg(feature = "server")]
9use crate::ServerStateExtractor;
10use crate::dto::{AvailableGameEventDTO, UserIdDTO};
11
12#[get("/api/{user_id}/available_games/events", State(server_state): State<ServerStateExtractor>)]
13pub async fn available_games_events(
14 user_id: UserIdDTO,
15) -> Result<Streaming<AvailableGameEventDTO, JsonEncoding>> {
16 use futures::StreamExt;
17 use server::{
18 domain::UserId,
19 stream::{AvailableGameEvent, available_game_events},
20 };
21
22 use crate::dto::GameIdDTO;
23
24 let user_id = UserId::from(user_id.value());
25
26 let game_event_to_dto = |event| match event {
27 AvailableGameEvent::Created { game_id, name } => {
28 let game_id = GameIdDTO::from(game_id.value());
29 AvailableGameEventDTO::Created { game_id, name }
30 }
31 };
32
33 let stream = available_game_events(server_state.0, user_id).await?;
34 let stream = stream.map(game_event_to_dto);
35
36 Ok(Streaming::new(stream))
37}