1use serde::{Deserialize, Serialize};
2
3pub mod achievements;
4pub mod auth;
5pub mod broadcast;
6pub mod chat;
7pub mod chunk;
8pub mod commerce;
9pub mod common;
10pub mod entitlements;
11pub mod errors;
12pub mod friends;
13pub mod game;
14pub mod groups;
15pub mod invites;
16pub mod overlay;
17pub mod presence;
18pub mod profile;
19pub mod system;
20pub mod user;
21pub mod voip;
22
23use crate::protocol::achievements::*;
24use crate::protocol::auth::*;
25use crate::protocol::broadcast::*;
26use crate::protocol::chat::*;
27use crate::protocol::chunk::*;
28use crate::protocol::commerce::*;
29use crate::protocol::common::*;
30use crate::protocol::entitlements::*;
31use crate::protocol::friends::*;
32use crate::protocol::game::*;
33use crate::protocol::groups::*;
34use crate::protocol::invites::*;
35use crate::protocol::overlay::*;
36use crate::protocol::presence::*;
37use crate::protocol::profile::*;
38use crate::protocol::system::*;
39use crate::protocol::user::*;
40use crate::protocol::voip::*;
41#[cfg(feature = "client")]
42use crate::request_response;
43
44#[derive(Debug, Serialize, Deserialize)]
47#[serde(rename = "LSX")]
48pub struct Lsx {
49 #[serde(rename = "$value")]
50 pub message: Message,
51}
52
53#[derive(Debug, Serialize, Deserialize)]
54#[serde(rename_all = "PascalCase")]
55pub enum Message {
56 Request(Request),
57 Response(Response),
58 Event(Event),
59}
60
61#[derive(Debug, Serialize, Deserialize)]
62pub struct Request {
63 #[serde(rename = "@id")]
64 pub id: String,
65 #[serde(rename = "@recipient", default)]
66 pub recipient: String,
67 #[serde(rename = "$value")]
68 pub body: RequestBody,
69}
70
71#[derive(Debug, Serialize, Deserialize)]
72pub struct Response {
73 #[serde(rename = "@id")]
74 pub id: String,
75 #[serde(rename = "@sender", default)]
76 pub sender: String,
77 #[serde(rename = "$value")]
78 pub body: ResponseBody,
79}
80
81#[derive(Debug, Serialize, Deserialize)]
82pub struct Event {
83 #[serde(rename = "@sender", default)]
84 pub sender: String,
85 #[serde(rename = "$value")]
86 pub body: EventBody,
87}
88
89#[derive(Debug, Serialize, Deserialize)]
92pub enum RequestBody {
93 AcceptFriendInvite(AcceptFriendInvite),
94 AcceptInvite(AcceptInvite),
95 AreChunksInstalled(AreChunksInstalled),
96 BlockUser(BlockUser),
97 BroadcastStart(BroadcastStart),
98 BroadcastStop(BroadcastStop),
99 ChallengeResponse(ChallengeResponse),
100 Checkout(Checkout),
101 ConsumeEntitlement(ConsumeEntitlement),
102 CreateChunk(CreateChunk),
103 CreateGroup(CreateGroup),
104 EnableVoip(EnableVoip),
105 EnterGroup(EnterGroup),
106 ExtendTrial(ExtendTrial),
107 GetAuthCode(GetAuthCode),
108 GetAllGameInfo(GetAllGameInfo),
109 GetBlockList(GetBlockList),
110 GetChunkPriority(GetChunkPriority),
111 GetConfig(GetConfig),
112 GetGroupInfo(GetGroupInfo),
113 GetInternetConnectedState(GetInternetConnectedState),
114 GetPresence(GetPresence),
115 GetPresenceVisibility(GetPresenceVisibility),
116 GetProfile(GetProfile),
117 GetSettings(GetSettings),
118 GetUserProfileByEmailorEaid(GetUserProfileByEmailorEaid),
119 GetUtcTime(GetUtcTime),
120 GetVoipStatus(GetVoipStatus),
121 GetWalletBalance(GetWalletBalance),
122 GoOnline(GoOnline),
123 GrantAchievement(GrantAchievement),
124 InviteUsersToGroup(InviteUsersToGroup),
125 IsFileDownloaded(IsFileDownloaded),
126 IsProgressiveInstallationAvailable(IsProgressiveInstallationAvailable),
127 LeaveGroup(LeaveGroup),
128 MuteUser(MuteUser),
129 PostAchievementEvents(PostAchievementEvents),
130 QueryAchievements(QueryAchievements),
131 QueryAreFriends(QueryAreFriends),
132 QueryChunkFiles(QueryChunkFiles),
133 QueryChunkStatus(QueryChunkStatus),
134 QueryContent(QueryContent),
135 QueryEntitlements(QueryEntitlements),
136 QueryFriends(QueryFriends),
137 QueryGroup(QueryGroup),
138 QueryImage(QueryImage),
139 QueryManifest(QueryManifest),
140 QueryMuteState(QueryMuteState),
141 QueryOffers(QueryOffers),
142 QueryPresence(QueryPresence),
143 RemoveFriend(RemoveFriend),
144 RemoveUsersFromGroup(RemoveUsersFromGroup),
145 RequestFriend(RequestFriend),
146 RestartGame(RestartGame),
147 SendChatMessage(SendChatMessage),
148 SendGameMessage(SendGameMessage),
149 SendGroupGameInvite(SendGroupGameInvite),
150 SendInvite(SendInvite),
151 SetChunkPriority(SetChunkPriority),
152 SetDownloaderUtilization(SetDownloaderUtilization),
153 SetPresence(SetPresence),
154 SetPresenceVisibility(SetPresenceVisibility),
155 ShowIgo(ShowIgo),
156 ShowIgoWindow(ShowIgoWindow),
157 StartGame(StartGame),
158 UnblockUser(UnblockUser),
159}
160
161#[derive(Debug, Serialize, Deserialize)]
162pub enum ResponseBody {
163 Achievement(Achievement),
164 AchievementSets(AchievementSets),
165 AreChunksInstalledResponse(AreChunksInstalledResponse),
166 AuthCode(AuthCode),
167 ChallengeAccepted(ChallengeAccepted),
168 ConsumeEntitlementResponse(ConsumeEntitlementResponse),
169 CreateChunkResponse(CreateChunkResponse),
170 ErrorSuccess(ErrorSuccess),
171 ExtendTrialResponse(ExtendTrialResponse),
172 GetAllGameInfoResponse(GetAllGameInfoResponse),
173 GetBlockListResponse(GetBlockListResponse),
174 GetChunkPriorityResponse(GetChunkPriorityResponse),
175 GetConfigResponse(GetConfigResponse),
176 GetPresenceResponse(GetPresenceResponse),
177 GetPresenceVisibilityResponse(GetPresenceVisibilityResponse),
178 GetProfileResponse(GetProfileResponse),
179 GetSettingsResponse(GetSettingsResponse),
180 GetUtcTimeResponse(GetUtcTimeResponse),
181 GetUserProfileByEmailorEaidResponse(GetUserProfileByEmailorEaidResponse),
182 GetVoipStatusResponse(GetVoipStatusResponse),
183 GetWalletBalanceResponse(GetWalletBalanceResponse),
184 GroupInfo(GroupInfo),
185 InternetConnectedState(InternetConnectedState),
186 IsFileDownloadedResponse(IsFileDownloadedResponse),
187 IsProgressiveInstallationAvailableResponse(IsProgressiveInstallationAvailableResponse),
188 QueryAreFriendsResponse(QueryAreFriendsResponse),
189 QueryChunkFilesResponse(QueryChunkFilesResponse),
190 QueryChunkStatusResponse(QueryChunkStatusResponse),
191 QueryContentResponse(QueryContentResponse),
192 QueryEntitlementsResponse(QueryEntitlementsResponse),
193 QueryFriendsResponse(QueryFriendsResponse),
194 QueryGroupResponse(QueryGroupResponse),
195 QueryImageResponse(QueryImageResponse),
196 QueryManifestResponse(QueryManifestResponse),
197 QueryMuteStateResponse(QueryMuteStateResponse),
198 QueryOffersResponse(QueryOffersResponse),
199 QueryPresenceResponse(QueryPresenceResponse),
200}
201
202#[derive(Debug, Serialize, Deserialize)]
203pub enum EventBody {
204 AchievementSets(AchievementSets),
205 BlockListUpdated(BlockListUpdated),
206 BroadcastEvent(BroadcastEvent),
207 Challenge(Challenge),
208 ChatMessageEvent(ChatMessageEvent),
209 ChatStateUpdateEvent(ChatStateUpdateEvent),
210 ChunkStatus(ChunkStatus),
211 CoreContentUpdated(CoreContentUpdated),
212 CurrentUserPresenceEvent(CurrentUserPresenceEvent),
213 GameMessageEvent(GameMessageEvent),
214 GetPresenceResponse(GetPresenceResponse),
215 GroupEnterEvent(GroupEnterEvent),
216 GroupEvent(GroupEvent),
217 GroupInviteEvent(GroupInviteEvent),
218 GroupLeaveEvent(GroupLeaveEvent),
219 IgoEvent(IgoEvent),
220 IgoUnavailable(IgoUnavailable),
221 Login(Login),
222 MinimizeRequest(MinimizeRequest),
223 MultiplayerInvite(MultiplayerInvite),
224 MultiplayerInvitePending(MultiplayerInvitePending),
225 OnlineStatusEvent(OnlineStatusEvent),
226 PresenceVisibilityEvent(PresenceVisibilityEvent),
227 ProfileEvent(ProfileEvent),
228 PurchaseEvent(PurchaseEvent),
229 QueryEntitlementsResponse(QueryEntitlementsResponse),
230 QueryFriendsResponse(QueryFriendsResponse),
231 RestoreRequest(RestoreRequest),
232 UserInvitedEvent(UserInvitedEvent),
233 VoipStatusEvent(VoipStatusEvent),
234}
235
236#[cfg(feature = "client")]
239pub trait RequestResponse {
240 type Response;
241 fn extract_response(body: ResponseBody) -> Result<Self::Response, crate::sdk::SdkError>;
242}
243
244#[cfg(feature = "client")]
245request_response! {
246 AcceptFriendInvite => ErrorSuccess,
247 AcceptInvite => ErrorSuccess,
248 AreChunksInstalled => AreChunksInstalledResponse,
249 BlockUser => ErrorSuccess,
250 BroadcastStart => ErrorSuccess,
251 BroadcastStop => ErrorSuccess,
252 ChallengeResponse => ChallengeAccepted,
253 Checkout => ErrorSuccess,
254 ConsumeEntitlement => ConsumeEntitlementResponse,
255 CreateChunk => CreateChunkResponse,
256 CreateGroup => GroupInfo,
257 EnableVoip => ErrorSuccess,
258 EnterGroup => GroupInfo,
259 ExtendTrial => ExtendTrialResponse,
260 GetAuthCode => AuthCode,
261 GetAllGameInfo => GetAllGameInfoResponse,
262 GetBlockList => GetBlockListResponse,
263 GetChunkPriority => GetChunkPriorityResponse,
264 GetConfig => GetConfigResponse,
265 GetGroupInfo => GroupInfo,
266 GetInternetConnectedState => InternetConnectedState,
267 GetPresence => GetPresenceResponse,
268 GetPresenceVisibility => GetPresenceVisibilityResponse,
269 GetProfile => GetProfileResponse,
270 GetSettings => GetSettingsResponse,
271 GetUserProfileByEmailorEaid => GetUserProfileByEmailorEaidResponse,
272 GetUtcTime => GetUtcTimeResponse,
273 GetVoipStatus => GetVoipStatusResponse,
274 GetWalletBalance => GetWalletBalanceResponse,
275 GoOnline => ErrorSuccess,
276 GrantAchievement => Achievement,
277 InviteUsersToGroup => ErrorSuccess,
278 IsFileDownloaded => IsFileDownloadedResponse,
279 IsProgressiveInstallationAvailable => IsProgressiveInstallationAvailableResponse,
280 LeaveGroup => ErrorSuccess,
281 MuteUser => ErrorSuccess,
282 PostAchievementEvents => ErrorSuccess,
283 QueryAchievements => AchievementSets,
284 QueryAreFriends => QueryAreFriendsResponse,
285 QueryChunkFiles => QueryChunkFilesResponse,
286 QueryChunkStatus => QueryChunkStatusResponse,
287 QueryContent => QueryContentResponse,
288 QueryEntitlements => QueryEntitlementsResponse,
289 QueryFriends => QueryFriendsResponse,
290 QueryGroup => QueryGroupResponse,
291 QueryImage => QueryImageResponse,
292 QueryManifest => QueryManifestResponse,
293 QueryMuteState => QueryMuteStateResponse,
294 QueryOffers => QueryOffersResponse,
295 QueryPresence => QueryPresenceResponse,
296 RemoveFriend => ErrorSuccess,
297 RemoveUsersFromGroup => ErrorSuccess,
298 RequestFriend => ErrorSuccess,
299 RestartGame => ErrorSuccess,
300 SendChatMessage => ErrorSuccess,
301 SendGameMessage => ErrorSuccess,
302 SendGroupGameInvite => ErrorSuccess,
303 SendInvite => ErrorSuccess,
304 SetChunkPriority => ErrorSuccess,
305 SetDownloaderUtilization => ErrorSuccess,
306 SetPresence => ErrorSuccess,
307 SetPresenceVisibility => ErrorSuccess,
308 ShowIgo => ErrorSuccess,
309 ShowIgoWindow => ErrorSuccess,
310 StartGame => ErrorSuccess,
311 UnblockUser => ErrorSuccess,
312}