use crate::creation_audio::CreationAudioAsset; use serde::{Deserialize, Serialize}; #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct StartPuzzleRunRequest { pub profile_id: String, #[serde(default)] pub level_id: Option, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct SwapPuzzlePiecesRequest { pub first_piece_id: String, pub second_piece_id: String, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct DragPuzzlePieceRequest { pub piece_id: String, pub target_row: u32, pub target_col: u32, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct AdvancePuzzleNextLevelRequest { #[serde(default)] pub target_profile_id: Option, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct UsePuzzleRuntimePropRequest { pub prop_kind: String, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct UpdatePuzzleRuntimePauseRequest { pub paused: bool, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct SubmitPuzzleLeaderboardRequest { pub profile_id: String, pub grid_size: u32, pub elapsed_ms: u64, pub nickname: String, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PuzzleCellPositionResponse { pub row: u32, pub col: u32, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PuzzlePieceStateResponse { pub piece_id: String, pub correct_row: u32, pub correct_col: u32, pub current_row: u32, pub current_col: u32, #[serde(default)] pub merged_group_id: Option, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct PuzzleMergedGroupStateResponse { pub group_id: String, pub piece_ids: Vec, pub occupied_cells: Vec, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PuzzleLeaderboardEntryResponse { pub rank: u32, pub nickname: String, pub elapsed_ms: u64, #[serde(default)] pub visible_tags: Vec, #[serde(default)] pub is_current_player: bool, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PuzzleBoardSnapshotResponse { pub rows: u32, pub cols: u32, pub pieces: Vec, pub merged_groups: Vec, #[serde(default)] pub selected_piece_id: Option, pub all_tiles_resolved: bool, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PuzzleRuntimeLevelSnapshotResponse { pub run_id: String, pub level_index: u32, #[serde(default)] pub level_id: Option, pub grid_size: u32, pub profile_id: String, pub level_name: String, pub author_display_name: String, pub theme_tags: Vec, #[serde(default)] pub cover_image_src: Option, #[serde(default)] pub ui_background_image_src: Option, #[serde(default)] pub background_music: Option, pub board: PuzzleBoardSnapshotResponse, pub status: String, #[serde(default)] pub started_at_ms: u64, #[serde(default)] pub cleared_at_ms: Option, #[serde(default)] pub elapsed_ms: Option, #[serde(default)] pub time_limit_ms: u64, #[serde(default)] pub remaining_ms: u64, #[serde(default)] pub paused_accumulated_ms: u64, #[serde(default)] pub pause_started_at_ms: Option, #[serde(default)] pub freeze_accumulated_ms: u64, #[serde(default)] pub freeze_started_at_ms: Option, #[serde(default)] pub freeze_until_ms: Option, #[serde(default)] pub leaderboard_entries: Vec, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PuzzleRecommendedNextWorkResponse { pub profile_id: String, pub level_name: String, pub author_display_name: String, pub theme_tags: Vec, #[serde(default)] pub cover_image_src: Option, pub similarity_score: f32, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PuzzleRunSnapshotResponse { pub run_id: String, pub entry_profile_id: String, pub cleared_level_count: u32, pub current_level_index: u32, pub current_grid_size: u32, pub played_profile_ids: Vec, pub previous_level_tags: Vec, #[serde(default)] pub current_level: Option, #[serde(default)] pub recommended_next_profile_id: Option, #[serde(default)] pub next_level_mode: String, #[serde(default)] pub next_level_profile_id: Option, #[serde(default)] pub next_level_id: Option, #[serde(default)] pub recommended_next_works: Vec, #[serde(default)] pub leaderboard_entries: Vec, } #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PuzzleRunResponse { pub run: PuzzleRunSnapshotResponse, }