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