essences/
arena.rs

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}