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, CustomType)]
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, CustomType)]
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, CustomType)]
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(
69 Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq, JsonSchema, Tsify, CustomType,
70)]
71pub struct ArenaTickets {
72 pub current_count: u64,
73 pub max_count: u64,
74 pub last_restore_at: chrono::DateTime<chrono::Utc>,
75}
76
77#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
78#[tsify(into_wasm_abi, from_wasm_abi)]
79pub struct ArenaPvpPlayersRequest {
80 pub character_id: uuid::Uuid,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, JsonSchema, Tsify)]
84#[tsify(into_wasm_abi, from_wasm_abi)]
85pub enum ArenaPvpPlayersResponse {
86 Ok {
87 opponents: Vec<crate::pvp::MatchmakingOpponent>,
88 },
89 Error {
90 code: String,
91 message: String,
92 },
93}
94
95#[derive(
96 Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify, CustomType, Default,
97)]
98pub struct Arena {
99 pub matchmaking_opponents: Vec<crate::pvp::MatchmakingOpponent>,
100 pub is_free_refresh_available: bool,
101}
102
103#[derive(
104 Clone, Debug, Serialize, Deserialize, PartialEq, Eq, JsonSchema, Tsify, CustomType, Default,
105)]
106pub struct ArenaStars {
107 pub arena_stars_daily_claims: i64,
108}