186 lines
5.4 KiB
Rust
186 lines
5.4 KiB
Rust
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<String>,
|
|
}
|
|
|
|
#[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<String>,
|
|
}
|
|
|
|
#[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<String>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct PuzzleMergedGroupStateResponse {
|
|
pub group_id: String,
|
|
pub piece_ids: Vec<String>,
|
|
pub occupied_cells: Vec<PuzzleCellPositionResponse>,
|
|
}
|
|
|
|
#[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 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<PuzzlePieceStateResponse>,
|
|
pub merged_groups: Vec<PuzzleMergedGroupStateResponse>,
|
|
#[serde(default)]
|
|
pub selected_piece_id: Option<String>,
|
|
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<String>,
|
|
pub grid_size: u32,
|
|
pub profile_id: String,
|
|
pub level_name: String,
|
|
pub author_display_name: String,
|
|
pub theme_tags: Vec<String>,
|
|
#[serde(default)]
|
|
pub cover_image_src: Option<String>,
|
|
pub board: PuzzleBoardSnapshotResponse,
|
|
pub status: String,
|
|
#[serde(default)]
|
|
pub started_at_ms: u64,
|
|
#[serde(default)]
|
|
pub cleared_at_ms: Option<u64>,
|
|
#[serde(default)]
|
|
pub elapsed_ms: Option<u64>,
|
|
#[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<u64>,
|
|
#[serde(default)]
|
|
pub freeze_accumulated_ms: u64,
|
|
#[serde(default)]
|
|
pub freeze_started_at_ms: Option<u64>,
|
|
#[serde(default)]
|
|
pub freeze_until_ms: Option<u64>,
|
|
#[serde(default)]
|
|
pub leaderboard_entries: Vec<PuzzleLeaderboardEntryResponse>,
|
|
}
|
|
|
|
#[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<String>,
|
|
#[serde(default)]
|
|
pub cover_image_src: Option<String>,
|
|
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<String>,
|
|
pub previous_level_tags: Vec<String>,
|
|
#[serde(default)]
|
|
pub current_level: Option<PuzzleRuntimeLevelSnapshotResponse>,
|
|
#[serde(default)]
|
|
pub recommended_next_profile_id: Option<String>,
|
|
#[serde(default)]
|
|
pub next_level_mode: String,
|
|
#[serde(default)]
|
|
pub next_level_profile_id: Option<String>,
|
|
#[serde(default)]
|
|
pub next_level_id: Option<String>,
|
|
#[serde(default)]
|
|
pub recommended_next_works: Vec<PuzzleRecommendedNextWorkResponse>,
|
|
#[serde(default)]
|
|
pub leaderboard_entries: Vec<PuzzleLeaderboardEntryResponse>,
|
|
}
|
|
|
|
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
|
#[serde(rename_all = "camelCase")]
|
|
pub struct PuzzleRunResponse {
|
|
pub run: PuzzleRunSnapshotResponse,
|
|
}
|