1use crate::characters;
2use crate::opponents;
3use crate::users;
4
5use crate::prelude::*;
6
7#[declare]
8pub type ArenaMatchId = uuid::Uuid;
9
10#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
11#[tsify(into_wasm_abi, from_wasm_abi)]
12pub struct Match {
13 pub id: ArenaMatchId,
14 pub opponent: opponents::OpponentPreview,
15 pub is_win: bool,
16 pub rating_change: i64,
17 pub duration_secs: u64,
18 pub is_rematch_available: bool,
19 pub created_at: chrono::DateTime<chrono::Utc>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
23#[tsify(into_wasm_abi, from_wasm_abi)]
24pub struct ArenaMatchesHistoryRequest {
25 pub character_id: uuid::Uuid,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
29#[tsify(into_wasm_abi, from_wasm_abi)]
30pub enum ArenaMatchesHistoryResponse {
31 Ok { matches: Vec<Match> },
32 Error { code: String, message: String },
33}
34
35#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
36pub struct League {
37 pub id: uuid::Uuid,
38 pub name: i18n::I18nString,
39}
40
41#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify)]
42pub struct RankingItem {
43 pub user: users::User,
44 pub character: characters::Character,
45 pub place: u64,
46}
47
48#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
49#[tsify(into_wasm_abi, from_wasm_abi)]
50pub struct ArenaLeaderboardRequest {
51 pub character_id: uuid::Uuid,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
55#[tsify(into_wasm_abi, from_wasm_abi)]
56pub enum ArenaLeaderboardResponse {
57 Ok {
58 league: League,
59 leaderboard: Vec<RankingItem>,
60 character_ranking: Box<RankingItem>,
61 },
62 Error {
63 code: String,
64 message: String,
65 },
66}
67
68#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq, JsonSchema, Tsify)]
69pub struct ArenaTickets {
70 pub current_count: u64,
71 pub max_count: u64,
72 pub last_restore_at: chrono::DateTime<chrono::Utc>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
76#[tsify(into_wasm_abi, from_wasm_abi)]
77pub struct ArenaPvpPlayersRequest {
78 pub character_id: uuid::Uuid,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
82#[tsify(into_wasm_abi, from_wasm_abi)]
83pub enum ArenaPvpPlayersResponse {
84 Ok {
85 opponents: Vec<crate::pvp::MatchmakingOpponent>,
86 },
87 Error {
88 code: String,
89 message: String,
90 },
91}
92
93#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify, Default)]
94pub struct Arena {
95 pub matchmaking_opponents: Vec<crate::pvp::MatchmakingOpponent>,
96 pub is_free_refresh_available: bool,
97}