Skip to main content

api/services/action/
discard_cards_to_crib.rs

1#[cfg(feature = "server")]
2use dioxus::fullstack::extract::State;
3use dioxus::prelude::*;
4
5#[cfg(feature = "server")]
6use crate::ServerStateExtractor;
7use crate::{
8    dto::{CardIdDTO, GameIdDTO, UserIdDTO},
9    error::ApiError,
10};
11
12#[post("/api/{user_id}/game/{game_id}/discard_cards_to_crib", State(server_state): State<ServerStateExtractor>)]
13pub async fn discard_cards_to_crib(
14    user_id: UserIdDTO,
15    game_id: GameIdDTO,
16    cards: Vec<CardIdDTO>,
17) -> Result<(), ApiError> {
18    use std::str::FromStr;
19
20    use server::{
21        action::discard_cards_to_crib,
22        domain::{Card, GameId, UserId},
23    };
24
25    let user_id = UserId::from(user_id.value());
26    let game_id = GameId::from(game_id.value());
27    let cards = cards
28        .iter()
29        .map(|cid| Card::from_str(cid))
30        .collect::<Result<_, _>>()
31        .map_err(|error| ApiError::BadRequest(error.to_string()))?;
32
33    discard_cards_to_crib(server_state.0, user_id, game_id, cards).await?;
34    Ok(())
35}